From e630fab521513ec15fd69756894910b09c4c2dde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9tur=20Ingi=20Egilsson?= Date: Sun, 18 Oct 2026 05:37:57 +0200 Subject: [PATCH 1/3] Fix leaks on failed call_method and get_property When sd_bus_call failed, call_method raised before unref-ing the call message and freeing the sd_bus_error. Any file descriptor appended to the message (type "h") was leaked with it, so a long-running process making failing calls eventually hit EMFILE. get_property never freed its error. Release both in a finally block, and add an e2e test that makes 100 failing calls with an fd argument and checks the fd count stays flat. Co-Authored-By: Claude Opus 5.5 --- CHANGES.md | 1 + e2e/test_dbus.py | 29 +++++++++++++++++++++ pystemd/dbuslib.pyx | 63 ++++++++++++++++++++++++--------------------- 3 files changed, 63 insertions(+), 30 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 790937d..e3bb890 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,6 +6,7 @@ the one you find pypi, but its the one in development. dev ===== +* Fix leaked D-Bus messages, errors and passed file descriptors when `DBus.call_method` or `DBus.get_property` fails 0.15.3 ===== diff --git a/e2e/test_dbus.py b/e2e/test_dbus.py index c8386ee..0155c34 100644 --- a/e2e/test_dbus.py +++ b/e2e/test_dbus.py @@ -1,5 +1,9 @@ """E2E tests for D-Bus integration""" +import os + +import pytest + from pystemd.dbuslib import DBus @@ -7,3 +11,28 @@ def test_dbus_connection(): """Test basic D-Bus connection""" with DBus() as bus: assert bus is not None + + +def test_failed_call_does_not_leak(): + """A failed method call must release its message, including passed fds""" + fd = os.open("/dev/null", os.O_RDONLY) + try: + with DBus() as bus: + + def fail(): + with pytest.raises(Exception, match="NoSuchMethod"): + bus.call_method( + b"org.freedesktop.DBus", + b"/org/freedesktop/DBus", + b"org.freedesktop.DBus", + b"NoSuchMethod", + [(ord(b"h"), fd)], + ) + + fail() + before = len(os.listdir("/proc/self/fd")) + for _ in range(100): + fail() + assert len(os.listdir("/proc/self/fd")) == before + finally: + os.close(fd) diff --git a/pystemd/dbuslib.pyx b/pystemd/dbuslib.pyx index a0dd89b..0051512 100644 --- a/pystemd/dbuslib.pyx +++ b/pystemd/dbuslib.pyx @@ -413,7 +413,6 @@ cdef class DBus: int arg_type dbusc.sd_bus_message *msg_call = NULL - dbusc.sd_bus_message *msg_reply = NULL dbusc.sd_bus_error error = dbusc.sd_bus_error(NULL, NULL, 0) DbusMessage msg = DbusMessage() @@ -430,26 +429,27 @@ cdef class DBus: if r < 0: raise DBusError(r, None, 'Could not create DBus method') - for narg, (arg_type, arg_value) in enumerate(args or []): - try: - self._msg_append(msg_call, arg_type, arg_value) - except TypeError as e: - raise TypeError( - str(e) + ' for input "{}", element ' - 'number {} in input series:\n{}'.format( - arg_value, narg, pformat(args))) + # msg_call (and any fds appended to it) and error must be released on + # every path, including failed calls and bad arguments. + try: + for narg, (arg_type, arg_value) in enumerate(args or []): + try: + self._msg_append(msg_call, arg_type, arg_value) + except TypeError as e: + raise TypeError( + str(e) + ' for input "{}", element ' + 'number {} in input series:\n{}'.format( + arg_value, narg, pformat(args))) + r = dbusc.sd_bus_call(self.bus, msg_call, 0, &error, msg.ref()) - r = dbusc.sd_bus_call(self.bus, msg_call, 0, &error, msg.ref()) - - if r < 0: - raise DBusError(r, error.name, error.message) - - msg.process_reply(False) + if r < 0: + raise DBusError(r, error.name, error.message) - dbusc.sd_bus_message_unref(msg_call) - dbusc.sd_bus_message_unref(msg_reply) - dbusc.sd_bus_error_free(&error) + msg.process_reply(False) + finally: + dbusc.sd_bus_message_unref(msg_call) + dbusc.sd_bus_error_free(&error) return msg @@ -467,19 +467,22 @@ cdef class DBus: DbusMessage msg = DbusMessage() - r = dbusc.sd_bus_get_property( - self.bus, - destination, - path, - interface, - property, - &error, - msg.ref(), - rtype - ) + try: + r = dbusc.sd_bus_get_property( + self.bus, + destination, + path, + interface, + property, + &error, + msg.ref(), + rtype + ) - if r < 0: - raise DBusError(r, error.name, error.message) + if r < 0: + raise DBusError(r, error.name, error.message) + finally: + dbusc.sd_bus_error_free(&error) msg.process_reply(False) return msg.body From 439d956521186e98a9b3935ec38b6c47bcd207bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9tur=20Ingi=20Egilsson?= Date: Sun, 18 Oct 2026 05:49:11 +0200 Subject: [PATCH 2/3] Generate transient property signatures by probing systemd KNOWN_UNIT_SIGNATURES was kept by hand and had drifted: Conditions and Asserts were listed with their read type a(sbbsi) instead of a(sbbs), so systemd rejected them ("Bad message"); 52 entries are properties systemd does not let you set at all (unit state such as ActiveState, reverse dependencies, removed names, a misspelled SmackLabelIPIn); and over 200 settable properties were missing. systemd does not publish the signatures it accepts when setting a property, and they often differ from the introspection XML (ExecStart is read as a(sasbttttuii) but set as a(sasb); some properties are write-only). tools/probe_transient_properties.py measures them instead: it sends each candidate name with each candidate signature to StartTransientUnit on a throwaway system and classifies systemd's answer. Candidates come from the machine itself (introspection XML, unit file directives, string literals in libsystemd-core). The results for systemd 255 (Ubuntu 24.04), 257 (Debian 13) and 259 (Ubuntu 26.04) are in tools/transient-properties/, and tools/generate_transient_properties.py turns them into pystemd/systemd1/transient_properties.py. No property changed signature between those versions. KNOWN_UNIT_SIGNATURES is now that table plus pystemd's own conveniences (RuntimeMaxSec, ListenStream, ...), which are kept separate and tested to target real properties with the right signature. Co-Authored-By: Claude Opus 5.5 --- CHANGES.md | 1 + CONTRIBUTING.md | 16 + e2e/test_transient_units.py | 18 + pystemd/systemd1/transient_properties.py | 501 +++++ pystemd/systemd1/unit_signatures.py | 337 +--- tests/test_unit_signatures.py | 39 + tools/generate_transient_properties.py | 104 + tools/probe_transient_properties.py | 352 ++++ tools/transient-properties/systemd-255.json | 1946 ++++++++++++++++++ tools/transient-properties/systemd-257.json | 1995 ++++++++++++++++++ tools/transient-properties/systemd-259.json | 2017 +++++++++++++++++++ 11 files changed, 6998 insertions(+), 328 deletions(-) create mode 100644 pystemd/systemd1/transient_properties.py create mode 100755 tools/generate_transient_properties.py create mode 100755 tools/probe_transient_properties.py create mode 100644 tools/transient-properties/systemd-255.json create mode 100644 tools/transient-properties/systemd-257.json create mode 100644 tools/transient-properties/systemd-259.json diff --git a/CHANGES.md b/CHANGES.md index e3bb890..2dcc963 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,6 +6,7 @@ the one you find pypi, but its the one in development. dev ===== +* Generate transient unit property signatures by probing systemd 255, 257 and 259 instead of keeping them by hand: fixes `Conditions` and `Asserts`, adds 227 missing properties, and drops 52 that systemd does not let you set * Fix leaked D-Bus messages, errors and passed file descriptors when `DBus.call_method` or `DBus.get_property` fails 0.15.3 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0e9330e..0de6185 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -61,6 +61,22 @@ each commit: uv run pre-commit install ``` +### Transient unit property signatures + +`pystemd/systemd1/transient_properties.py` lists the D-Bus signature systemd +accepts for each property of a transient unit. It is generated, so do not edit +it by hand. The data comes from asking a running systemd, one file per version +in `tools/transient-properties/`. + +To add a systemd version, run the probe as root inside a throwaway container +or VM with that systemd (it creates and stops transient units), then +regenerate the module: + +```bash +python3 tools/probe_transient_properties.py tools/transient-properties/systemd-NNN.json +python3 tools/generate_transient_properties.py +``` + ## Sending a pull request Have a fix or feature? Awesome! When you send the pull request we suggest you include a build output. diff --git a/e2e/test_transient_units.py b/e2e/test_transient_units.py index 8b034aa..6a6036d 100644 --- a/e2e/test_transient_units.py +++ b/e2e/test_transient_units.py @@ -55,3 +55,21 @@ def test_transient_unit_with_dependencies(): # Cleanup unit.Unit.Stop(b"replace") + + +def test_transient_unit_with_conditions(): + """Conditions is set as a(sbbs), not read type a(sbbsi)""" + if os.geteuid() != 0: + pytest.skip("Requires root privileges") + + unit = pystemd.run( + [b"/bin/true"], + extra={ + b"Conditions": [(b"ConditionPathExists", False, False, b"/")], + }, + remain_after_exit=True, + ) + + assert unit.Unit.Conditions[0][:4] == (b"ConditionPathExists", False, False, b"/") + + unit.Unit.Stop(b"replace") diff --git a/pystemd/systemd1/transient_properties.py b/pystemd/systemd1/transient_properties.py new file mode 100644 index 0000000..e5f335b --- /dev/null +++ b/pystemd/systemd1/transient_properties.py @@ -0,0 +1,501 @@ +# +# This source code is licensed under the license found in the LICENSE file in +# the root directory of this source tree. +# +# Generated by tools/generate_transient_properties.py from probing +# systemd 255, systemd 257 and systemd 259. Do not edit by hand. +# + +"""D-Bus signatures systemd accepts when setting properties of transient +units (StartTransientUnit, SetUnitProperties). + +These are measured, not copied from the introspection XML: the type a property +is set with often differs from the type it is read as (ExecStart is read as +a(sasbttttuii) but set as a(sasb)), and some properties are write-only. + +A comment lists the probed systemd versions a property is settable on when +that is not all of them. +""" + +TRANSIENT_PROPERTY_SIGNATURES: dict[bytes, bytes] = { + b"Accept": b"b", + b"AcceptFileDescriptors": b"b", # 259 + b"AccuracySec": b"t", + b"AccuracyUSec": b"t", + b"AddRef": b"b", + b"After": b"as", + b"AllowIsolate": b"b", + b"AllowedCPUs": b"ay", + b"AllowedMemoryNodes": b"ay", + b"AmbientCapabilities": b"t", + b"AppArmorProfile": b"(bs)", + b"Asserts": b"a(sbbs)", + b"BPFDelegateAttachments": b"s", # 259 + b"BPFDelegateCommands": b"s", # 259 + b"BPFDelegateMaps": b"s", # 259 + b"BPFDelegatePrograms": b"s", # 259 + b"BPFProgram": b"a(ss)", + b"Backlog": b"u", + b"Before": b"as", + b"BindIPv6Only": b"s", + b"BindLogSockets": b"b", # 257, 259 + b"BindPaths": b"a(ssbt)", + b"BindReadOnlyPaths": b"a(ssbt)", + b"BindToDevice": b"s", + b"BindsTo": b"as", + b"BlockIOAccounting": b"b", # 255, 257; ignored on 259 + b"BlockIODeviceWeight": b"a(st)", # 255, 257; ignored on 259 + b"BlockIOReadBandwidth": b"a(st)", # 255, 257; ignored on 259 + b"BlockIOWeight": b"t", # 255, 257; ignored on 259 + b"BlockIOWriteBandwidth": b"a(st)", # 255, 257; ignored on 259 + b"Broadcast": b"b", + b"BusName": b"s", + b"CPUAccounting": b"b", # 255, 257; ignored on 259 + b"CPUAffinity": b"ay", + b"CPUAffinityFromNUMA": b"b", + b"CPUQuotaPerSecUSec": b"t", + b"CPUQuotaPeriodUSec": b"t", + b"CPUSchedulingPolicy": b"i", + b"CPUSchedulingPriority": b"i", + b"CPUSchedulingResetOnFork": b"b", + b"CPUShares": b"t", # 255, 257; ignored on 259 + b"CPUWeight": b"t", + b"CacheDirectory": b"as", + b"CacheDirectoryAccounting": b"b", # 259 + b"CacheDirectoryMode": b"u", + b"CacheDirectoryQuota": b"(tus)", # 259 + b"CacheDirectorySymlink": b"a(sst)", + b"CapabilityBoundingSet": b"t", + b"CollectMode": b"s", + b"ConcurrencyHardMax": b"u", # 259 + b"ConcurrencySoftMax": b"u", # 259 + b"Conditions": b"a(sbbs)", + b"ConfigurationDirectory": b"as", + b"ConfigurationDirectoryMode": b"u", + b"Conflicts": b"as", + b"Controller": b"s", + b"CoredumpFilter": b"t", + b"CoredumpReceive": b"b", + b"DefaultDependencies": b"b", + b"DefaultMemoryLow": b"t", + b"DefaultMemoryLowScale": b"u", + b"DefaultMemoryMin": b"t", + b"DefaultMemoryMinScale": b"u", + b"DefaultStartupMemoryLow": b"t", + b"DeferAcceptUSec": b"t", + b"DeferReactivation": b"b", # 257, 259 + b"DeferTrigger": b"s", # 259 + b"DeferTriggerMaxUSec": b"t", # 259 + b"Delegate": b"b", + b"DelegateControllers": b"as", + b"DelegateNamespaces": b"t", # 259 + b"DelegateSubgroup": b"s", + b"Description": b"s", + b"DeviceAllow": b"a(ss)", + b"DevicePolicy": b"s", + b"DirectoryMode": b"u", + b"DisableControllers": b"as", + b"Documentation": b"as", + b"DynamicUser": b"b", + b"Environment": b"as", + b"EnvironmentFiles": b"a(sb)", + b"ExecCondition": b"a(sasb)", + b"ExecConditionEx": b"a(sasas)", + b"ExecPaths": b"as", + b"ExecReload": b"a(sasb)", + b"ExecReloadEx": b"a(sasas)", + b"ExecReloadPost": b"a(sasb)", # 259 + b"ExecReloadPostEx": b"a(sasas)", # 259 + b"ExecSearchPath": b"as", + b"ExecStart": b"a(sasb)", + b"ExecStartChown": b"a(sasb)", + b"ExecStartEx": b"a(sasas)", + b"ExecStartPost": b"a(sasb)", + b"ExecStartPostEx": b"a(sasas)", + b"ExecStartPre": b"a(sasb)", + b"ExecStartPreEx": b"a(sasas)", + b"ExecStop": b"a(sasb)", + b"ExecStopEx": b"a(sasas)", + b"ExecStopPost": b"a(sasb)", + b"ExecStopPostEx": b"a(sasas)", + b"ExecStopPre": b"a(sasb)", + b"ExitType": b"s", + b"ExtensionDirectories": b"as", + b"ExtensionImagePolicy": b"s", + b"ExtensionImages": b"a(sba(ss))", + b"ExtraFileDescriptors": b"a(hs)", # 257, 259 + b"ExtraOptions": b"s", + b"FailureAction": b"s", + b"FailureActionExitStatus": b"i", + b"FileDescriptorName": b"s", + b"FileDescriptorStoreMax": b"u", + b"FileDescriptorStorePreserve": b"s", + b"FinalKillSignal": b"i", + b"FixedRandomDelay": b"b", + b"FlushPending": b"b", + b"ForceUnmount": b"b", + b"FreeBind": b"b", + b"Group": b"s", + b"GuessMainPID": b"b", + b"IOAccounting": b"b", + b"IODeviceLatencyTargetUSec": b"a(st)", + b"IODeviceWeight": b"a(st)", + b"IOReadBandwidthMax": b"a(st)", + b"IOReadIOPSMax": b"a(st)", + b"IOSchedulingClass": b"i", + b"IOSchedulingPriority": b"i", + b"IOWeight": b"t", + b"IOWriteBandwidthMax": b"a(st)", + b"IOWriteIOPSMax": b"a(st)", + b"IPAccounting": b"b", + b"IPAddressAllow": b"a(iayu)", + b"IPAddressDeny": b"a(iayu)", + b"IPCNamespacePath": b"s", + b"IPEgressFilterPath": b"as", + b"IPIngressFilterPath": b"as", + b"IPTOS": b"i", + b"IPTTL": b"i", + b"IgnoreOnIsolate": b"b", + b"IgnoreSIGPIPE": b"b", + b"ImportCredential": b"as", + b"ImportCredentialEx": b"a(ss)", # 257, 259 + b"InaccessibleDirectories": b"as", + b"InaccessiblePaths": b"as", + b"JobRunningTimeoutUSec": b"t", + b"JobTimeoutAction": b"s", + b"JobTimeoutRebootArgument": b"s", + b"JoinsNamespaceOf": b"as", + b"KeepAlive": b"b", + b"KeepAliveIntervalUSec": b"t", + b"KeepAliveProbes": b"u", + b"KeepAliveTimeUSec": b"t", + b"KeyringMode": b"s", + b"KillMode": b"s", + b"KillSignal": b"i", + b"LazyUnmount": b"b", + b"LimitAS": b"t", + b"LimitASSoft": b"t", + b"LimitCORE": b"t", + b"LimitCORESoft": b"t", + b"LimitCPU": b"t", + b"LimitCPUSoft": b"t", + b"LimitDATA": b"t", + b"LimitDATASoft": b"t", + b"LimitFSIZE": b"t", + b"LimitFSIZESoft": b"t", + b"LimitLOCKS": b"t", + b"LimitLOCKSSoft": b"t", + b"LimitMEMLOCK": b"t", + b"LimitMEMLOCKSoft": b"t", + b"LimitMSGQUEUE": b"t", + b"LimitMSGQUEUESoft": b"t", + b"LimitNICE": b"t", + b"LimitNICESoft": b"t", + b"LimitNOFILE": b"t", + b"LimitNOFILESoft": b"t", + b"LimitNPROC": b"t", + b"LimitNPROCSoft": b"t", + b"LimitRSS": b"t", + b"LimitRSSSoft": b"t", + b"LimitRTPRIO": b"t", + b"LimitRTPRIOSoft": b"t", + b"LimitRTTIME": b"t", + b"LimitRTTIMESoft": b"t", + b"LimitSIGPENDING": b"t", + b"LimitSIGPENDINGSoft": b"t", + b"LimitSTACK": b"t", + b"LimitSTACKSoft": b"t", + b"Listen": b"a(ss)", + b"LoadCredential": b"a(ss)", + b"LoadCredentialEncrypted": b"a(ss)", + b"LockPersonality": b"b", + b"LogExtraFields": b"aay", + b"LogFilterPatterns": b"a(bs)", + b"LogLevelMax": b"i", + b"LogNamespace": b"s", + b"LogRateLimitBurst": b"u", + b"LogRateLimitIntervalUSec": b"t", + b"LogsDirectory": b"as", + b"LogsDirectoryAccounting": b"b", # 259 + b"LogsDirectoryMode": b"u", + b"LogsDirectoryQuota": b"(tus)", # 259 + b"LogsDirectorySymlink": b"a(sst)", + b"MakeDirectory": b"b", + b"ManagedOOMMemoryPressure": b"s", + b"ManagedOOMMemoryPressureDurationUSec": b"t", # 257, 259 + b"ManagedOOMMemoryPressureLimit": b"u", + b"ManagedOOMPreference": b"s", + b"ManagedOOMSwap": b"s", + b"Mark": b"i", + b"Markers": b"as", + b"MaxConnections": b"u", + b"MaxConnectionsPerSource": b"u", + b"MemoryAccounting": b"b", + b"MemoryDenyWriteExecute": b"b", + b"MemoryHigh": b"t", + b"MemoryHighScale": b"u", + b"MemoryKSM": b"b", + b"MemoryLimit": b"t", # 255, 257; ignored on 259 + b"MemoryLimitScale": b"u", # 255, 257; ignored on 259 + b"MemoryLow": b"t", + b"MemoryLowScale": b"u", + b"MemoryMax": b"t", + b"MemoryMaxScale": b"u", + b"MemoryMin": b"t", + b"MemoryMinScale": b"u", + b"MemoryPressureThresholdUSec": b"t", + b"MemoryPressureWatch": b"s", + b"MemorySwapMax": b"t", + b"MemorySwapMaxScale": b"u", + b"MemoryZSwapMax": b"t", + b"MemoryZSwapMaxScale": b"u", + b"MemoryZSwapWriteback": b"b", # 257, 259 + b"MessageQueueMaxMessages": b"x", + b"MessageQueueMessageSize": b"x", + b"MountAPIVFS": b"b", + b"MountFlags": b"t", + b"MountImagePolicy": b"s", + b"MountImages": b"a(ssba(ss))", + b"NFTSet": b"a(iiss)", + b"NUMAMask": b"ay", + b"NUMAPolicy": b"i", + b"NetworkNamespacePath": b"s", + b"Nice": b"i", + b"NoDelay": b"b", + b"NoExecPaths": b"as", + b"NoNewPrivileges": b"b", + b"NonBlocking": b"b", + b"NotifyAccess": b"s", + b"OOMPolicy": b"s", + b"OOMScoreAdjust": b"i", + b"OnActiveSec": b"t", + b"OnBootSec": b"t", + b"OnCalendar": b"s", + b"OnClockChange": b"b", + b"OnFailure": b"as", + b"OnFailureJobMode": b"s", + b"OnStartupSec": b"t", + b"OnSuccess": b"as", + b"OnSuccessJobMode": b"s", + b"OnTimezoneChange": b"b", + b"OnUnitActiveSec": b"t", + b"OnUnitInactiveSec": b"t", + b"OpenFile": b"a(sst)", + b"Options": b"s", + b"PAMName": b"s", + b"PIDFDs": b"ah", + b"PIDFile": b"s", + b"PIDs": b"au", + b"PartOf": b"as", + b"PassCredentials": b"b", + b"PassEnvironment": b"as", + b"PassFileDescriptorsToExec": b"b", # 257, 259 + b"PassPIDFD": b"b", # 259 + b"PassPacketInfo": b"b", + b"PassSecurity": b"b", + b"Paths": b"a(ss)", + b"PermissionsStartOnly": b"b", + b"Persistent": b"b", + b"Personality": b"s", + b"PipeSize": b"t", + b"PollLimitBurst": b"u", + b"PollLimitIntervalUSec": b"t", + b"Priority": b"i", + b"PrivateBPF": b"s", # 259 + b"PrivateDevices": b"b", + b"PrivateIPC": b"b", + b"PrivateMounts": b"b", + b"PrivateNetwork": b"b", + b"PrivatePIDs": b"s", # 257, 259 + b"PrivateTmp": b"b", + b"PrivateTmpEx": b"s", # 257, 259 + b"PrivateUsers": b"b", + b"PrivateUsersEx": b"s", # 257, 259 + b"ProcSubset": b"s", + b"PropagatesReloadTo": b"as", + b"PropagatesStopTo": b"as", + b"ProtectClock": b"b", + b"ProtectControlGroups": b"b", + b"ProtectControlGroupsEx": b"s", # 257, 259 + b"ProtectHome": b"s", + b"ProtectHostname": b"b", + b"ProtectHostnameEx": b"(ss)", # 259 + b"ProtectKernelLogs": b"b", + b"ProtectKernelModules": b"b", + b"ProtectKernelTunables": b"b", + b"ProtectProc": b"s", + b"ProtectSystem": b"s", + b"RandomizedDelayUSec": b"t", + b"RandomizedOffsetUSec": b"t", # 259 + b"ReadOnlyDirectories": b"as", + b"ReadOnlyPaths": b"as", + b"ReadWriteDirectories": b"as", + b"ReadWriteOnly": b"b", + b"ReadWritePaths": b"as", + b"RebootArgument": b"s", + b"ReceiveBuffer": b"t", + b"RefuseManualStart": b"b", + b"RefuseManualStop": b"b", + b"ReloadPropagatedFrom": b"as", + b"ReloadSignal": b"i", + b"RemainAfterElapse": b"b", + b"RemainAfterExit": b"b", + b"RemoveIPC": b"b", + b"RemoveOnStop": b"b", + b"Requires": b"as", + b"RequiresMountsFor": b"as", + b"RequiresOverridable": b"as", + b"Requisite": b"as", + b"RequisiteOverridable": b"as", + b"Restart": b"s", + b"RestartForceExitStatus": b"(aiai)", + b"RestartKillSignal": b"i", + b"RestartMaxDelayUSec": b"t", + b"RestartMode": b"s", + b"RestartPreventExitStatus": b"(aiai)", + b"RestartSteps": b"u", + b"RestartUSec": b"t", + b"RestrictAddressFamilies": b"(bas)", + b"RestrictFileSystems": b"(bas)", + b"RestrictNamespaces": b"t", + b"RestrictNetworkInterfaces": b"(bas)", + b"RestrictRealtime": b"b", + b"RestrictSUIDSGID": b"b", + b"ReusePort": b"b", + b"RootDirectory": b"s", + b"RootDirectoryFileDescriptor": b"h", # 259 + b"RootDirectoryStartOnly": b"b", + b"RootEphemeral": b"b", + b"RootHash": b"ay", + b"RootHashPath": b"s", + b"RootHashSignature": b"ay", + b"RootHashSignaturePath": b"s", + b"RootImage": b"s", + b"RootImageOptions": b"a(ss)", + b"RootImagePolicy": b"s", + b"RootVerity": b"s", + b"RuntimeDirectory": b"as", + b"RuntimeDirectoryMode": b"u", + b"RuntimeDirectoryPreserve": b"s", + b"RuntimeDirectorySymlink": b"a(sst)", + b"RuntimeMaxUSec": b"t", + b"RuntimeRandomizedExtraUSec": b"t", + b"SELinuxContext": b"s", + b"SELinuxContextFromNet": b"b", + b"SecureBits": b"i", + b"SendBuffer": b"t", + b"SendSIGHUP": b"b", + b"SendSIGKILL": b"b", + b"SetCredential": b"a(say)", + b"SetCredentialEncrypted": b"a(say)", + b"SetLoginEnvironment": b"b", + b"Slice": b"s", + b"SloppyOptions": b"b", + b"SmackLabel": b"s", + b"SmackLabelIPOut": b"s", + b"SmackLabelIPin": b"s", + b"SmackProcessLabel": b"(bs)", + b"SocketBindAllow": b"a(iiqq)", + b"SocketBindDeny": b"a(iiqq)", + b"SocketGroup": b"s", + b"SocketMode": b"u", + b"SocketProtocol": b"i", + b"SocketUser": b"s", + b"SourcePath": b"s", + b"StandardError": b"s", + b"StandardErrorFile": b"s", + b"StandardErrorFileDescriptor": b"h", + b"StandardErrorFileDescriptorName": b"s", + b"StandardErrorFileToAppend": b"s", + b"StandardErrorFileToTruncate": b"s", + b"StandardInput": b"s", + b"StandardInputData": b"ay", + b"StandardInputFile": b"s", + b"StandardInputFileDescriptor": b"h", + b"StandardInputFileDescriptorName": b"s", + b"StandardOutput": b"s", + b"StandardOutputFile": b"s", + b"StandardOutputFileDescriptor": b"h", + b"StandardOutputFileDescriptorName": b"s", + b"StandardOutputFileToAppend": b"s", + b"StandardOutputFileToTruncate": b"s", + b"StartLimitAction": b"s", + b"StartLimitBurst": b"u", + b"StartLimitIntervalUSec": b"t", + b"StartupAllowedCPUs": b"ay", + b"StartupAllowedMemoryNodes": b"ay", + b"StartupBlockIOWeight": b"t", # 255, 257; ignored on 259 + b"StartupCPUShares": b"t", # 255, 257; ignored on 259 + b"StartupCPUWeight": b"t", + b"StartupIOWeight": b"t", + b"StartupMemoryHigh": b"t", + b"StartupMemoryLow": b"t", + b"StartupMemoryMax": b"t", + b"StartupMemorySwapMax": b"t", + b"StartupMemoryZSwapMax": b"t", + b"StateDirectory": b"as", + b"StateDirectoryAccounting": b"b", # 259 + b"StateDirectoryMode": b"u", + b"StateDirectoryQuota": b"(tus)", # 259 + b"StateDirectorySymlink": b"a(sst)", + b"StopPropagatedFrom": b"as", + b"StopWhenUnneeded": b"b", + b"SuccessAction": b"s", + b"SuccessActionExitStatus": b"i", + b"SuccessExitStatus": b"(aiai)", + b"SupplementaryGroups": b"as", + b"SurviveFinalKillSignal": b"b", + b"Symlinks": b"as", + b"SyslogFacility": b"i", + b"SyslogIdentifier": b"s", + b"SyslogLevel": b"i", + b"SyslogLevelPrefix": b"b", + b"SystemCallArchitectures": b"as", + b"SystemCallErrorNumber": b"i", + b"SystemCallFilter": b"(bas)", + b"SystemCallLog": b"(bas)", + b"TCPCongestion": b"s", + b"TTYColumns": b"u", + b"TTYPath": b"s", + b"TTYReset": b"b", + b"TTYRows": b"u", + b"TTYVHangup": b"b", + b"TTYVTDisallocate": b"b", + b"TasksAccounting": b"b", + b"TasksMax": b"t", + b"TasksMaxScale": b"u", + b"TemporaryFileSystem": b"a(ss)", + b"TimeoutAbortUSec": b"t", + b"TimeoutIdleUSec": b"t", + b"TimeoutStartFailureMode": b"s", + b"TimeoutStartUSec": b"t", + b"TimeoutStopFailureMode": b"s", + b"TimeoutStopUSec": b"t", + b"TimeoutUSec": b"t", + b"TimerSlackNSec": b"t", + b"TimersCalendar": b"a(ss)", + b"TimersMonotonic": b"a(st)", + b"Timestamping": b"s", + b"Transparent": b"b", + b"TriggerLimitBurst": b"u", + b"TriggerLimitIntervalUSec": b"t", + b"Type": b"s", + b"UMask": b"u", + b"USBFunctionDescriptors": b"s", + b"USBFunctionStrings": b"s", + b"UnsetEnvironment": b"as", + b"Upholds": b"as", + b"User": b"s", + b"UserNamespacePath": b"s", # 259 + b"UtmpIdentifier": b"s", + b"UtmpMode": b"s", + b"WakeSystem": b"b", + b"Wants": b"as", + b"WantsMountsFor": b"as", # 257, 259 + b"WatchdogSignal": b"i", + b"WatchdogUSec": b"t", + b"What": b"s", + b"Where": b"s", + b"WorkingDirectory": b"s", + b"Writable": b"b", +} diff --git a/pystemd/systemd1/unit_signatures.py b/pystemd/systemd1/unit_signatures.py index 76b5416..20472c2 100644 --- a/pystemd/systemd1/unit_signatures.py +++ b/pystemd/systemd1/unit_signatures.py @@ -8,278 +8,27 @@ from pystemd.dbuslib import apply_signature +from pystemd.systemd1.transient_properties import TRANSIENT_PROPERTY_SIGNATURES from pystemd.utils import x2char_star -# This is where we add the units and signatures, we steal most of this from -# https://github.com/systemd/systemd/tree/master/src/core/ any of the dbus-*.c -# has that data. - -# This dict should have a key, value, where value should be either a byte ( -# the signatute) or a callable that returns a tuple of key, signature, value. -# please note that this is not recursive. - -KNOWN_UNIT_SIGNATURES = { - b"Service": b"s", - b"Requires": b"as", - b"Requisite": b"as", - b"Wants": b"as", - b"BindsTo": b"as", - b"PartOf": b"as", - b"RequiredBy": b"as", - b"RequisiteOf": b"as", - b"WantedBy": b"as", - b"BoundBy": b"as", - b"ConsistsOf": b"as", - b"Conflicts": b"as", - b"ConflictedBy": b"as", - b"Before": b"as", - b"After": b"as", - b"OnFailure": b"as", - b"Triggers": b"as", - b"TriggeredBy": b"as", - b"PropagatesReloadTo": b"as", - b"ReloadPropagatedFrom": b"as", - b"JoinsNamespaceOf": b"as", - b"RequiresMountsFor": b"as", - b"Documentation": b"as", - b"SourcePath": b"s", - b"StopWhenUnneeded": b"b", - b"RefuseManualStart": b"b", - b"RefuseManualStop": b"b", - b"AllowIsolate": b"b", - b"DefaultDependencies": b"b", - b"OnFailureJobMode": b"s", - b"IgnoreOnIsolate": b"b", - b"JobTimeoutAction": b"s", - b"JobTimeoutRebootArgument": b"s", - b"Conditions": b"a(sbbsi)", - b"Asserts": b"a(sbbsi)", - b"FailureAction": b"s", - b"SuccessAction": b"s", - b"RebootArgument": b"s", - b"CollectMode": b"s", - b"User": b"s", - b"Type": b"s", - b"Group": b"s", - b"Nice": b"i", - b"DynamicUser": b"b", - b"Personality": b"s", - b"Description": b"s", - b"NotifyAccess": b"s", - b"BusName": b"s", - b"RemainAfterExit": b"b", - b"NoNewPrivileges": b"b", - b"RootDirectoryStartOnly": b"b", - b"PermissionsStartOnly": b"b", - # exec_command - b"ExecStartPre": b"a(sasb)", - b"ExecStart": b"a(sasb)", - b"ExecStartPost": b"a(sasb)", - b"ExecReload": b"a(sasb)", - b"ExecStop": b"a(sasb)", - b"ExecStopPost": b"a(sasb)", - # execute properties - b"AmbientCapabilities": b"t", - b"UtmpIdentifier": b"s", - b"UtmpMode": b"s", - b"PAMName": b"s", - b"SELinuxContext": b"s", - b"KeyringMode": b"s", - b"SyslogLevelPrefix": b"b", - b"MemoryDenyWriteExecute": b"b", - b"RestrictRealtime": b"b", - b"RemoveIPC": b"b", - b"MountAPIVFS": b"b", - b"CPUSchedulingResetOnFork": b"b", - b"LockPersonality": b"b", - b"SupplementaryGroups": b"as", - b"SystemCallArchitectures": b"as", - b"SystemCallFilter": b"(bas)", - # timeouts - b"RuntimeMaxUSec": b"t", +# Conveniences pystemd adds on top of systemd's own properties. Each callable +# takes (name, value) and returns the (name, signature, value) to send, so +# e.g. RuntimeMaxSec=1.5 is sent as RuntimeMaxUSec=1500000. +CONVENIENCE_PROPERTIES = { b"RuntimeMaxSec": lambda _, value: (b"RuntimeMaxUSec", b"t", int(value * 10**6)), - b"WatchdogUSec": b"t", b"WatchdogSec": lambda _, value: (b"WatchdogUSec", b"t", int(value * 10**6)), - b"TimeoutStopUSec": b"t", b"TimeoutStopSec": lambda _, value: ( b"TimeoutStopUSec", b"t", int(value * 10**6), ), - b"TimeoutStartUSec": b"t", b"TimeoutStartSec": lambda _, value: ( b"TimeoutStartUSec", b"t", int(value * 10**6), ), - # syslog - b"SyslogIdentifier": b"s", - # stdio signatures - b"StandardInput": b"s", - b"StandardOutput": b"s", - b"StandardError": b"s", - b"TTYPath": b"s", - b"TTYReset": b"b", - b"TTYVHangup": b"b", - b"TTYVTDisallocate": b"b", - b"IgnoreSIGPIPE": b"b", - b"StandardInputFileDescriptor": b"h", - b"StandardOutputFile": b"s", - b"StandardOutputFileToAppend": b"s", - b"StandardOutputFileDescriptor": b"h", - b"StandardErrorFile": b"s", - b"StandardErrorFileToAppend": b"s", - b"StandardErrorFileDescriptor": b"h", - b"StandardInputData": b"ay", - b"Environment": b"as", - b"PassEnvironment": b"as", - b"UnsetEnvironment": b"as", - b"EnvironmentFiles": b"a(sb)", - # timer signatures - b"OnActiveSec": b"t", - b"RemainAfterElapse": b"b", - b"OnUnitActiveSec": b"t", - b"OnCalendar": b"s", - b"OnStartupSec": b"t", - b"OnBootSec": b"t", - b"OnUnitInactiveSec": b"t", - # paths config - b"WorkingDirectory": b"s", - b"RootDirectory": b"s", - b"RootImage": b"s", - # binds and paths - b"BindPaths": b"a(ssbt)", - b"BindReadOnlyPaths": b"a(ssbt)", - b"ReadWritePaths": b"as", - b"ReadOnlyPaths": b"as", - b"ReadWriteDirectories": b"as", - b"ReadOnlyDirectories": b"as", - b"InaccessibleDirectories": b"as", - b"InaccessiblePaths": b"as", - b"TemporaryFileSystem": b"a(ss)", - b"MountFlags": b"t", - b"StateDirectory": b"as", - b"CacheDirectory": b"as", - b"LogsDirectory": b"as", - b"RuntimeDirectory": b"as", - b"RuntimeDirectoryPreserve": b"s", - b"ConfigurationDirectory": b"as", - b"PrivateDevices": b"b", - b"PrivateIPC": b"b", - b"PrivateMounts": b"b", - b"PrivateNetwork": b"b", - b"PrivateTmp": b"b", - b"PrivateUsers": b"b", - b"ProtectKernelTunables": b"b", - b"ProtectKernelModules": b"b", - b"ProtectControlGroups": b"b", - b"ProtectHome": b"s", - b"ProtectSystem": b"s", - # systemd.kill - b"KillMode": b"s", - b"KillSignal": b"i", - b"SendSIGHUP": b"b", - b"SendSIGKILL": b"b", - b"RestartPreventExitStatus": b"(aiai)", - b"RestartForceExitStatus": b"(aiai)", - b"SuccessExitStatus": b"(aiai)", - b"Restart": b"s", - b"RestartUSec": b"t", b"RestartSec": lambda _, value: (b"RestartUSec", b"t", int(value * 10**6)), - # Limits - b"LimitCPU": b"t", - b"LimitCPUSoft": b"t", - b"LimitFSIZE": b"t", - b"LimitFSIZESoft": b"t", - b"LimitDATA": b"t", - b"LimitDATASoft": b"t", - b"LimitSTACK": b"t", - b"LimitSTACKSoft": b"t", - b"LimitCORE": b"t", - b"LimitCORESoft": b"t", - b"LimitRSS": b"t", - b"LimitRSSSoft": b"t", - b"LimitNOFILE": b"t", - b"LimitNOFILESoft": b"t", - b"LimitAS": b"t", - b"LimitASSoft": b"t", - b"LimitNPROC": b"t", - b"LimitNPROCSoft": b"t", - b"LimitMEMLOCK": b"t", - b"LimitMEMLOCKSoft": b"t", - b"LimitLOCKS": b"t", - b"LimitLOCKSSoft": b"t", - b"LimitSIGPENDING": b"t", - b"LimitSIGPENDINGSoft": b"t", - b"LimitMSGQUEUE": b"t", - b"LimitMSGQUEUESoft": b"t", - b"LimitNICE": b"t", - b"LimitNICESoft": b"t", - b"LimitRTPRIO": b"t", - b"LimitRTPRIOSoft": b"t", - b"LimitRTTIME": b"t", - b"LimitRTTIMESoft": b"t", - # cgroup - b"DevicePolicy": b"s", - b"Slice": b"s", - b"Delegate": b"b", - b"CPUAccounting": b"b", - b"MemoryAccounting": b"b", - b"MemoryLow": b"t", - b"MemoryLowScale": b"u", - b"MemoryHigh": b"t", - b"MemoryHighScale": b"u", - b"MemoryMax": b"t", - b"MemoryMaxScale": b"u", - b"MemorySwapMax": b"t", - b"MemorySwapMaxScale": b"u", - b"MemoryLimit": b"t", - b"MemoryLimitScale": b"u", - b"IOAccounting": b"b", - b"BlockIOAccounting": b"b", - b"TasksAccounting": b"b", - b"TasksMax": b"t", - b"TasksMaxScale": b"u", b"CPUQuota": lambda _, value: (b"CPUQuotaPerSecUSec", b"t", int(value * 10**6)), - b"CPUQuotaPerSecUSec": b"t", - b"IPAccounting": b"b", - b"IPAddressAllow": b"a(iayu)", - b"IPAddressDeny": b"a(iayu)", - # Timer properties - b"TimersMonotonic": b"a(st)", - b"TimersCalendar": b"a(ss)", - b"WakeSystem": b"b", - b"Persistent": b"b", - # Socket Signatures - b"BindIPv6Only": b"s", - b"Backlog": b"u", - b"TimeoutUSec": b"t", - b"BindToDevice": b"s", - b"SocketUser": b"s", - b"SocketGroup": b"s", - b"SocketMode": b"u", - b"DirectoryMode": b"u", - b"Accept": b"b", - b"Writable": b"b", - b"KeepAlive": b"b", - b"KeepAliveTimeUSec": b"t", - b"KeepAliveIntervalUSec": b"t", - b"KeepAliveProbes": b"u", - b"DeferAcceptUSec": b"t", - b"NoDelay": b"b", - b"Priority": b"i", - b"ReceiveBuffer": b"t", - b"SendBuffer": b"t", - b"IPTOS": b"i", - b"IPTTL": b"i", - b"PipeSize": b"t", - b"FreeBind": b"b", - b"Transparent": b"b", - b"Broadcast": b"b", - b"PassCredentials": b"b", - b"PassSecurity": b"b", - b"RemoveOnStop": b"b", - b"Listen": b"a(ss)", b"ListenStream": lambda _, value: (b"Listen", b"a(ss)", [(b"Stream", value)]), b"ListenDatagram": lambda _, value: (b"Listen", b"a(ss)", [(b"Datagram", value)]), b"ListenSequentialPacket": lambda _, value: ( @@ -300,81 +49,13 @@ b"a(ss)", [(b"USBFunction", value)], ), - b"Symlinks": b"as", - b"Mark": b"i", - b"MaxConnections": b"u", - b"MaxConnectionsPerSource": b"u", - b"MessageQueueMaxMessages": b"x", - b"MessageQueueMessageSize": b"x", - b"TCPCongestion": b"s", - b"ReusePort": b"b", - b"SmackLabel": b"s", - b"SmackLabelIPIn": b"s", - b"SmackLabelIPOut": b"s", - b"ControlPID": b"u", - b"Result": b"s", - b"NConnections": b"u", - b"NAccepted": b"u", - b"NRefused": b"u", - b"FileDescriptorName": b"s", - b"SocketProtocol": b"i", - b"TriggerLimitIntervalUSec": b"t", - b"TriggerLimitBurst": b"u", - b"UID": b"u", - b"GID": b"u", - b"Id": b"s", - b"Names": b"as", - b"Following": b"s", - b"Upholds": b"as", - b"UpheldBy": b"as", - b"OnSuccess": b"as", - b"OnSuccessOf": b"as", - b"OnFailureOf": b"as", - b"PropagatesStopTo": b"as", - b"StopPropagatedFrom": b"as", - b"SliceOf": b"as", - b"AccessSELinuxContext": b"s", - b"LoadState": b"s", - b"ActiveState": b"s", - b"FreezerState": b"s", - b"SubState": b"s", - b"FragmentPath": b"s", - b"DropInPaths": b"as", - b"UnitFileState": b"s", - b"UnitFilePreset": b"s", - b"CanStart": b"b", - b"CanStop": b"b", - b"CanReload": b"b", - b"CanIsolate": b"b", - b"CanClean": b"as", - b"CanFreeze": b"b", - b"OnSuccesJobMode": b"s", - b"OnSuccessJobMode": b"s", - b"NeedDaemonReload": b"b", - b"Markers": b"as", - b"JobTimeoutUSec": b"t", - b"JobRunningTimeoutUSec": b"t", - b"ConditionResult": b"b", - b"AssertResult": b"b", - b"Transient": b"b", - b"Perpetual": b"b", - b"StartLimitIntervalUSec": b"t", - b"StartLimitBurst": b"u", - b"StartLimitAction": b"s", - b"FailureActionExitStatus": b"i", - b"SuccessActionExitStatus": b"i", - b"InvocationID": b"ay", - b"Refs": b"as", - b"RequiresOverridable": b"as", - b"RequisiteOverridable": b"as", - b"RequiredByOverridable": b"as", - b"RequisiteOfOverridable": b"as", - b"StartLimitInterval": b"t", - b"StartLimitIntervalSec": b"t", - # Extra + # Escape hatch: the value is the (name, signature, value) tuple to send. b"_custom": lambda _, value: value, } +# Property name -> either a signature, or a callable as described above. +KNOWN_UNIT_SIGNATURES = {**TRANSIENT_PROPERTY_SIGNATURES, **CONVENIENCE_PROPERTIES} + def signature_array(properties): args = [(ord(b"a"), b"(sv)")] diff --git a/tests/test_unit_signatures.py b/tests/test_unit_signatures.py index 8758c4e..a832737 100644 --- a/tests/test_unit_signatures.py +++ b/tests/test_unit_signatures.py @@ -7,9 +7,14 @@ # the root directory of this source tree. # +import subprocess +import sys +from pathlib import Path from unittest import TestCase import pystemd.systemd1.unit_signatures +from pystemd.systemd1.transient_properties import TRANSIENT_PROPERTY_SIGNATURES +from pystemd.systemd1.unit_signatures import CONVENIENCE_PROPERTIES class TestArraySignature(TestCase): @@ -27,3 +32,37 @@ def test_sample(self): (-1, None), ], ) + + def test_set_signature_differs_from_read_type(self): + # ExecStart is read as a(sasbttttuii) but set as a(sasb). + args = pystemd.systemd1.unit_signatures.signature_array( + {b"ExecStart": [(b"/bin/true", [b"/bin/true"], False)]} + ) + self.assertIn((ord(b"v"), b"a(sasb)"), args) + + def test_unknown_property(self): + with self.assertRaises(KeyError): + pystemd.systemd1.unit_signatures.signature_array({b"NoSuchProperty": 1}) + + +class TestConvenienceProperties(TestCase): + def test_targets_are_transient_properties(self): + """Every convenience must send a property systemd accepts, with the + signature systemd accepts it with.""" + for name, convert in CONVENIENCE_PROPERTIES.items(): + if name == b"_custom": + continue + with self.subTest(name=name): + target, signature, _ = convert(name, 1) + self.assertEqual(TRANSIENT_PROPERTY_SIGNATURES[target], signature) + + def test_do_not_shadow_transient_properties(self): + self.assertFalse( + set(CONVENIENCE_PROPERTIES) & set(TRANSIENT_PROPERTY_SIGNATURES) + ) + + +class TestGeneratedModule(TestCase): + def test_up_to_date(self): + tool = Path(__file__).parent.parent / "tools/generate_transient_properties.py" + subprocess.run([sys.executable, str(tool), "--check"], check=True) diff --git a/tools/generate_transient_properties.py b/tools/generate_transient_properties.py new file mode 100755 index 0000000..741d9bb --- /dev/null +++ b/tools/generate_transient_properties.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python3 +# +# This source code is licensed under the license found in the LICENSE file in +# the root directory of this source tree. +# + +"""Generate pystemd/systemd1/transient_properties.py from the probe results +in tools/transient-properties/ (see probe_transient_properties.py). + + python3 tools/generate_transient_properties.py # write the module + python3 tools/generate_transient_properties.py --check # fail if stale +""" + +from __future__ import annotations + +import glob +import json +import os +import re +import sys + +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +DATA = os.path.join(ROOT, "tools", "transient-properties") +MODULE = os.path.join(ROOT, "pystemd", "systemd1", "transient_properties.py") + +HEADER = '''\ +# +# This source code is licensed under the license found in the LICENSE file in +# the root directory of this source tree. +# +# Generated by tools/generate_transient_properties.py from probing +# {versions}. Do not edit by hand. +# + +"""D-Bus signatures systemd accepts when setting properties of transient +units (StartTransientUnit, SetUnitProperties). + +These are measured, not copied from the introspection XML: the type a property +is set with often differs from the type it is read as (ExecStart is read as +a(sasbttttuii) but set as a(sasb)), and some properties are write-only. + +A comment lists the probed systemd versions a property is settable on when +that is not all of them. +""" + +TRANSIENT_PROPERTY_SIGNATURES: dict[bytes, bytes] = {{ +''' + + +def load(): + results = [] + for path in glob.glob(os.path.join(DATA, "systemd-*.json")): + with open(path) as f: + result = json.load(f) + version = int(re.search(r"systemd (\d+)", result["systemd"]).group(1)) + results.append((version, result)) + return sorted(results, key=lambda r: r[0]) + + +def generate(): + results = load() + versions = [v for v, _ in results] + signatures = {} + settable_on = {} + for version, result in results: + for name, sig in result["properties"].items(): + if signatures.setdefault(name, sig) != sig: + raise SystemExit( + f"{name}: signature {signatures[name]} vs {sig} on {version}" + ) + settable_on.setdefault(name, []).append(version) + + out = [ + HEADER.format( + versions=", ".join(f"systemd {v}" for v in versions[:-1]) + + f" and systemd {versions[-1]}" + ) + ] + for name in sorted(signatures): + line = f' b"{name}": b"{signatures[name]}",' + if settable_on[name] != versions: + notes = [", ".join(map(str, settable_on[name]))] + ignored = [v for v, r in results if name in r.get("ignored", [])] + if ignored: + notes.append("ignored on " + ", ".join(map(str, ignored))) + line += " # " + "; ".join(notes) + out.append(line + "\n") + out.append("}\n") + return "".join(out) + + +def main(): + code = generate() + if sys.argv[1:] == ["--check"]: + with open(MODULE) as f: + if f.read() != code: + sys.exit(f"{MODULE} is stale, run {sys.argv[0]}") + return + with open(MODULE, "w") as f: + f.write(code) + + +if __name__ == "__main__": + main() diff --git a/tools/probe_transient_properties.py b/tools/probe_transient_properties.py new file mode 100755 index 0000000..f71f985 --- /dev/null +++ b/tools/probe_transient_properties.py @@ -0,0 +1,352 @@ +#!/usr/bin/env python3 +# +# This source code is licensed under the license found in the LICENSE file in +# the root directory of this source tree. +# + +"""Ask a running systemd which properties StartTransientUnit accepts, and with +which D-Bus signature. + +The signature systemd accepts when *setting* a property is often not the type +the introspection XML reports for *reading* it (ExecStart is read as +a(sasbttttuii) but set as a(sasb)), and some properties are write-only +(OnCalendar, MemoryMaxScale). systemd does not publish the set signatures +anywhere, so this tool measures them. + +Every candidate is sent as a single-property StartTransientUnit call with an +empty/zero value. systemd checks the property name before it reads the value, +and reads the value before validating it, so: + + "Cannot set property X, or unknown property." -> name unknown for type + same answer as for a sentinel type nothing reads -> signature rejected + any other answer -> signature accepted + +A known name that accepts no signature is "ignored" when the sentinel gets +the same answer as setting no property at all (systemd skips the value, as +it does for removed cgroup v1 settings), and "refused" otherwise. + +Candidate names and signatures come from the machine itself: the +introspection XML, the unit file directives systemd knows, and the string +literals in libsystemd-core. + +This creates (and immediately stops) transient units, so run it as root in a +throwaway container or VM, never on a machine you care about: + + python3 tools/probe_transient_properties.py OUTPUT.json +""" + +from __future__ import annotations + +import contextlib +import glob +import json +import os +import re +import subprocess +import sys +import xml.etree.ElementTree as ET + +from pystemd.dbuslib import DBus + +# swap units cannot be created transiently. +UNIT_TYPES = [ + "service", + "socket", + "timer", + "path", + "mount", + "automount", + "slice", + "scope", +] +UNKNOWN = "or unknown property" +SENTINEL = "(yyyyyyyyyyyyyyyy)" # a type no setter reads +BASIC = "ybnqiuxtdsogh" +INTERFACES = "/usr/share/dbus-1/interfaces" + + +def split_complete(sig): + """Split a signature into its complete types; ValueError if malformed.""" + out, i = [], 0 + while i < len(sig): + j = _complete_type_end(sig, i) + out.append(sig[i:j]) + i = j + return out + + +def _complete_type_end(sig, i): + c = sig[i] + if c in BASIC or c == "v": + return i + 1 + if c == "a": + if i + 1 >= len(sig): + raise ValueError(sig) + if sig[i + 1] == "{": + k = _complete_type_end(sig, i + 2) + if sig[k - 1] not in BASIC: + raise ValueError(sig) + v = _complete_type_end(sig, k) + if v >= len(sig) or sig[v] != "}": + raise ValueError(sig) + return v + 1 + return _complete_type_end(sig, i + 1) + if c == "(": + j = i + 1 + if j < len(sig) and sig[j] == ")": + raise ValueError(sig) + while j < len(sig) and sig[j] != ")": + j = _complete_type_end(sig, j) + if j >= len(sig): + raise ValueError(sig) + return j + 1 + raise ValueError(sig) + + +def is_single_type(sig): + try: + return len(split_complete(sig)) == 1 + except (ValueError, IndexError): + return False + + +def struct_prefixes(sig): + """a(sasbttttuii) -> a(sasb), a(sasbt), ..., a(s), a(as), ... + + Setters often take a leading part of the struct the getter returns.""" + out = set() + if sig.startswith("a("): + body, wrap = sig[2:-1], "a{}" + elif sig.startswith("("): + body, wrap = sig[1:-1], "{}" + else: + return out + try: + parts = split_complete(body) + except (ValueError, IndexError): + return out + for n in range(1, len(parts)): + out.add(wrap.format("(" + "".join(parts[:n]) + ")")) + for p in parts: + out.add(wrap.format(p)) + return out + + +def zero_value(sig, fd): + """pystemd dbuslib argument stream for an empty/zero value of sig.""" + c = sig[0] + if c in "ybnqiuxt": + return [(ord(c), 0)] + if c == "d": + return [(ord(c), 0.0)] + if c in "sg": + return [(ord(c), b"")] + if c == "o": + return [(ord(c), b"/")] + if c == "h": + return [(ord(c), fd)] + if c == "v": + return [(ord("v"), b"s"), (ord("s"), b""), (-1, None)] + if c == "a": + return [(ord("a"), sig[1:].encode()), (-1, None)] + if c == "(": + out = [(ord("r"), sig[1:-1].encode())] + for p in split_complete(sig[1:-1]): + out += zero_value(p, fd) + return out + [(-1, None)] + raise ValueError(sig) + + +def xml_read_types(): + types = {} + for f in glob.glob(f"{INTERFACES}/org.freedesktop.systemd1.*.xml"): + for p in ET.parse(f).getroot().iter("property"): + types.setdefault(p.get("name"), set()).add(p.get("type")) + return types + + +def xml_all_types(): + out = set() + for f in glob.glob(f"{INTERFACES}/*.xml"): + for el in ET.parse(f).getroot().iter(): + if el.tag in ("property", "arg") and el.get("type"): + out.add(el.get("type")) + return out + + +def core_literals(): + lib = min( + glob.glob("/usr/lib/*/systemd/libsystemd-core-*.so") + + glob.glob("/usr/lib/systemd/libsystemd-core-*.so") + ) + with open(lib, "rb") as f: + found = {s.decode() for s in re.findall(rb"[\x20-\x7e]{1,80}", f.read())} + # The linker merges a literal into a longer one it is a suffix of + # ("MemoryLowScale" lives inside "DefaultMemoryLowScale", "(st)" inside + # "a(st)"), so suffixes of every literal are candidates as well. + return {s[i:] for s in found for i in range(len(s))} + + +def unit_file_directives(): + out = subprocess.run( + ["/usr/lib/systemd/systemd", "--dump-configuration-items"], + capture_output=True, + text=True, + check=True, + ).stdout + return { + line.split("=", 1)[0] + for line in out.splitlines() + if "=" in line and not line.startswith(("[", "#")) + } + + +def canonical(accepted, read_types): + """Pick one signature for a property systemd accepts several for.""" + if len(accepted) == 1: + return next(iter(accepted)) + if accepted & read_types: + (sig,) = accepted & read_types + return sig + # sd-bus reads string arrays from any of as/ao/ag. + as_strings = {re.sub("[og]", "s", s) for s in accepted} + if len(as_strings) == 1 and as_strings <= accepted: + return next(iter(as_strings)) + raise RuntimeError(f"ambiguous signatures {sorted(accepted)}") + + +class Prober: + def __init__(self): + self.bus = DBus() + self.bus.open() + self.fd = os.open("/dev/null", os.O_RDONLY) + self.n = 0 + self.calls = 0 + + def _manager(self, method, args): + return self.bus.call_method( + b"org.freedesktop.systemd1", + b"/org/freedesktop/systemd1", + b"org.freedesktop.systemd1.Manager", + method, + args, + ) + + def answer(self, unit_type, name=None, sig=None): + """systemd's answer to setting name to a zero value of type sig, or + to setting no property at all.""" + self.n += 1 + self.calls += 1 + unit = f"probe{self.n}.{unit_type}".encode() + prop = [] + if name is not None: + prop = [ + (ord("r"), b"sv"), + (ord("s"), name.encode()), + (ord("v"), sig.encode()), + *zero_value(sig, self.fd), + (-1, None), + (-1, None), + ] + args = [ + (ord("s"), unit), + (ord("s"), b"fail"), + (ord("a"), b"(sv)"), + *prop, + (-1, None), + (ord("a"), b"(sa(sv))"), + (-1, None), + ] + try: + self._manager(b"StartTransientUnit", args) + except Exception as e: # noqa: BLE001 + msg = getattr(e, "err_message", None) or str(e) + msg = msg.decode() if isinstance(msg, bytes) else str(msg) + return re.sub(r"probe\d+", "UNIT", msg) + # The unit started; stopping it is best effort. + with contextlib.suppress(Exception): + self._manager(b"StopUnit", [(ord("s"), unit), (ord("s"), b"replace")]) + return "ok" + + +def probe(log=print): + read_types = xml_read_types() + literals = core_literals() + + names = ( + set(read_types) + | unit_file_directives() + | {s for s in literals if re.fullmatch(r"[A-Z][A-Za-z0-9]{2,63}", s)} + ) + + sigs = set(xml_all_types()) + for s in literals: + if len(s) <= 40 and is_single_type(s): + sigs.add(s) + if s.startswith("("): + sigs.add("a" + s) + for s in list(sigs): + sigs |= struct_prefixes(s) + sigs = {s for s in sigs if is_single_type(s)} - {SENTINEL} + + prober = Prober() + accepted = {} # name -> set of signatures + refused = {} # name -> reason, for names known but never accepted + ignored = set() # names whose value systemd skips without reading + unit_types = {} + + for unit_type in UNIT_TYPES: + settable = [] + baseline = prober.answer(unit_type) + for name in sorted(names): + sentinel = prober.answer(unit_type, name, SENTINEL) + if UNKNOWN in sentinel: + continue + ok = { + sig for sig in sigs if prober.answer(unit_type, name, sig) != sentinel + } + if ok: + settable.append(name) + if accepted.setdefault(name, ok) != ok: + raise RuntimeError(f"{name}: signatures differ by unit type") + elif sentinel == baseline: + ignored.add(name) + else: + refused.setdefault(name, sentinel) + unit_types[unit_type] = settable + subprocess.run(["systemctl", "reset-failed"], check=False) + log(f"{unit_type}: {len(settable)} settable, {prober.calls} calls") + + for name in accepted: + refused.pop(name, None) + ignored.discard(name) + for name in ignored: + refused.pop(name, None) + + version = subprocess.run( + ["systemctl", "--version"], capture_output=True, text=True, check=True + ).stdout.splitlines()[0] + + return { + "systemd": version, + "properties": { + name: canonical(ok, read_types.get(name, set())) + for name, ok in sorted(accepted.items()) + }, + "unit_types": unit_types, + "ignored": sorted(ignored), + "refused": dict(sorted(refused.items())), + } + + +def main(): + if len(sys.argv) != 2: + sys.exit(f"usage: {sys.argv[0]} OUTPUT.json") + result = probe(log=lambda m: print(m, file=sys.stderr, flush=True)) + with open(sys.argv[1], "w") as f: + json.dump(result, f, indent=1) + f.write("\n") + + +if __name__ == "__main__": + main() diff --git a/tools/transient-properties/systemd-255.json b/tools/transient-properties/systemd-255.json new file mode 100644 index 0000000..cd32a85 --- /dev/null +++ b/tools/transient-properties/systemd-255.json @@ -0,0 +1,1946 @@ +{ + "systemd": "systemd 255 (255.4-1ubuntu8)", + "properties": { + "Accept": "b", + "AccuracySec": "t", + "AccuracyUSec": "t", + "AddRef": "b", + "After": "as", + "AllowIsolate": "b", + "AllowedCPUs": "ay", + "AllowedMemoryNodes": "ay", + "AmbientCapabilities": "t", + "AppArmorProfile": "(bs)", + "Asserts": "a(sbbs)", + "BPFProgram": "a(ss)", + "Backlog": "u", + "Before": "as", + "BindIPv6Only": "s", + "BindPaths": "a(ssbt)", + "BindReadOnlyPaths": "a(ssbt)", + "BindToDevice": "s", + "BindsTo": "as", + "BlockIOAccounting": "b", + "BlockIODeviceWeight": "a(st)", + "BlockIOReadBandwidth": "a(st)", + "BlockIOWeight": "t", + "BlockIOWriteBandwidth": "a(st)", + "Broadcast": "b", + "BusName": "s", + "CPUAccounting": "b", + "CPUAffinity": "ay", + "CPUAffinityFromNUMA": "b", + "CPUQuotaPerSecUSec": "t", + "CPUQuotaPeriodUSec": "t", + "CPUSchedulingPolicy": "i", + "CPUSchedulingPriority": "i", + "CPUSchedulingResetOnFork": "b", + "CPUShares": "t", + "CPUWeight": "t", + "CacheDirectory": "as", + "CacheDirectoryMode": "u", + "CacheDirectorySymlink": "a(sst)", + "CapabilityBoundingSet": "t", + "CollectMode": "s", + "Conditions": "a(sbbs)", + "ConfigurationDirectory": "as", + "ConfigurationDirectoryMode": "u", + "Conflicts": "as", + "Controller": "s", + "CoredumpFilter": "t", + "CoredumpReceive": "b", + "DefaultDependencies": "b", + "DefaultMemoryLow": "t", + "DefaultMemoryLowScale": "u", + "DefaultMemoryMin": "t", + "DefaultMemoryMinScale": "u", + "DefaultStartupMemoryLow": "t", + "DeferAcceptUSec": "t", + "Delegate": "b", + "DelegateControllers": "as", + "DelegateSubgroup": "s", + "Description": "s", + "DeviceAllow": "a(ss)", + "DevicePolicy": "s", + "DirectoryMode": "u", + "DisableControllers": "as", + "Documentation": "as", + "DynamicUser": "b", + "Environment": "as", + "EnvironmentFiles": "a(sb)", + "ExecCondition": "a(sasb)", + "ExecConditionEx": "a(sasas)", + "ExecPaths": "as", + "ExecReload": "a(sasb)", + "ExecReloadEx": "a(sasas)", + "ExecSearchPath": "as", + "ExecStart": "a(sasb)", + "ExecStartChown": "a(sasb)", + "ExecStartEx": "a(sasas)", + "ExecStartPost": "a(sasb)", + "ExecStartPostEx": "a(sasas)", + "ExecStartPre": "a(sasb)", + "ExecStartPreEx": "a(sasas)", + "ExecStop": "a(sasb)", + "ExecStopEx": "a(sasas)", + "ExecStopPost": "a(sasb)", + "ExecStopPostEx": "a(sasas)", + "ExecStopPre": "a(sasb)", + "ExitType": "s", + "ExtensionDirectories": "as", + "ExtensionImagePolicy": "s", + "ExtensionImages": "a(sba(ss))", + "ExtraOptions": "s", + "FailureAction": "s", + "FailureActionExitStatus": "i", + "FileDescriptorName": "s", + "FileDescriptorStoreMax": "u", + "FileDescriptorStorePreserve": "s", + "FinalKillSignal": "i", + "FixedRandomDelay": "b", + "FlushPending": "b", + "ForceUnmount": "b", + "FreeBind": "b", + "Group": "s", + "GuessMainPID": "b", + "IOAccounting": "b", + "IODeviceLatencyTargetUSec": "a(st)", + "IODeviceWeight": "a(st)", + "IOReadBandwidthMax": "a(st)", + "IOReadIOPSMax": "a(st)", + "IOSchedulingClass": "i", + "IOSchedulingPriority": "i", + "IOWeight": "t", + "IOWriteBandwidthMax": "a(st)", + "IOWriteIOPSMax": "a(st)", + "IPAccounting": "b", + "IPAddressAllow": "a(iayu)", + "IPAddressDeny": "a(iayu)", + "IPCNamespacePath": "s", + "IPEgressFilterPath": "as", + "IPIngressFilterPath": "as", + "IPTOS": "i", + "IPTTL": "i", + "IgnoreOnIsolate": "b", + "IgnoreSIGPIPE": "b", + "ImportCredential": "as", + "InaccessibleDirectories": "as", + "InaccessiblePaths": "as", + "JobRunningTimeoutUSec": "t", + "JobTimeoutAction": "s", + "JobTimeoutRebootArgument": "s", + "JoinsNamespaceOf": "as", + "KeepAlive": "b", + "KeepAliveIntervalUSec": "t", + "KeepAliveProbes": "u", + "KeepAliveTimeUSec": "t", + "KeyringMode": "s", + "KillMode": "s", + "KillSignal": "i", + "LazyUnmount": "b", + "LimitAS": "t", + "LimitASSoft": "t", + "LimitCORE": "t", + "LimitCORESoft": "t", + "LimitCPU": "t", + "LimitCPUSoft": "t", + "LimitDATA": "t", + "LimitDATASoft": "t", + "LimitFSIZE": "t", + "LimitFSIZESoft": "t", + "LimitLOCKS": "t", + "LimitLOCKSSoft": "t", + "LimitMEMLOCK": "t", + "LimitMEMLOCKSoft": "t", + "LimitMSGQUEUE": "t", + "LimitMSGQUEUESoft": "t", + "LimitNICE": "t", + "LimitNICESoft": "t", + "LimitNOFILE": "t", + "LimitNOFILESoft": "t", + "LimitNPROC": "t", + "LimitNPROCSoft": "t", + "LimitRSS": "t", + "LimitRSSSoft": "t", + "LimitRTPRIO": "t", + "LimitRTPRIOSoft": "t", + "LimitRTTIME": "t", + "LimitRTTIMESoft": "t", + "LimitSIGPENDING": "t", + "LimitSIGPENDINGSoft": "t", + "LimitSTACK": "t", + "LimitSTACKSoft": "t", + "Listen": "a(ss)", + "LoadCredential": "a(ss)", + "LoadCredentialEncrypted": "a(ss)", + "LockPersonality": "b", + "LogExtraFields": "aay", + "LogFilterPatterns": "a(bs)", + "LogLevelMax": "i", + "LogNamespace": "s", + "LogRateLimitBurst": "u", + "LogRateLimitIntervalUSec": "t", + "LogsDirectory": "as", + "LogsDirectoryMode": "u", + "LogsDirectorySymlink": "a(sst)", + "MakeDirectory": "b", + "ManagedOOMMemoryPressure": "s", + "ManagedOOMMemoryPressureLimit": "u", + "ManagedOOMPreference": "s", + "ManagedOOMSwap": "s", + "Mark": "i", + "Markers": "as", + "MaxConnections": "u", + "MaxConnectionsPerSource": "u", + "MemoryAccounting": "b", + "MemoryDenyWriteExecute": "b", + "MemoryHigh": "t", + "MemoryHighScale": "u", + "MemoryKSM": "b", + "MemoryLimit": "t", + "MemoryLimitScale": "u", + "MemoryLow": "t", + "MemoryLowScale": "u", + "MemoryMax": "t", + "MemoryMaxScale": "u", + "MemoryMin": "t", + "MemoryMinScale": "u", + "MemoryPressureThresholdUSec": "t", + "MemoryPressureWatch": "s", + "MemorySwapMax": "t", + "MemorySwapMaxScale": "u", + "MemoryZSwapMax": "t", + "MemoryZSwapMaxScale": "u", + "MessageQueueMaxMessages": "x", + "MessageQueueMessageSize": "x", + "MountAPIVFS": "b", + "MountFlags": "t", + "MountImagePolicy": "s", + "MountImages": "a(ssba(ss))", + "NFTSet": "a(iiss)", + "NUMAMask": "ay", + "NUMAPolicy": "i", + "NetworkNamespacePath": "s", + "Nice": "i", + "NoDelay": "b", + "NoExecPaths": "as", + "NoNewPrivileges": "b", + "NonBlocking": "b", + "NotifyAccess": "s", + "OOMPolicy": "s", + "OOMScoreAdjust": "i", + "OnActiveSec": "t", + "OnBootSec": "t", + "OnCalendar": "s", + "OnClockChange": "b", + "OnFailure": "as", + "OnFailureJobMode": "s", + "OnStartupSec": "t", + "OnSuccess": "as", + "OnSuccessJobMode": "s", + "OnTimezoneChange": "b", + "OnUnitActiveSec": "t", + "OnUnitInactiveSec": "t", + "OpenFile": "a(sst)", + "Options": "s", + "PAMName": "s", + "PIDFDs": "ah", + "PIDFile": "s", + "PIDs": "au", + "PartOf": "as", + "PassCredentials": "b", + "PassEnvironment": "as", + "PassPacketInfo": "b", + "PassSecurity": "b", + "Paths": "a(ss)", + "PermissionsStartOnly": "b", + "Persistent": "b", + "Personality": "s", + "PipeSize": "t", + "PollLimitBurst": "u", + "PollLimitIntervalUSec": "t", + "Priority": "i", + "PrivateDevices": "b", + "PrivateIPC": "b", + "PrivateMounts": "b", + "PrivateNetwork": "b", + "PrivateTmp": "b", + "PrivateUsers": "b", + "ProcSubset": "s", + "PropagatesReloadTo": "as", + "PropagatesStopTo": "as", + "ProtectClock": "b", + "ProtectControlGroups": "b", + "ProtectHome": "s", + "ProtectHostname": "b", + "ProtectKernelLogs": "b", + "ProtectKernelModules": "b", + "ProtectKernelTunables": "b", + "ProtectProc": "s", + "ProtectSystem": "s", + "RandomizedDelayUSec": "t", + "ReadOnlyDirectories": "as", + "ReadOnlyPaths": "as", + "ReadWriteDirectories": "as", + "ReadWriteOnly": "b", + "ReadWritePaths": "as", + "RebootArgument": "s", + "ReceiveBuffer": "t", + "RefuseManualStart": "b", + "RefuseManualStop": "b", + "ReloadPropagatedFrom": "as", + "ReloadSignal": "i", + "RemainAfterElapse": "b", + "RemainAfterExit": "b", + "RemoveIPC": "b", + "RemoveOnStop": "b", + "Requires": "as", + "RequiresMountsFor": "as", + "RequiresOverridable": "as", + "Requisite": "as", + "RequisiteOverridable": "as", + "Restart": "s", + "RestartForceExitStatus": "(aiai)", + "RestartKillSignal": "i", + "RestartMaxDelayUSec": "t", + "RestartMode": "s", + "RestartPreventExitStatus": "(aiai)", + "RestartSteps": "u", + "RestartUSec": "t", + "RestrictAddressFamilies": "(bas)", + "RestrictFileSystems": "(bas)", + "RestrictNamespaces": "t", + "RestrictNetworkInterfaces": "(bas)", + "RestrictRealtime": "b", + "RestrictSUIDSGID": "b", + "ReusePort": "b", + "RootDirectory": "s", + "RootDirectoryStartOnly": "b", + "RootEphemeral": "b", + "RootHash": "ay", + "RootHashPath": "s", + "RootHashSignature": "ay", + "RootHashSignaturePath": "s", + "RootImage": "s", + "RootImageOptions": "a(ss)", + "RootImagePolicy": "s", + "RootVerity": "s", + "RuntimeDirectory": "as", + "RuntimeDirectoryMode": "u", + "RuntimeDirectoryPreserve": "s", + "RuntimeDirectorySymlink": "a(sst)", + "RuntimeMaxUSec": "t", + "RuntimeRandomizedExtraUSec": "t", + "SELinuxContext": "s", + "SELinuxContextFromNet": "b", + "SecureBits": "i", + "SendBuffer": "t", + "SendSIGHUP": "b", + "SendSIGKILL": "b", + "SetCredential": "a(say)", + "SetCredentialEncrypted": "a(say)", + "SetLoginEnvironment": "b", + "Slice": "s", + "SloppyOptions": "b", + "SmackLabel": "s", + "SmackLabelIPOut": "s", + "SmackLabelIPin": "s", + "SmackProcessLabel": "(bs)", + "SocketBindAllow": "a(iiqq)", + "SocketBindDeny": "a(iiqq)", + "SocketGroup": "s", + "SocketMode": "u", + "SocketProtocol": "i", + "SocketUser": "s", + "SourcePath": "s", + "StandardError": "s", + "StandardErrorFile": "s", + "StandardErrorFileDescriptor": "h", + "StandardErrorFileDescriptorName": "s", + "StandardErrorFileToAppend": "s", + "StandardErrorFileToTruncate": "s", + "StandardInput": "s", + "StandardInputData": "ay", + "StandardInputFile": "s", + "StandardInputFileDescriptor": "h", + "StandardInputFileDescriptorName": "s", + "StandardOutput": "s", + "StandardOutputFile": "s", + "StandardOutputFileDescriptor": "h", + "StandardOutputFileDescriptorName": "s", + "StandardOutputFileToAppend": "s", + "StandardOutputFileToTruncate": "s", + "StartLimitAction": "s", + "StartLimitBurst": "u", + "StartLimitIntervalUSec": "t", + "StartupAllowedCPUs": "ay", + "StartupAllowedMemoryNodes": "ay", + "StartupBlockIOWeight": "t", + "StartupCPUShares": "t", + "StartupCPUWeight": "t", + "StartupIOWeight": "t", + "StartupMemoryHigh": "t", + "StartupMemoryLow": "t", + "StartupMemoryMax": "t", + "StartupMemorySwapMax": "t", + "StartupMemoryZSwapMax": "t", + "StateDirectory": "as", + "StateDirectoryMode": "u", + "StateDirectorySymlink": "a(sst)", + "StopPropagatedFrom": "as", + "StopWhenUnneeded": "b", + "SuccessAction": "s", + "SuccessActionExitStatus": "i", + "SuccessExitStatus": "(aiai)", + "SupplementaryGroups": "as", + "SurviveFinalKillSignal": "b", + "Symlinks": "as", + "SyslogFacility": "i", + "SyslogIdentifier": "s", + "SyslogLevel": "i", + "SyslogLevelPrefix": "b", + "SystemCallArchitectures": "as", + "SystemCallErrorNumber": "i", + "SystemCallFilter": "(bas)", + "SystemCallLog": "(bas)", + "TCPCongestion": "s", + "TTYColumns": "u", + "TTYPath": "s", + "TTYReset": "b", + "TTYRows": "u", + "TTYVHangup": "b", + "TTYVTDisallocate": "b", + "TasksAccounting": "b", + "TasksMax": "t", + "TasksMaxScale": "u", + "TemporaryFileSystem": "a(ss)", + "TimeoutAbortUSec": "t", + "TimeoutIdleUSec": "t", + "TimeoutStartFailureMode": "s", + "TimeoutStartUSec": "t", + "TimeoutStopFailureMode": "s", + "TimeoutStopUSec": "t", + "TimeoutUSec": "t", + "TimerSlackNSec": "t", + "TimersCalendar": "a(ss)", + "TimersMonotonic": "a(st)", + "Timestamping": "s", + "Transparent": "b", + "TriggerLimitBurst": "u", + "TriggerLimitIntervalUSec": "t", + "Type": "s", + "UMask": "u", + "USBFunctionDescriptors": "s", + "USBFunctionStrings": "s", + "UnsetEnvironment": "as", + "Upholds": "as", + "User": "s", + "UtmpIdentifier": "s", + "UtmpMode": "s", + "WakeSystem": "b", + "Wants": "as", + "WatchdogSignal": "i", + "WatchdogUSec": "t", + "What": "s", + "Where": "s", + "WorkingDirectory": "s", + "Writable": "b" + }, + "unit_types": { + "service": [ + "AddRef", + "After", + "AllowIsolate", + "AllowedCPUs", + "AllowedMemoryNodes", + "AmbientCapabilities", + "AppArmorProfile", + "Asserts", + "BPFProgram", + "Before", + "BindPaths", + "BindReadOnlyPaths", + "BindsTo", + "BlockIOAccounting", + "BlockIODeviceWeight", + "BlockIOReadBandwidth", + "BlockIOWeight", + "BlockIOWriteBandwidth", + "BusName", + "CPUAccounting", + "CPUAffinity", + "CPUAffinityFromNUMA", + "CPUQuotaPerSecUSec", + "CPUQuotaPeriodUSec", + "CPUSchedulingPolicy", + "CPUSchedulingPriority", + "CPUSchedulingResetOnFork", + "CPUShares", + "CPUWeight", + "CacheDirectory", + "CacheDirectoryMode", + "CacheDirectorySymlink", + "CapabilityBoundingSet", + "CollectMode", + "Conditions", + "ConfigurationDirectory", + "ConfigurationDirectoryMode", + "Conflicts", + "CoredumpFilter", + "CoredumpReceive", + "DefaultDependencies", + "DefaultMemoryLow", + "DefaultMemoryLowScale", + "DefaultMemoryMin", + "DefaultMemoryMinScale", + "DefaultStartupMemoryLow", + "Delegate", + "DelegateControllers", + "DelegateSubgroup", + "Description", + "DeviceAllow", + "DevicePolicy", + "DisableControllers", + "Documentation", + "DynamicUser", + "Environment", + "EnvironmentFiles", + "ExecCondition", + "ExecConditionEx", + "ExecPaths", + "ExecReload", + "ExecReloadEx", + "ExecSearchPath", + "ExecStart", + "ExecStartEx", + "ExecStartPost", + "ExecStartPostEx", + "ExecStartPre", + "ExecStartPreEx", + "ExecStop", + "ExecStopEx", + "ExecStopPost", + "ExecStopPostEx", + "ExitType", + "ExtensionDirectories", + "ExtensionImagePolicy", + "ExtensionImages", + "FailureAction", + "FailureActionExitStatus", + "FileDescriptorStoreMax", + "FileDescriptorStorePreserve", + "FinalKillSignal", + "Group", + "GuessMainPID", + "IOAccounting", + "IODeviceLatencyTargetUSec", + "IODeviceWeight", + "IOReadBandwidthMax", + "IOReadIOPSMax", + "IOSchedulingClass", + "IOSchedulingPriority", + "IOWeight", + "IOWriteBandwidthMax", + "IOWriteIOPSMax", + "IPAccounting", + "IPAddressAllow", + "IPAddressDeny", + "IPCNamespacePath", + "IPEgressFilterPath", + "IPIngressFilterPath", + "IgnoreOnIsolate", + "IgnoreSIGPIPE", + "ImportCredential", + "InaccessibleDirectories", + "InaccessiblePaths", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "KeyringMode", + "KillMode", + "KillSignal", + "LimitAS", + "LimitASSoft", + "LimitCORE", + "LimitCORESoft", + "LimitCPU", + "LimitCPUSoft", + "LimitDATA", + "LimitDATASoft", + "LimitFSIZE", + "LimitFSIZESoft", + "LimitLOCKS", + "LimitLOCKSSoft", + "LimitMEMLOCK", + "LimitMEMLOCKSoft", + "LimitMSGQUEUE", + "LimitMSGQUEUESoft", + "LimitNICE", + "LimitNICESoft", + "LimitNOFILE", + "LimitNOFILESoft", + "LimitNPROC", + "LimitNPROCSoft", + "LimitRSS", + "LimitRSSSoft", + "LimitRTPRIO", + "LimitRTPRIOSoft", + "LimitRTTIME", + "LimitRTTIMESoft", + "LimitSIGPENDING", + "LimitSIGPENDINGSoft", + "LimitSTACK", + "LimitSTACKSoft", + "LoadCredential", + "LoadCredentialEncrypted", + "LockPersonality", + "LogExtraFields", + "LogFilterPatterns", + "LogLevelMax", + "LogNamespace", + "LogRateLimitBurst", + "LogRateLimitIntervalUSec", + "LogsDirectory", + "LogsDirectoryMode", + "LogsDirectorySymlink", + "ManagedOOMMemoryPressure", + "ManagedOOMMemoryPressureLimit", + "ManagedOOMPreference", + "ManagedOOMSwap", + "Markers", + "MemoryAccounting", + "MemoryDenyWriteExecute", + "MemoryHigh", + "MemoryHighScale", + "MemoryKSM", + "MemoryLimit", + "MemoryLimitScale", + "MemoryLow", + "MemoryLowScale", + "MemoryMax", + "MemoryMaxScale", + "MemoryMin", + "MemoryMinScale", + "MemoryPressureThresholdUSec", + "MemoryPressureWatch", + "MemorySwapMax", + "MemorySwapMaxScale", + "MemoryZSwapMax", + "MemoryZSwapMaxScale", + "MountAPIVFS", + "MountFlags", + "MountImagePolicy", + "MountImages", + "NFTSet", + "NUMAMask", + "NUMAPolicy", + "NetworkNamespacePath", + "Nice", + "NoExecPaths", + "NoNewPrivileges", + "NonBlocking", + "NotifyAccess", + "OOMPolicy", + "OOMScoreAdjust", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "OpenFile", + "PAMName", + "PIDFile", + "PartOf", + "PassEnvironment", + "PermissionsStartOnly", + "Personality", + "PrivateDevices", + "PrivateIPC", + "PrivateMounts", + "PrivateNetwork", + "PrivateTmp", + "PrivateUsers", + "ProcSubset", + "PropagatesReloadTo", + "PropagatesStopTo", + "ProtectClock", + "ProtectControlGroups", + "ProtectHome", + "ProtectHostname", + "ProtectKernelLogs", + "ProtectKernelModules", + "ProtectKernelTunables", + "ProtectProc", + "ProtectSystem", + "ReadOnlyDirectories", + "ReadOnlyPaths", + "ReadWriteDirectories", + "ReadWritePaths", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "ReloadSignal", + "RemainAfterExit", + "RemoveIPC", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "Restart", + "RestartForceExitStatus", + "RestartKillSignal", + "RestartMaxDelayUSec", + "RestartMode", + "RestartPreventExitStatus", + "RestartSteps", + "RestartUSec", + "RestrictAddressFamilies", + "RestrictFileSystems", + "RestrictNamespaces", + "RestrictNetworkInterfaces", + "RestrictRealtime", + "RestrictSUIDSGID", + "RootDirectory", + "RootDirectoryStartOnly", + "RootEphemeral", + "RootHash", + "RootHashPath", + "RootHashSignature", + "RootHashSignaturePath", + "RootImage", + "RootImageOptions", + "RootImagePolicy", + "RootVerity", + "RuntimeDirectory", + "RuntimeDirectoryMode", + "RuntimeDirectoryPreserve", + "RuntimeDirectorySymlink", + "RuntimeMaxUSec", + "RuntimeRandomizedExtraUSec", + "SELinuxContext", + "SecureBits", + "SendSIGHUP", + "SendSIGKILL", + "SetCredential", + "SetCredentialEncrypted", + "SetLoginEnvironment", + "Slice", + "SmackProcessLabel", + "SocketBindAllow", + "SocketBindDeny", + "SourcePath", + "StandardError", + "StandardErrorFile", + "StandardErrorFileDescriptor", + "StandardErrorFileDescriptorName", + "StandardErrorFileToAppend", + "StandardErrorFileToTruncate", + "StandardInput", + "StandardInputData", + "StandardInputFile", + "StandardInputFileDescriptor", + "StandardInputFileDescriptorName", + "StandardOutput", + "StandardOutputFile", + "StandardOutputFileDescriptor", + "StandardOutputFileDescriptorName", + "StandardOutputFileToAppend", + "StandardOutputFileToTruncate", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StartupAllowedCPUs", + "StartupAllowedMemoryNodes", + "StartupBlockIOWeight", + "StartupCPUShares", + "StartupCPUWeight", + "StartupIOWeight", + "StartupMemoryHigh", + "StartupMemoryLow", + "StartupMemoryMax", + "StartupMemorySwapMax", + "StartupMemoryZSwapMax", + "StateDirectory", + "StateDirectoryMode", + "StateDirectorySymlink", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SuccessExitStatus", + "SupplementaryGroups", + "SurviveFinalKillSignal", + "SyslogFacility", + "SyslogIdentifier", + "SyslogLevel", + "SyslogLevelPrefix", + "SystemCallArchitectures", + "SystemCallErrorNumber", + "SystemCallFilter", + "SystemCallLog", + "TTYColumns", + "TTYPath", + "TTYReset", + "TTYRows", + "TTYVHangup", + "TTYVTDisallocate", + "TasksAccounting", + "TasksMax", + "TasksMaxScale", + "TemporaryFileSystem", + "TimeoutAbortUSec", + "TimeoutStartFailureMode", + "TimeoutStartUSec", + "TimeoutStopFailureMode", + "TimeoutStopUSec", + "TimerSlackNSec", + "Type", + "UMask", + "USBFunctionDescriptors", + "USBFunctionStrings", + "UnsetEnvironment", + "Upholds", + "User", + "UtmpIdentifier", + "UtmpMode", + "Wants", + "WatchdogSignal", + "WatchdogUSec", + "WorkingDirectory" + ], + "socket": [ + "Accept", + "AddRef", + "After", + "AllowIsolate", + "AllowedCPUs", + "AllowedMemoryNodes", + "AmbientCapabilities", + "AppArmorProfile", + "Asserts", + "BPFProgram", + "Backlog", + "Before", + "BindIPv6Only", + "BindPaths", + "BindReadOnlyPaths", + "BindToDevice", + "BindsTo", + "BlockIOAccounting", + "BlockIODeviceWeight", + "BlockIOReadBandwidth", + "BlockIOWeight", + "BlockIOWriteBandwidth", + "Broadcast", + "CPUAccounting", + "CPUAffinity", + "CPUAffinityFromNUMA", + "CPUQuotaPerSecUSec", + "CPUQuotaPeriodUSec", + "CPUSchedulingPolicy", + "CPUSchedulingPriority", + "CPUSchedulingResetOnFork", + "CPUShares", + "CPUWeight", + "CacheDirectory", + "CacheDirectoryMode", + "CacheDirectorySymlink", + "CapabilityBoundingSet", + "CollectMode", + "Conditions", + "ConfigurationDirectory", + "ConfigurationDirectoryMode", + "Conflicts", + "CoredumpFilter", + "DefaultDependencies", + "DefaultMemoryLow", + "DefaultMemoryLowScale", + "DefaultMemoryMin", + "DefaultMemoryMinScale", + "DefaultStartupMemoryLow", + "DeferAcceptUSec", + "Description", + "DeviceAllow", + "DevicePolicy", + "DirectoryMode", + "DisableControllers", + "Documentation", + "DynamicUser", + "Environment", + "EnvironmentFiles", + "ExecPaths", + "ExecSearchPath", + "ExecStartChown", + "ExecStartPost", + "ExecStartPre", + "ExecStopPost", + "ExecStopPre", + "ExtensionDirectories", + "ExtensionImagePolicy", + "ExtensionImages", + "FailureAction", + "FailureActionExitStatus", + "FileDescriptorName", + "FinalKillSignal", + "FlushPending", + "FreeBind", + "Group", + "IOAccounting", + "IODeviceLatencyTargetUSec", + "IODeviceWeight", + "IOReadBandwidthMax", + "IOReadIOPSMax", + "IOSchedulingClass", + "IOSchedulingPriority", + "IOWeight", + "IOWriteBandwidthMax", + "IOWriteIOPSMax", + "IPAccounting", + "IPAddressAllow", + "IPAddressDeny", + "IPCNamespacePath", + "IPEgressFilterPath", + "IPIngressFilterPath", + "IPTOS", + "IPTTL", + "IgnoreOnIsolate", + "IgnoreSIGPIPE", + "ImportCredential", + "InaccessibleDirectories", + "InaccessiblePaths", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "KeepAlive", + "KeepAliveIntervalUSec", + "KeepAliveProbes", + "KeepAliveTimeUSec", + "KeyringMode", + "KillMode", + "KillSignal", + "LimitAS", + "LimitASSoft", + "LimitCORE", + "LimitCORESoft", + "LimitCPU", + "LimitCPUSoft", + "LimitDATA", + "LimitDATASoft", + "LimitFSIZE", + "LimitFSIZESoft", + "LimitLOCKS", + "LimitLOCKSSoft", + "LimitMEMLOCK", + "LimitMEMLOCKSoft", + "LimitMSGQUEUE", + "LimitMSGQUEUESoft", + "LimitNICE", + "LimitNICESoft", + "LimitNOFILE", + "LimitNOFILESoft", + "LimitNPROC", + "LimitNPROCSoft", + "LimitRSS", + "LimitRSSSoft", + "LimitRTPRIO", + "LimitRTPRIOSoft", + "LimitRTTIME", + "LimitRTTIMESoft", + "LimitSIGPENDING", + "LimitSIGPENDINGSoft", + "LimitSTACK", + "LimitSTACKSoft", + "Listen", + "LoadCredential", + "LoadCredentialEncrypted", + "LockPersonality", + "LogExtraFields", + "LogFilterPatterns", + "LogLevelMax", + "LogNamespace", + "LogRateLimitBurst", + "LogRateLimitIntervalUSec", + "LogsDirectory", + "LogsDirectoryMode", + "LogsDirectorySymlink", + "ManagedOOMPreference", + "Mark", + "Markers", + "MaxConnections", + "MaxConnectionsPerSource", + "MemoryAccounting", + "MemoryDenyWriteExecute", + "MemoryHigh", + "MemoryHighScale", + "MemoryKSM", + "MemoryLimit", + "MemoryLimitScale", + "MemoryLow", + "MemoryLowScale", + "MemoryMax", + "MemoryMaxScale", + "MemoryMin", + "MemoryMinScale", + "MemoryPressureThresholdUSec", + "MemoryPressureWatch", + "MemorySwapMax", + "MemorySwapMaxScale", + "MemoryZSwapMax", + "MemoryZSwapMaxScale", + "MessageQueueMaxMessages", + "MessageQueueMessageSize", + "MountAPIVFS", + "MountFlags", + "MountImagePolicy", + "MountImages", + "NFTSet", + "NUMAMask", + "NUMAPolicy", + "NetworkNamespacePath", + "Nice", + "NoDelay", + "NoExecPaths", + "NoNewPrivileges", + "NonBlocking", + "OOMScoreAdjust", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "PAMName", + "PartOf", + "PassCredentials", + "PassEnvironment", + "PassPacketInfo", + "PassSecurity", + "Personality", + "PipeSize", + "PollLimitBurst", + "PollLimitIntervalUSec", + "Priority", + "PrivateDevices", + "PrivateIPC", + "PrivateMounts", + "PrivateNetwork", + "PrivateTmp", + "PrivateUsers", + "ProcSubset", + "PropagatesReloadTo", + "PropagatesStopTo", + "ProtectClock", + "ProtectControlGroups", + "ProtectHome", + "ProtectHostname", + "ProtectKernelLogs", + "ProtectKernelModules", + "ProtectKernelTunables", + "ProtectProc", + "ProtectSystem", + "ReadOnlyDirectories", + "ReadOnlyPaths", + "ReadWriteDirectories", + "ReadWritePaths", + "RebootArgument", + "ReceiveBuffer", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "RemoveIPC", + "RemoveOnStop", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "RestartKillSignal", + "RestrictAddressFamilies", + "RestrictFileSystems", + "RestrictNamespaces", + "RestrictNetworkInterfaces", + "RestrictRealtime", + "RestrictSUIDSGID", + "ReusePort", + "RootDirectory", + "RootEphemeral", + "RootHash", + "RootHashPath", + "RootHashSignature", + "RootHashSignaturePath", + "RootImage", + "RootImageOptions", + "RootImagePolicy", + "RootVerity", + "RuntimeDirectory", + "RuntimeDirectoryMode", + "RuntimeDirectoryPreserve", + "RuntimeDirectorySymlink", + "SELinuxContext", + "SELinuxContextFromNet", + "SecureBits", + "SendBuffer", + "SendSIGHUP", + "SendSIGKILL", + "SetCredential", + "SetCredentialEncrypted", + "SetLoginEnvironment", + "Slice", + "SmackLabel", + "SmackLabelIPOut", + "SmackLabelIPin", + "SmackProcessLabel", + "SocketBindAllow", + "SocketBindDeny", + "SocketGroup", + "SocketMode", + "SocketProtocol", + "SocketUser", + "SourcePath", + "StandardError", + "StandardErrorFile", + "StandardErrorFileDescriptorName", + "StandardErrorFileToAppend", + "StandardErrorFileToTruncate", + "StandardInput", + "StandardInputData", + "StandardInputFile", + "StandardInputFileDescriptorName", + "StandardOutput", + "StandardOutputFile", + "StandardOutputFileDescriptorName", + "StandardOutputFileToAppend", + "StandardOutputFileToTruncate", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StartupAllowedCPUs", + "StartupAllowedMemoryNodes", + "StartupBlockIOWeight", + "StartupCPUShares", + "StartupCPUWeight", + "StartupIOWeight", + "StartupMemoryHigh", + "StartupMemoryLow", + "StartupMemoryMax", + "StartupMemorySwapMax", + "StartupMemoryZSwapMax", + "StateDirectory", + "StateDirectoryMode", + "StateDirectorySymlink", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SupplementaryGroups", + "SurviveFinalKillSignal", + "Symlinks", + "SyslogFacility", + "SyslogIdentifier", + "SyslogLevel", + "SyslogLevelPrefix", + "SystemCallArchitectures", + "SystemCallErrorNumber", + "SystemCallFilter", + "SystemCallLog", + "TCPCongestion", + "TTYColumns", + "TTYPath", + "TTYReset", + "TTYRows", + "TTYVHangup", + "TTYVTDisallocate", + "TasksAccounting", + "TasksMax", + "TasksMaxScale", + "TemporaryFileSystem", + "TimeoutUSec", + "TimerSlackNSec", + "Timestamping", + "Transparent", + "TriggerLimitBurst", + "TriggerLimitIntervalUSec", + "UMask", + "UnsetEnvironment", + "Upholds", + "User", + "UtmpIdentifier", + "UtmpMode", + "Wants", + "WatchdogSignal", + "WorkingDirectory", + "Writable" + ], + "timer": [ + "AccuracySec", + "AccuracyUSec", + "AddRef", + "After", + "AllowIsolate", + "Asserts", + "Before", + "BindsTo", + "CollectMode", + "Conditions", + "Conflicts", + "DefaultDependencies", + "Description", + "Documentation", + "FailureAction", + "FailureActionExitStatus", + "FixedRandomDelay", + "IgnoreOnIsolate", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "Markers", + "OnActiveSec", + "OnBootSec", + "OnCalendar", + "OnClockChange", + "OnFailure", + "OnFailureJobMode", + "OnStartupSec", + "OnSuccess", + "OnSuccessJobMode", + "OnTimezoneChange", + "OnUnitActiveSec", + "OnUnitInactiveSec", + "PartOf", + "Persistent", + "PropagatesReloadTo", + "PropagatesStopTo", + "RandomizedDelayUSec", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "RemainAfterElapse", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "SourcePath", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SurviveFinalKillSignal", + "TimersCalendar", + "TimersMonotonic", + "Upholds", + "WakeSystem", + "Wants" + ], + "path": [ + "AddRef", + "After", + "AllowIsolate", + "Asserts", + "Before", + "BindsTo", + "CollectMode", + "Conditions", + "Conflicts", + "DefaultDependencies", + "Description", + "DirectoryMode", + "Documentation", + "FailureAction", + "FailureActionExitStatus", + "IgnoreOnIsolate", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "MakeDirectory", + "Markers", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "PartOf", + "Paths", + "PropagatesReloadTo", + "PropagatesStopTo", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "SourcePath", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SurviveFinalKillSignal", + "TriggerLimitBurst", + "TriggerLimitIntervalUSec", + "Upholds", + "Wants" + ], + "mount": [ + "AddRef", + "After", + "AllowIsolate", + "AllowedCPUs", + "AllowedMemoryNodes", + "AmbientCapabilities", + "AppArmorProfile", + "Asserts", + "BPFProgram", + "Before", + "BindPaths", + "BindReadOnlyPaths", + "BindsTo", + "BlockIOAccounting", + "BlockIODeviceWeight", + "BlockIOReadBandwidth", + "BlockIOWeight", + "BlockIOWriteBandwidth", + "CPUAccounting", + "CPUAffinity", + "CPUAffinityFromNUMA", + "CPUQuotaPerSecUSec", + "CPUQuotaPeriodUSec", + "CPUSchedulingPolicy", + "CPUSchedulingPriority", + "CPUSchedulingResetOnFork", + "CPUShares", + "CPUWeight", + "CacheDirectory", + "CacheDirectoryMode", + "CacheDirectorySymlink", + "CapabilityBoundingSet", + "CollectMode", + "Conditions", + "ConfigurationDirectory", + "ConfigurationDirectoryMode", + "Conflicts", + "CoredumpFilter", + "DefaultDependencies", + "DefaultMemoryLow", + "DefaultMemoryLowScale", + "DefaultMemoryMin", + "DefaultMemoryMinScale", + "DefaultStartupMemoryLow", + "Description", + "DeviceAllow", + "DevicePolicy", + "DirectoryMode", + "DisableControllers", + "Documentation", + "DynamicUser", + "Environment", + "EnvironmentFiles", + "ExecPaths", + "ExecSearchPath", + "ExtensionDirectories", + "ExtensionImagePolicy", + "ExtensionImages", + "FailureAction", + "FailureActionExitStatus", + "FinalKillSignal", + "ForceUnmount", + "Group", + "IOAccounting", + "IODeviceLatencyTargetUSec", + "IODeviceWeight", + "IOReadBandwidthMax", + "IOReadIOPSMax", + "IOSchedulingClass", + "IOSchedulingPriority", + "IOWeight", + "IOWriteBandwidthMax", + "IOWriteIOPSMax", + "IPAccounting", + "IPAddressAllow", + "IPAddressDeny", + "IPCNamespacePath", + "IPEgressFilterPath", + "IPIngressFilterPath", + "IgnoreOnIsolate", + "IgnoreSIGPIPE", + "ImportCredential", + "InaccessibleDirectories", + "InaccessiblePaths", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "KeyringMode", + "KillMode", + "KillSignal", + "LazyUnmount", + "LimitAS", + "LimitASSoft", + "LimitCORE", + "LimitCORESoft", + "LimitCPU", + "LimitCPUSoft", + "LimitDATA", + "LimitDATASoft", + "LimitFSIZE", + "LimitFSIZESoft", + "LimitLOCKS", + "LimitLOCKSSoft", + "LimitMEMLOCK", + "LimitMEMLOCKSoft", + "LimitMSGQUEUE", + "LimitMSGQUEUESoft", + "LimitNICE", + "LimitNICESoft", + "LimitNOFILE", + "LimitNOFILESoft", + "LimitNPROC", + "LimitNPROCSoft", + "LimitRSS", + "LimitRSSSoft", + "LimitRTPRIO", + "LimitRTPRIOSoft", + "LimitRTTIME", + "LimitRTTIMESoft", + "LimitSIGPENDING", + "LimitSIGPENDINGSoft", + "LimitSTACK", + "LimitSTACKSoft", + "LoadCredential", + "LoadCredentialEncrypted", + "LockPersonality", + "LogExtraFields", + "LogFilterPatterns", + "LogLevelMax", + "LogNamespace", + "LogRateLimitBurst", + "LogRateLimitIntervalUSec", + "LogsDirectory", + "LogsDirectoryMode", + "LogsDirectorySymlink", + "ManagedOOMPreference", + "Markers", + "MemoryAccounting", + "MemoryDenyWriteExecute", + "MemoryHigh", + "MemoryHighScale", + "MemoryKSM", + "MemoryLimit", + "MemoryLimitScale", + "MemoryLow", + "MemoryLowScale", + "MemoryMax", + "MemoryMaxScale", + "MemoryMin", + "MemoryMinScale", + "MemoryPressureThresholdUSec", + "MemoryPressureWatch", + "MemorySwapMax", + "MemorySwapMaxScale", + "MemoryZSwapMax", + "MemoryZSwapMaxScale", + "MountAPIVFS", + "MountFlags", + "MountImagePolicy", + "MountImages", + "NFTSet", + "NUMAMask", + "NUMAPolicy", + "NetworkNamespacePath", + "Nice", + "NoExecPaths", + "NoNewPrivileges", + "NonBlocking", + "OOMScoreAdjust", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "Options", + "PAMName", + "PartOf", + "PassEnvironment", + "Personality", + "PrivateDevices", + "PrivateIPC", + "PrivateMounts", + "PrivateNetwork", + "PrivateTmp", + "PrivateUsers", + "ProcSubset", + "PropagatesReloadTo", + "PropagatesStopTo", + "ProtectClock", + "ProtectControlGroups", + "ProtectHome", + "ProtectHostname", + "ProtectKernelLogs", + "ProtectKernelModules", + "ProtectKernelTunables", + "ProtectProc", + "ProtectSystem", + "ReadOnlyDirectories", + "ReadOnlyPaths", + "ReadWriteDirectories", + "ReadWriteOnly", + "ReadWritePaths", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "RemoveIPC", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "RestartKillSignal", + "RestrictAddressFamilies", + "RestrictFileSystems", + "RestrictNamespaces", + "RestrictNetworkInterfaces", + "RestrictRealtime", + "RestrictSUIDSGID", + "RootDirectory", + "RootEphemeral", + "RootHash", + "RootHashPath", + "RootHashSignature", + "RootHashSignaturePath", + "RootImage", + "RootImageOptions", + "RootImagePolicy", + "RootVerity", + "RuntimeDirectory", + "RuntimeDirectoryMode", + "RuntimeDirectoryPreserve", + "RuntimeDirectorySymlink", + "SELinuxContext", + "SecureBits", + "SendSIGHUP", + "SendSIGKILL", + "SetCredential", + "SetCredentialEncrypted", + "SetLoginEnvironment", + "Slice", + "SloppyOptions", + "SmackProcessLabel", + "SocketBindAllow", + "SocketBindDeny", + "SourcePath", + "StandardError", + "StandardErrorFile", + "StandardErrorFileDescriptorName", + "StandardErrorFileToAppend", + "StandardErrorFileToTruncate", + "StandardInput", + "StandardInputData", + "StandardInputFile", + "StandardInputFileDescriptorName", + "StandardOutput", + "StandardOutputFile", + "StandardOutputFileDescriptorName", + "StandardOutputFileToAppend", + "StandardOutputFileToTruncate", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StartupAllowedCPUs", + "StartupAllowedMemoryNodes", + "StartupBlockIOWeight", + "StartupCPUShares", + "StartupCPUWeight", + "StartupIOWeight", + "StartupMemoryHigh", + "StartupMemoryLow", + "StartupMemoryMax", + "StartupMemorySwapMax", + "StartupMemoryZSwapMax", + "StateDirectory", + "StateDirectoryMode", + "StateDirectorySymlink", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SupplementaryGroups", + "SurviveFinalKillSignal", + "SyslogFacility", + "SyslogIdentifier", + "SyslogLevel", + "SyslogLevelPrefix", + "SystemCallArchitectures", + "SystemCallErrorNumber", + "SystemCallFilter", + "SystemCallLog", + "TTYColumns", + "TTYPath", + "TTYReset", + "TTYRows", + "TTYVHangup", + "TTYVTDisallocate", + "TasksAccounting", + "TasksMax", + "TasksMaxScale", + "TemporaryFileSystem", + "TimeoutUSec", + "TimerSlackNSec", + "Type", + "UMask", + "UnsetEnvironment", + "Upholds", + "User", + "UtmpIdentifier", + "UtmpMode", + "Wants", + "WatchdogSignal", + "What", + "Where", + "WorkingDirectory" + ], + "automount": [ + "AddRef", + "After", + "AllowIsolate", + "Asserts", + "Before", + "BindsTo", + "CollectMode", + "Conditions", + "Conflicts", + "DefaultDependencies", + "Description", + "DirectoryMode", + "Documentation", + "ExtraOptions", + "FailureAction", + "FailureActionExitStatus", + "IgnoreOnIsolate", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "Markers", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "PartOf", + "PropagatesReloadTo", + "PropagatesStopTo", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "SourcePath", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SurviveFinalKillSignal", + "TimeoutIdleUSec", + "Upholds", + "Wants", + "Where" + ], + "slice": [ + "AddRef", + "After", + "AllowIsolate", + "AllowedCPUs", + "AllowedMemoryNodes", + "Asserts", + "BPFProgram", + "Before", + "BindsTo", + "BlockIOAccounting", + "BlockIODeviceWeight", + "BlockIOReadBandwidth", + "BlockIOWeight", + "BlockIOWriteBandwidth", + "CPUAccounting", + "CPUQuotaPerSecUSec", + "CPUQuotaPeriodUSec", + "CPUShares", + "CPUWeight", + "CollectMode", + "Conditions", + "Conflicts", + "DefaultDependencies", + "DefaultMemoryLow", + "DefaultMemoryLowScale", + "DefaultMemoryMin", + "DefaultMemoryMinScale", + "DefaultStartupMemoryLow", + "Description", + "DeviceAllow", + "DevicePolicy", + "DisableControllers", + "Documentation", + "FailureAction", + "FailureActionExitStatus", + "IOAccounting", + "IODeviceLatencyTargetUSec", + "IODeviceWeight", + "IOReadBandwidthMax", + "IOReadIOPSMax", + "IOWeight", + "IOWriteBandwidthMax", + "IOWriteIOPSMax", + "IPAccounting", + "IPAddressAllow", + "IPAddressDeny", + "IPEgressFilterPath", + "IPIngressFilterPath", + "IgnoreOnIsolate", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "ManagedOOMMemoryPressure", + "ManagedOOMMemoryPressureLimit", + "ManagedOOMPreference", + "ManagedOOMSwap", + "Markers", + "MemoryAccounting", + "MemoryHigh", + "MemoryHighScale", + "MemoryLimit", + "MemoryLimitScale", + "MemoryLow", + "MemoryLowScale", + "MemoryMax", + "MemoryMaxScale", + "MemoryMin", + "MemoryMinScale", + "MemoryPressureThresholdUSec", + "MemoryPressureWatch", + "MemorySwapMax", + "MemorySwapMaxScale", + "MemoryZSwapMax", + "MemoryZSwapMaxScale", + "NFTSet", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "PartOf", + "PropagatesReloadTo", + "PropagatesStopTo", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "RestrictNetworkInterfaces", + "SocketBindAllow", + "SocketBindDeny", + "SourcePath", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StartupAllowedCPUs", + "StartupAllowedMemoryNodes", + "StartupBlockIOWeight", + "StartupCPUShares", + "StartupCPUWeight", + "StartupIOWeight", + "StartupMemoryHigh", + "StartupMemoryLow", + "StartupMemoryMax", + "StartupMemorySwapMax", + "StartupMemoryZSwapMax", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SurviveFinalKillSignal", + "TasksAccounting", + "TasksMax", + "TasksMaxScale", + "Upholds", + "Wants" + ], + "scope": [ + "AddRef", + "After", + "AllowIsolate", + "AllowedCPUs", + "AllowedMemoryNodes", + "Asserts", + "BPFProgram", + "Before", + "BindsTo", + "BlockIOAccounting", + "BlockIODeviceWeight", + "BlockIOReadBandwidth", + "BlockIOWeight", + "BlockIOWriteBandwidth", + "CPUAccounting", + "CPUQuotaPerSecUSec", + "CPUQuotaPeriodUSec", + "CPUShares", + "CPUWeight", + "CollectMode", + "Conditions", + "Conflicts", + "Controller", + "CoredumpReceive", + "DefaultDependencies", + "DefaultMemoryLow", + "DefaultMemoryLowScale", + "DefaultMemoryMin", + "DefaultMemoryMinScale", + "DefaultStartupMemoryLow", + "Delegate", + "DelegateControllers", + "DelegateSubgroup", + "Description", + "DeviceAllow", + "DevicePolicy", + "DisableControllers", + "Documentation", + "FailureAction", + "FailureActionExitStatus", + "FinalKillSignal", + "Group", + "IOAccounting", + "IODeviceLatencyTargetUSec", + "IODeviceWeight", + "IOReadBandwidthMax", + "IOReadIOPSMax", + "IOWeight", + "IOWriteBandwidthMax", + "IOWriteIOPSMax", + "IPAccounting", + "IPAddressAllow", + "IPAddressDeny", + "IPEgressFilterPath", + "IPIngressFilterPath", + "IgnoreOnIsolate", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "KillMode", + "KillSignal", + "ManagedOOMMemoryPressure", + "ManagedOOMMemoryPressureLimit", + "ManagedOOMPreference", + "ManagedOOMSwap", + "Markers", + "MemoryAccounting", + "MemoryHigh", + "MemoryHighScale", + "MemoryLimit", + "MemoryLimitScale", + "MemoryLow", + "MemoryLowScale", + "MemoryMax", + "MemoryMaxScale", + "MemoryMin", + "MemoryMinScale", + "MemoryPressureThresholdUSec", + "MemoryPressureWatch", + "MemorySwapMax", + "MemorySwapMaxScale", + "MemoryZSwapMax", + "MemoryZSwapMaxScale", + "NFTSet", + "OOMPolicy", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "PIDFDs", + "PIDs", + "PartOf", + "PropagatesReloadTo", + "PropagatesStopTo", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "RestartKillSignal", + "RestrictNetworkInterfaces", + "RuntimeMaxUSec", + "RuntimeRandomizedExtraUSec", + "SendSIGHUP", + "SendSIGKILL", + "Slice", + "SocketBindAllow", + "SocketBindDeny", + "SourcePath", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StartupAllowedCPUs", + "StartupAllowedMemoryNodes", + "StartupBlockIOWeight", + "StartupCPUShares", + "StartupCPUWeight", + "StartupIOWeight", + "StartupMemoryHigh", + "StartupMemoryLow", + "StartupMemoryMax", + "StartupMemorySwapMax", + "StartupMemoryZSwapMax", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SurviveFinalKillSignal", + "TasksAccounting", + "TasksMax", + "TasksMaxScale", + "TimeoutStopUSec", + "Upholds", + "User", + "Wants", + "WatchdogSignal" + ] + }, + "ignored": [], + "refused": { + "BoundBy": "Dependency type BoundBy may not be created transiently.", + "ConflictedBy": "Dependency type ConflictedBy may not be created transiently.", + "ConsistsOf": "Dependency type ConsistsOf may not be created transiently.", + "OnFailureOf": "Dependency type OnFailureOf may not be created transiently.", + "OnSuccessOf": "Dependency type OnSuccessOf may not be created transiently.", + "RequiredBy": "Dependency type RequiredBy may not be created transiently.", + "RequisiteOf": "Dependency type RequisiteOf may not be created transiently.", + "SliceOf": "Dependency type SliceOf may not be created transiently.", + "TriggeredBy": "Dependency type TriggeredBy may not be created transiently.", + "Triggers": "Dependency type Triggers may not be created transiently.", + "UpheldBy": "Dependency type UpheldBy may not be created transiently.", + "WantedBy": "Dependency type WantedBy may not be created transiently." + } +} diff --git a/tools/transient-properties/systemd-257.json b/tools/transient-properties/systemd-257.json new file mode 100644 index 0000000..4d60302 --- /dev/null +++ b/tools/transient-properties/systemd-257.json @@ -0,0 +1,1995 @@ +{ + "systemd": "systemd 257 (257.13-1~deb13u1)", + "properties": { + "Accept": "b", + "AccuracySec": "t", + "AccuracyUSec": "t", + "AddRef": "b", + "After": "as", + "AllowIsolate": "b", + "AllowedCPUs": "ay", + "AllowedMemoryNodes": "ay", + "AmbientCapabilities": "t", + "AppArmorProfile": "(bs)", + "Asserts": "a(sbbs)", + "BPFProgram": "a(ss)", + "Backlog": "u", + "Before": "as", + "BindIPv6Only": "s", + "BindLogSockets": "b", + "BindPaths": "a(ssbt)", + "BindReadOnlyPaths": "a(ssbt)", + "BindToDevice": "s", + "BindsTo": "as", + "BlockIOAccounting": "b", + "BlockIODeviceWeight": "a(st)", + "BlockIOReadBandwidth": "a(st)", + "BlockIOWeight": "t", + "BlockIOWriteBandwidth": "a(st)", + "Broadcast": "b", + "BusName": "s", + "CPUAccounting": "b", + "CPUAffinity": "ay", + "CPUAffinityFromNUMA": "b", + "CPUQuotaPerSecUSec": "t", + "CPUQuotaPeriodUSec": "t", + "CPUSchedulingPolicy": "i", + "CPUSchedulingPriority": "i", + "CPUSchedulingResetOnFork": "b", + "CPUShares": "t", + "CPUWeight": "t", + "CacheDirectory": "as", + "CacheDirectoryMode": "u", + "CacheDirectorySymlink": "a(sst)", + "CapabilityBoundingSet": "t", + "CollectMode": "s", + "Conditions": "a(sbbs)", + "ConfigurationDirectory": "as", + "ConfigurationDirectoryMode": "u", + "Conflicts": "as", + "Controller": "s", + "CoredumpFilter": "t", + "CoredumpReceive": "b", + "DefaultDependencies": "b", + "DefaultMemoryLow": "t", + "DefaultMemoryLowScale": "u", + "DefaultMemoryMin": "t", + "DefaultMemoryMinScale": "u", + "DefaultStartupMemoryLow": "t", + "DeferAcceptUSec": "t", + "DeferReactivation": "b", + "Delegate": "b", + "DelegateControllers": "as", + "DelegateSubgroup": "s", + "Description": "s", + "DeviceAllow": "a(ss)", + "DevicePolicy": "s", + "DirectoryMode": "u", + "DisableControllers": "as", + "Documentation": "as", + "DynamicUser": "b", + "Environment": "as", + "EnvironmentFiles": "a(sb)", + "ExecCondition": "a(sasb)", + "ExecConditionEx": "a(sasas)", + "ExecPaths": "as", + "ExecReload": "a(sasb)", + "ExecReloadEx": "a(sasas)", + "ExecSearchPath": "as", + "ExecStart": "a(sasb)", + "ExecStartChown": "a(sasb)", + "ExecStartEx": "a(sasas)", + "ExecStartPost": "a(sasb)", + "ExecStartPostEx": "a(sasas)", + "ExecStartPre": "a(sasb)", + "ExecStartPreEx": "a(sasas)", + "ExecStop": "a(sasb)", + "ExecStopEx": "a(sasas)", + "ExecStopPost": "a(sasb)", + "ExecStopPostEx": "a(sasas)", + "ExecStopPre": "a(sasb)", + "ExitType": "s", + "ExtensionDirectories": "as", + "ExtensionImagePolicy": "s", + "ExtensionImages": "a(sba(ss))", + "ExtraFileDescriptors": "a(hs)", + "ExtraOptions": "s", + "FailureAction": "s", + "FailureActionExitStatus": "i", + "FileDescriptorName": "s", + "FileDescriptorStoreMax": "u", + "FileDescriptorStorePreserve": "s", + "FinalKillSignal": "i", + "FixedRandomDelay": "b", + "FlushPending": "b", + "ForceUnmount": "b", + "FreeBind": "b", + "Group": "s", + "GuessMainPID": "b", + "IOAccounting": "b", + "IODeviceLatencyTargetUSec": "a(st)", + "IODeviceWeight": "a(st)", + "IOReadBandwidthMax": "a(st)", + "IOReadIOPSMax": "a(st)", + "IOSchedulingClass": "i", + "IOSchedulingPriority": "i", + "IOWeight": "t", + "IOWriteBandwidthMax": "a(st)", + "IOWriteIOPSMax": "a(st)", + "IPAccounting": "b", + "IPAddressAllow": "a(iayu)", + "IPAddressDeny": "a(iayu)", + "IPCNamespacePath": "s", + "IPEgressFilterPath": "as", + "IPIngressFilterPath": "as", + "IPTOS": "i", + "IPTTL": "i", + "IgnoreOnIsolate": "b", + "IgnoreSIGPIPE": "b", + "ImportCredential": "as", + "ImportCredentialEx": "a(ss)", + "InaccessibleDirectories": "as", + "InaccessiblePaths": "as", + "JobRunningTimeoutUSec": "t", + "JobTimeoutAction": "s", + "JobTimeoutRebootArgument": "s", + "JoinsNamespaceOf": "as", + "KeepAlive": "b", + "KeepAliveIntervalUSec": "t", + "KeepAliveProbes": "u", + "KeepAliveTimeUSec": "t", + "KeyringMode": "s", + "KillMode": "s", + "KillSignal": "i", + "LazyUnmount": "b", + "LimitAS": "t", + "LimitASSoft": "t", + "LimitCORE": "t", + "LimitCORESoft": "t", + "LimitCPU": "t", + "LimitCPUSoft": "t", + "LimitDATA": "t", + "LimitDATASoft": "t", + "LimitFSIZE": "t", + "LimitFSIZESoft": "t", + "LimitLOCKS": "t", + "LimitLOCKSSoft": "t", + "LimitMEMLOCK": "t", + "LimitMEMLOCKSoft": "t", + "LimitMSGQUEUE": "t", + "LimitMSGQUEUESoft": "t", + "LimitNICE": "t", + "LimitNICESoft": "t", + "LimitNOFILE": "t", + "LimitNOFILESoft": "t", + "LimitNPROC": "t", + "LimitNPROCSoft": "t", + "LimitRSS": "t", + "LimitRSSSoft": "t", + "LimitRTPRIO": "t", + "LimitRTPRIOSoft": "t", + "LimitRTTIME": "t", + "LimitRTTIMESoft": "t", + "LimitSIGPENDING": "t", + "LimitSIGPENDINGSoft": "t", + "LimitSTACK": "t", + "LimitSTACKSoft": "t", + "Listen": "a(ss)", + "LoadCredential": "a(ss)", + "LoadCredentialEncrypted": "a(ss)", + "LockPersonality": "b", + "LogExtraFields": "aay", + "LogFilterPatterns": "a(bs)", + "LogLevelMax": "i", + "LogNamespace": "s", + "LogRateLimitBurst": "u", + "LogRateLimitIntervalUSec": "t", + "LogsDirectory": "as", + "LogsDirectoryMode": "u", + "LogsDirectorySymlink": "a(sst)", + "MakeDirectory": "b", + "ManagedOOMMemoryPressure": "s", + "ManagedOOMMemoryPressureDurationUSec": "t", + "ManagedOOMMemoryPressureLimit": "u", + "ManagedOOMPreference": "s", + "ManagedOOMSwap": "s", + "Mark": "i", + "Markers": "as", + "MaxConnections": "u", + "MaxConnectionsPerSource": "u", + "MemoryAccounting": "b", + "MemoryDenyWriteExecute": "b", + "MemoryHigh": "t", + "MemoryHighScale": "u", + "MemoryKSM": "b", + "MemoryLimit": "t", + "MemoryLimitScale": "u", + "MemoryLow": "t", + "MemoryLowScale": "u", + "MemoryMax": "t", + "MemoryMaxScale": "u", + "MemoryMin": "t", + "MemoryMinScale": "u", + "MemoryPressureThresholdUSec": "t", + "MemoryPressureWatch": "s", + "MemorySwapMax": "t", + "MemorySwapMaxScale": "u", + "MemoryZSwapMax": "t", + "MemoryZSwapMaxScale": "u", + "MemoryZSwapWriteback": "b", + "MessageQueueMaxMessages": "x", + "MessageQueueMessageSize": "x", + "MountAPIVFS": "b", + "MountFlags": "t", + "MountImagePolicy": "s", + "MountImages": "a(ssba(ss))", + "NFTSet": "a(iiss)", + "NUMAMask": "ay", + "NUMAPolicy": "i", + "NetworkNamespacePath": "s", + "Nice": "i", + "NoDelay": "b", + "NoExecPaths": "as", + "NoNewPrivileges": "b", + "NonBlocking": "b", + "NotifyAccess": "s", + "OOMPolicy": "s", + "OOMScoreAdjust": "i", + "OnActiveSec": "t", + "OnBootSec": "t", + "OnCalendar": "s", + "OnClockChange": "b", + "OnFailure": "as", + "OnFailureJobMode": "s", + "OnStartupSec": "t", + "OnSuccess": "as", + "OnSuccessJobMode": "s", + "OnTimezoneChange": "b", + "OnUnitActiveSec": "t", + "OnUnitInactiveSec": "t", + "OpenFile": "a(sst)", + "Options": "s", + "PAMName": "s", + "PIDFDs": "ah", + "PIDFile": "s", + "PIDs": "au", + "PartOf": "as", + "PassCredentials": "b", + "PassEnvironment": "as", + "PassFileDescriptorsToExec": "b", + "PassPacketInfo": "b", + "PassSecurity": "b", + "Paths": "a(ss)", + "PermissionsStartOnly": "b", + "Persistent": "b", + "Personality": "s", + "PipeSize": "t", + "PollLimitBurst": "u", + "PollLimitIntervalUSec": "t", + "Priority": "i", + "PrivateDevices": "b", + "PrivateIPC": "b", + "PrivateMounts": "b", + "PrivateNetwork": "b", + "PrivatePIDs": "s", + "PrivateTmp": "b", + "PrivateTmpEx": "s", + "PrivateUsers": "b", + "PrivateUsersEx": "s", + "ProcSubset": "s", + "PropagatesReloadTo": "as", + "PropagatesStopTo": "as", + "ProtectClock": "b", + "ProtectControlGroups": "b", + "ProtectControlGroupsEx": "s", + "ProtectHome": "s", + "ProtectHostname": "b", + "ProtectKernelLogs": "b", + "ProtectKernelModules": "b", + "ProtectKernelTunables": "b", + "ProtectProc": "s", + "ProtectSystem": "s", + "RandomizedDelayUSec": "t", + "ReadOnlyDirectories": "as", + "ReadOnlyPaths": "as", + "ReadWriteDirectories": "as", + "ReadWriteOnly": "b", + "ReadWritePaths": "as", + "RebootArgument": "s", + "ReceiveBuffer": "t", + "RefuseManualStart": "b", + "RefuseManualStop": "b", + "ReloadPropagatedFrom": "as", + "ReloadSignal": "i", + "RemainAfterElapse": "b", + "RemainAfterExit": "b", + "RemoveIPC": "b", + "RemoveOnStop": "b", + "Requires": "as", + "RequiresMountsFor": "as", + "RequiresOverridable": "as", + "Requisite": "as", + "RequisiteOverridable": "as", + "Restart": "s", + "RestartForceExitStatus": "(aiai)", + "RestartKillSignal": "i", + "RestartMaxDelayUSec": "t", + "RestartMode": "s", + "RestartPreventExitStatus": "(aiai)", + "RestartSteps": "u", + "RestartUSec": "t", + "RestrictAddressFamilies": "(bas)", + "RestrictFileSystems": "(bas)", + "RestrictNamespaces": "t", + "RestrictNetworkInterfaces": "(bas)", + "RestrictRealtime": "b", + "RestrictSUIDSGID": "b", + "ReusePort": "b", + "RootDirectory": "s", + "RootDirectoryStartOnly": "b", + "RootEphemeral": "b", + "RootHash": "ay", + "RootHashPath": "s", + "RootHashSignature": "ay", + "RootHashSignaturePath": "s", + "RootImage": "s", + "RootImageOptions": "a(ss)", + "RootImagePolicy": "s", + "RootVerity": "s", + "RuntimeDirectory": "as", + "RuntimeDirectoryMode": "u", + "RuntimeDirectoryPreserve": "s", + "RuntimeDirectorySymlink": "a(sst)", + "RuntimeMaxUSec": "t", + "RuntimeRandomizedExtraUSec": "t", + "SELinuxContext": "s", + "SELinuxContextFromNet": "b", + "SecureBits": "i", + "SendBuffer": "t", + "SendSIGHUP": "b", + "SendSIGKILL": "b", + "SetCredential": "a(say)", + "SetCredentialEncrypted": "a(say)", + "SetLoginEnvironment": "b", + "Slice": "s", + "SloppyOptions": "b", + "SmackLabel": "s", + "SmackLabelIPOut": "s", + "SmackLabelIPin": "s", + "SmackProcessLabel": "(bs)", + "SocketBindAllow": "a(iiqq)", + "SocketBindDeny": "a(iiqq)", + "SocketGroup": "s", + "SocketMode": "u", + "SocketProtocol": "i", + "SocketUser": "s", + "SourcePath": "s", + "StandardError": "s", + "StandardErrorFile": "s", + "StandardErrorFileDescriptor": "h", + "StandardErrorFileDescriptorName": "s", + "StandardErrorFileToAppend": "s", + "StandardErrorFileToTruncate": "s", + "StandardInput": "s", + "StandardInputData": "ay", + "StandardInputFile": "s", + "StandardInputFileDescriptor": "h", + "StandardInputFileDescriptorName": "s", + "StandardOutput": "s", + "StandardOutputFile": "s", + "StandardOutputFileDescriptor": "h", + "StandardOutputFileDescriptorName": "s", + "StandardOutputFileToAppend": "s", + "StandardOutputFileToTruncate": "s", + "StartLimitAction": "s", + "StartLimitBurst": "u", + "StartLimitIntervalUSec": "t", + "StartupAllowedCPUs": "ay", + "StartupAllowedMemoryNodes": "ay", + "StartupBlockIOWeight": "t", + "StartupCPUShares": "t", + "StartupCPUWeight": "t", + "StartupIOWeight": "t", + "StartupMemoryHigh": "t", + "StartupMemoryLow": "t", + "StartupMemoryMax": "t", + "StartupMemorySwapMax": "t", + "StartupMemoryZSwapMax": "t", + "StateDirectory": "as", + "StateDirectoryMode": "u", + "StateDirectorySymlink": "a(sst)", + "StopPropagatedFrom": "as", + "StopWhenUnneeded": "b", + "SuccessAction": "s", + "SuccessActionExitStatus": "i", + "SuccessExitStatus": "(aiai)", + "SupplementaryGroups": "as", + "SurviveFinalKillSignal": "b", + "Symlinks": "as", + "SyslogFacility": "i", + "SyslogIdentifier": "s", + "SyslogLevel": "i", + "SyslogLevelPrefix": "b", + "SystemCallArchitectures": "as", + "SystemCallErrorNumber": "i", + "SystemCallFilter": "(bas)", + "SystemCallLog": "(bas)", + "TCPCongestion": "s", + "TTYColumns": "u", + "TTYPath": "s", + "TTYReset": "b", + "TTYRows": "u", + "TTYVHangup": "b", + "TTYVTDisallocate": "b", + "TasksAccounting": "b", + "TasksMax": "t", + "TasksMaxScale": "u", + "TemporaryFileSystem": "a(ss)", + "TimeoutAbortUSec": "t", + "TimeoutIdleUSec": "t", + "TimeoutStartFailureMode": "s", + "TimeoutStartUSec": "t", + "TimeoutStopFailureMode": "s", + "TimeoutStopUSec": "t", + "TimeoutUSec": "t", + "TimerSlackNSec": "t", + "TimersCalendar": "a(ss)", + "TimersMonotonic": "a(st)", + "Timestamping": "s", + "Transparent": "b", + "TriggerLimitBurst": "u", + "TriggerLimitIntervalUSec": "t", + "Type": "s", + "UMask": "u", + "USBFunctionDescriptors": "s", + "USBFunctionStrings": "s", + "UnsetEnvironment": "as", + "Upholds": "as", + "User": "s", + "UtmpIdentifier": "s", + "UtmpMode": "s", + "WakeSystem": "b", + "Wants": "as", + "WantsMountsFor": "as", + "WatchdogSignal": "i", + "WatchdogUSec": "t", + "What": "s", + "Where": "s", + "WorkingDirectory": "s", + "Writable": "b" + }, + "unit_types": { + "service": [ + "AddRef", + "After", + "AllowIsolate", + "AllowedCPUs", + "AllowedMemoryNodes", + "AmbientCapabilities", + "AppArmorProfile", + "Asserts", + "BPFProgram", + "Before", + "BindLogSockets", + "BindPaths", + "BindReadOnlyPaths", + "BindsTo", + "BlockIOAccounting", + "BlockIODeviceWeight", + "BlockIOReadBandwidth", + "BlockIOWeight", + "BlockIOWriteBandwidth", + "BusName", + "CPUAccounting", + "CPUAffinity", + "CPUAffinityFromNUMA", + "CPUQuotaPerSecUSec", + "CPUQuotaPeriodUSec", + "CPUSchedulingPolicy", + "CPUSchedulingPriority", + "CPUSchedulingResetOnFork", + "CPUShares", + "CPUWeight", + "CacheDirectory", + "CacheDirectoryMode", + "CacheDirectorySymlink", + "CapabilityBoundingSet", + "CollectMode", + "Conditions", + "ConfigurationDirectory", + "ConfigurationDirectoryMode", + "Conflicts", + "CoredumpFilter", + "CoredumpReceive", + "DefaultDependencies", + "DefaultMemoryLow", + "DefaultMemoryLowScale", + "DefaultMemoryMin", + "DefaultMemoryMinScale", + "DefaultStartupMemoryLow", + "Delegate", + "DelegateControllers", + "DelegateSubgroup", + "Description", + "DeviceAllow", + "DevicePolicy", + "DisableControllers", + "Documentation", + "DynamicUser", + "Environment", + "EnvironmentFiles", + "ExecCondition", + "ExecConditionEx", + "ExecPaths", + "ExecReload", + "ExecReloadEx", + "ExecSearchPath", + "ExecStart", + "ExecStartEx", + "ExecStartPost", + "ExecStartPostEx", + "ExecStartPre", + "ExecStartPreEx", + "ExecStop", + "ExecStopEx", + "ExecStopPost", + "ExecStopPostEx", + "ExitType", + "ExtensionDirectories", + "ExtensionImagePolicy", + "ExtensionImages", + "ExtraFileDescriptors", + "FailureAction", + "FailureActionExitStatus", + "FileDescriptorStoreMax", + "FileDescriptorStorePreserve", + "FinalKillSignal", + "Group", + "GuessMainPID", + "IOAccounting", + "IODeviceLatencyTargetUSec", + "IODeviceWeight", + "IOReadBandwidthMax", + "IOReadIOPSMax", + "IOSchedulingClass", + "IOSchedulingPriority", + "IOWeight", + "IOWriteBandwidthMax", + "IOWriteIOPSMax", + "IPAccounting", + "IPAddressAllow", + "IPAddressDeny", + "IPCNamespacePath", + "IPEgressFilterPath", + "IPIngressFilterPath", + "IgnoreOnIsolate", + "IgnoreSIGPIPE", + "ImportCredential", + "ImportCredentialEx", + "InaccessibleDirectories", + "InaccessiblePaths", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "KeyringMode", + "KillMode", + "KillSignal", + "LimitAS", + "LimitASSoft", + "LimitCORE", + "LimitCORESoft", + "LimitCPU", + "LimitCPUSoft", + "LimitDATA", + "LimitDATASoft", + "LimitFSIZE", + "LimitFSIZESoft", + "LimitLOCKS", + "LimitLOCKSSoft", + "LimitMEMLOCK", + "LimitMEMLOCKSoft", + "LimitMSGQUEUE", + "LimitMSGQUEUESoft", + "LimitNICE", + "LimitNICESoft", + "LimitNOFILE", + "LimitNOFILESoft", + "LimitNPROC", + "LimitNPROCSoft", + "LimitRSS", + "LimitRSSSoft", + "LimitRTPRIO", + "LimitRTPRIOSoft", + "LimitRTTIME", + "LimitRTTIMESoft", + "LimitSIGPENDING", + "LimitSIGPENDINGSoft", + "LimitSTACK", + "LimitSTACKSoft", + "LoadCredential", + "LoadCredentialEncrypted", + "LockPersonality", + "LogExtraFields", + "LogFilterPatterns", + "LogLevelMax", + "LogNamespace", + "LogRateLimitBurst", + "LogRateLimitIntervalUSec", + "LogsDirectory", + "LogsDirectoryMode", + "LogsDirectorySymlink", + "ManagedOOMMemoryPressure", + "ManagedOOMMemoryPressureDurationUSec", + "ManagedOOMMemoryPressureLimit", + "ManagedOOMPreference", + "ManagedOOMSwap", + "Markers", + "MemoryAccounting", + "MemoryDenyWriteExecute", + "MemoryHigh", + "MemoryHighScale", + "MemoryKSM", + "MemoryLimit", + "MemoryLimitScale", + "MemoryLow", + "MemoryLowScale", + "MemoryMax", + "MemoryMaxScale", + "MemoryMin", + "MemoryMinScale", + "MemoryPressureThresholdUSec", + "MemoryPressureWatch", + "MemorySwapMax", + "MemorySwapMaxScale", + "MemoryZSwapMax", + "MemoryZSwapMaxScale", + "MemoryZSwapWriteback", + "MountAPIVFS", + "MountFlags", + "MountImagePolicy", + "MountImages", + "NFTSet", + "NUMAMask", + "NUMAPolicy", + "NetworkNamespacePath", + "Nice", + "NoExecPaths", + "NoNewPrivileges", + "NonBlocking", + "NotifyAccess", + "OOMPolicy", + "OOMScoreAdjust", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "OpenFile", + "PAMName", + "PIDFile", + "PartOf", + "PassEnvironment", + "PermissionsStartOnly", + "Personality", + "PrivateDevices", + "PrivateIPC", + "PrivateMounts", + "PrivateNetwork", + "PrivatePIDs", + "PrivateTmp", + "PrivateTmpEx", + "PrivateUsers", + "PrivateUsersEx", + "ProcSubset", + "PropagatesReloadTo", + "PropagatesStopTo", + "ProtectClock", + "ProtectControlGroups", + "ProtectControlGroupsEx", + "ProtectHome", + "ProtectHostname", + "ProtectKernelLogs", + "ProtectKernelModules", + "ProtectKernelTunables", + "ProtectProc", + "ProtectSystem", + "ReadOnlyDirectories", + "ReadOnlyPaths", + "ReadWriteDirectories", + "ReadWritePaths", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "ReloadSignal", + "RemainAfterExit", + "RemoveIPC", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "Restart", + "RestartForceExitStatus", + "RestartKillSignal", + "RestartMaxDelayUSec", + "RestartMode", + "RestartPreventExitStatus", + "RestartSteps", + "RestartUSec", + "RestrictAddressFamilies", + "RestrictFileSystems", + "RestrictNamespaces", + "RestrictNetworkInterfaces", + "RestrictRealtime", + "RestrictSUIDSGID", + "RootDirectory", + "RootDirectoryStartOnly", + "RootEphemeral", + "RootHash", + "RootHashPath", + "RootHashSignature", + "RootHashSignaturePath", + "RootImage", + "RootImageOptions", + "RootImagePolicy", + "RootVerity", + "RuntimeDirectory", + "RuntimeDirectoryMode", + "RuntimeDirectoryPreserve", + "RuntimeDirectorySymlink", + "RuntimeMaxUSec", + "RuntimeRandomizedExtraUSec", + "SELinuxContext", + "SecureBits", + "SendSIGHUP", + "SendSIGKILL", + "SetCredential", + "SetCredentialEncrypted", + "SetLoginEnvironment", + "Slice", + "SmackProcessLabel", + "SocketBindAllow", + "SocketBindDeny", + "SourcePath", + "StandardError", + "StandardErrorFile", + "StandardErrorFileDescriptor", + "StandardErrorFileDescriptorName", + "StandardErrorFileToAppend", + "StandardErrorFileToTruncate", + "StandardInput", + "StandardInputData", + "StandardInputFile", + "StandardInputFileDescriptor", + "StandardInputFileDescriptorName", + "StandardOutput", + "StandardOutputFile", + "StandardOutputFileDescriptor", + "StandardOutputFileDescriptorName", + "StandardOutputFileToAppend", + "StandardOutputFileToTruncate", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StartupAllowedCPUs", + "StartupAllowedMemoryNodes", + "StartupBlockIOWeight", + "StartupCPUShares", + "StartupCPUWeight", + "StartupIOWeight", + "StartupMemoryHigh", + "StartupMemoryLow", + "StartupMemoryMax", + "StartupMemorySwapMax", + "StartupMemoryZSwapMax", + "StateDirectory", + "StateDirectoryMode", + "StateDirectorySymlink", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SuccessExitStatus", + "SupplementaryGroups", + "SurviveFinalKillSignal", + "SyslogFacility", + "SyslogIdentifier", + "SyslogLevel", + "SyslogLevelPrefix", + "SystemCallArchitectures", + "SystemCallErrorNumber", + "SystemCallFilter", + "SystemCallLog", + "TTYColumns", + "TTYPath", + "TTYReset", + "TTYRows", + "TTYVHangup", + "TTYVTDisallocate", + "TasksAccounting", + "TasksMax", + "TasksMaxScale", + "TemporaryFileSystem", + "TimeoutAbortUSec", + "TimeoutStartFailureMode", + "TimeoutStartUSec", + "TimeoutStopFailureMode", + "TimeoutStopUSec", + "TimerSlackNSec", + "Type", + "UMask", + "USBFunctionDescriptors", + "USBFunctionStrings", + "UnsetEnvironment", + "Upholds", + "User", + "UtmpIdentifier", + "UtmpMode", + "Wants", + "WantsMountsFor", + "WatchdogSignal", + "WatchdogUSec", + "WorkingDirectory" + ], + "socket": [ + "Accept", + "AddRef", + "After", + "AllowIsolate", + "AllowedCPUs", + "AllowedMemoryNodes", + "AmbientCapabilities", + "AppArmorProfile", + "Asserts", + "BPFProgram", + "Backlog", + "Before", + "BindIPv6Only", + "BindLogSockets", + "BindPaths", + "BindReadOnlyPaths", + "BindToDevice", + "BindsTo", + "BlockIOAccounting", + "BlockIODeviceWeight", + "BlockIOReadBandwidth", + "BlockIOWeight", + "BlockIOWriteBandwidth", + "Broadcast", + "CPUAccounting", + "CPUAffinity", + "CPUAffinityFromNUMA", + "CPUQuotaPerSecUSec", + "CPUQuotaPeriodUSec", + "CPUSchedulingPolicy", + "CPUSchedulingPriority", + "CPUSchedulingResetOnFork", + "CPUShares", + "CPUWeight", + "CacheDirectory", + "CacheDirectoryMode", + "CacheDirectorySymlink", + "CapabilityBoundingSet", + "CollectMode", + "Conditions", + "ConfigurationDirectory", + "ConfigurationDirectoryMode", + "Conflicts", + "CoredumpFilter", + "DefaultDependencies", + "DefaultMemoryLow", + "DefaultMemoryLowScale", + "DefaultMemoryMin", + "DefaultMemoryMinScale", + "DefaultStartupMemoryLow", + "DeferAcceptUSec", + "Description", + "DeviceAllow", + "DevicePolicy", + "DirectoryMode", + "DisableControllers", + "Documentation", + "DynamicUser", + "Environment", + "EnvironmentFiles", + "ExecPaths", + "ExecSearchPath", + "ExecStartChown", + "ExecStartPost", + "ExecStartPre", + "ExecStopPost", + "ExecStopPre", + "ExtensionDirectories", + "ExtensionImagePolicy", + "ExtensionImages", + "FailureAction", + "FailureActionExitStatus", + "FileDescriptorName", + "FinalKillSignal", + "FlushPending", + "FreeBind", + "Group", + "IOAccounting", + "IODeviceLatencyTargetUSec", + "IODeviceWeight", + "IOReadBandwidthMax", + "IOReadIOPSMax", + "IOSchedulingClass", + "IOSchedulingPriority", + "IOWeight", + "IOWriteBandwidthMax", + "IOWriteIOPSMax", + "IPAccounting", + "IPAddressAllow", + "IPAddressDeny", + "IPCNamespacePath", + "IPEgressFilterPath", + "IPIngressFilterPath", + "IPTOS", + "IPTTL", + "IgnoreOnIsolate", + "IgnoreSIGPIPE", + "ImportCredential", + "ImportCredentialEx", + "InaccessibleDirectories", + "InaccessiblePaths", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "KeepAlive", + "KeepAliveIntervalUSec", + "KeepAliveProbes", + "KeepAliveTimeUSec", + "KeyringMode", + "KillMode", + "KillSignal", + "LimitAS", + "LimitASSoft", + "LimitCORE", + "LimitCORESoft", + "LimitCPU", + "LimitCPUSoft", + "LimitDATA", + "LimitDATASoft", + "LimitFSIZE", + "LimitFSIZESoft", + "LimitLOCKS", + "LimitLOCKSSoft", + "LimitMEMLOCK", + "LimitMEMLOCKSoft", + "LimitMSGQUEUE", + "LimitMSGQUEUESoft", + "LimitNICE", + "LimitNICESoft", + "LimitNOFILE", + "LimitNOFILESoft", + "LimitNPROC", + "LimitNPROCSoft", + "LimitRSS", + "LimitRSSSoft", + "LimitRTPRIO", + "LimitRTPRIOSoft", + "LimitRTTIME", + "LimitRTTIMESoft", + "LimitSIGPENDING", + "LimitSIGPENDINGSoft", + "LimitSTACK", + "LimitSTACKSoft", + "Listen", + "LoadCredential", + "LoadCredentialEncrypted", + "LockPersonality", + "LogExtraFields", + "LogFilterPatterns", + "LogLevelMax", + "LogNamespace", + "LogRateLimitBurst", + "LogRateLimitIntervalUSec", + "LogsDirectory", + "LogsDirectoryMode", + "LogsDirectorySymlink", + "ManagedOOMPreference", + "Mark", + "Markers", + "MaxConnections", + "MaxConnectionsPerSource", + "MemoryAccounting", + "MemoryDenyWriteExecute", + "MemoryHigh", + "MemoryHighScale", + "MemoryKSM", + "MemoryLimit", + "MemoryLimitScale", + "MemoryLow", + "MemoryLowScale", + "MemoryMax", + "MemoryMaxScale", + "MemoryMin", + "MemoryMinScale", + "MemoryPressureThresholdUSec", + "MemoryPressureWatch", + "MemorySwapMax", + "MemorySwapMaxScale", + "MemoryZSwapMax", + "MemoryZSwapMaxScale", + "MemoryZSwapWriteback", + "MessageQueueMaxMessages", + "MessageQueueMessageSize", + "MountAPIVFS", + "MountFlags", + "MountImagePolicy", + "MountImages", + "NFTSet", + "NUMAMask", + "NUMAPolicy", + "NetworkNamespacePath", + "Nice", + "NoDelay", + "NoExecPaths", + "NoNewPrivileges", + "NonBlocking", + "OOMScoreAdjust", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "PAMName", + "PartOf", + "PassCredentials", + "PassEnvironment", + "PassFileDescriptorsToExec", + "PassPacketInfo", + "PassSecurity", + "Personality", + "PipeSize", + "PollLimitBurst", + "PollLimitIntervalUSec", + "Priority", + "PrivateDevices", + "PrivateIPC", + "PrivateMounts", + "PrivateNetwork", + "PrivatePIDs", + "PrivateTmp", + "PrivateTmpEx", + "PrivateUsers", + "PrivateUsersEx", + "ProcSubset", + "PropagatesReloadTo", + "PropagatesStopTo", + "ProtectClock", + "ProtectControlGroups", + "ProtectControlGroupsEx", + "ProtectHome", + "ProtectHostname", + "ProtectKernelLogs", + "ProtectKernelModules", + "ProtectKernelTunables", + "ProtectProc", + "ProtectSystem", + "ReadOnlyDirectories", + "ReadOnlyPaths", + "ReadWriteDirectories", + "ReadWritePaths", + "RebootArgument", + "ReceiveBuffer", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "RemoveIPC", + "RemoveOnStop", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "RestartKillSignal", + "RestrictAddressFamilies", + "RestrictFileSystems", + "RestrictNamespaces", + "RestrictNetworkInterfaces", + "RestrictRealtime", + "RestrictSUIDSGID", + "ReusePort", + "RootDirectory", + "RootEphemeral", + "RootHash", + "RootHashPath", + "RootHashSignature", + "RootHashSignaturePath", + "RootImage", + "RootImageOptions", + "RootImagePolicy", + "RootVerity", + "RuntimeDirectory", + "RuntimeDirectoryMode", + "RuntimeDirectoryPreserve", + "RuntimeDirectorySymlink", + "SELinuxContext", + "SELinuxContextFromNet", + "SecureBits", + "SendBuffer", + "SendSIGHUP", + "SendSIGKILL", + "SetCredential", + "SetCredentialEncrypted", + "SetLoginEnvironment", + "Slice", + "SmackLabel", + "SmackLabelIPOut", + "SmackLabelIPin", + "SmackProcessLabel", + "SocketBindAllow", + "SocketBindDeny", + "SocketGroup", + "SocketMode", + "SocketProtocol", + "SocketUser", + "SourcePath", + "StandardError", + "StandardErrorFile", + "StandardErrorFileDescriptorName", + "StandardErrorFileToAppend", + "StandardErrorFileToTruncate", + "StandardInput", + "StandardInputData", + "StandardInputFile", + "StandardInputFileDescriptorName", + "StandardOutput", + "StandardOutputFile", + "StandardOutputFileDescriptorName", + "StandardOutputFileToAppend", + "StandardOutputFileToTruncate", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StartupAllowedCPUs", + "StartupAllowedMemoryNodes", + "StartupBlockIOWeight", + "StartupCPUShares", + "StartupCPUWeight", + "StartupIOWeight", + "StartupMemoryHigh", + "StartupMemoryLow", + "StartupMemoryMax", + "StartupMemorySwapMax", + "StartupMemoryZSwapMax", + "StateDirectory", + "StateDirectoryMode", + "StateDirectorySymlink", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SupplementaryGroups", + "SurviveFinalKillSignal", + "Symlinks", + "SyslogFacility", + "SyslogIdentifier", + "SyslogLevel", + "SyslogLevelPrefix", + "SystemCallArchitectures", + "SystemCallErrorNumber", + "SystemCallFilter", + "SystemCallLog", + "TCPCongestion", + "TTYColumns", + "TTYPath", + "TTYReset", + "TTYRows", + "TTYVHangup", + "TTYVTDisallocate", + "TasksAccounting", + "TasksMax", + "TasksMaxScale", + "TemporaryFileSystem", + "TimeoutUSec", + "TimerSlackNSec", + "Timestamping", + "Transparent", + "TriggerLimitBurst", + "TriggerLimitIntervalUSec", + "UMask", + "UnsetEnvironment", + "Upholds", + "User", + "UtmpIdentifier", + "UtmpMode", + "Wants", + "WantsMountsFor", + "WatchdogSignal", + "WorkingDirectory", + "Writable" + ], + "timer": [ + "AccuracySec", + "AccuracyUSec", + "AddRef", + "After", + "AllowIsolate", + "Asserts", + "Before", + "BindsTo", + "CollectMode", + "Conditions", + "Conflicts", + "DefaultDependencies", + "DeferReactivation", + "Description", + "Documentation", + "FailureAction", + "FailureActionExitStatus", + "FixedRandomDelay", + "IgnoreOnIsolate", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "Markers", + "OnActiveSec", + "OnBootSec", + "OnCalendar", + "OnClockChange", + "OnFailure", + "OnFailureJobMode", + "OnStartupSec", + "OnSuccess", + "OnSuccessJobMode", + "OnTimezoneChange", + "OnUnitActiveSec", + "OnUnitInactiveSec", + "PartOf", + "Persistent", + "PropagatesReloadTo", + "PropagatesStopTo", + "RandomizedDelayUSec", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "RemainAfterElapse", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "SourcePath", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SurviveFinalKillSignal", + "TimersCalendar", + "TimersMonotonic", + "Upholds", + "WakeSystem", + "Wants", + "WantsMountsFor" + ], + "path": [ + "AddRef", + "After", + "AllowIsolate", + "Asserts", + "Before", + "BindsTo", + "CollectMode", + "Conditions", + "Conflicts", + "DefaultDependencies", + "Description", + "DirectoryMode", + "Documentation", + "FailureAction", + "FailureActionExitStatus", + "IgnoreOnIsolate", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "MakeDirectory", + "Markers", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "PartOf", + "Paths", + "PropagatesReloadTo", + "PropagatesStopTo", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "SourcePath", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SurviveFinalKillSignal", + "TriggerLimitBurst", + "TriggerLimitIntervalUSec", + "Upholds", + "Wants", + "WantsMountsFor" + ], + "mount": [ + "AddRef", + "After", + "AllowIsolate", + "AllowedCPUs", + "AllowedMemoryNodes", + "AmbientCapabilities", + "AppArmorProfile", + "Asserts", + "BPFProgram", + "Before", + "BindLogSockets", + "BindPaths", + "BindReadOnlyPaths", + "BindsTo", + "BlockIOAccounting", + "BlockIODeviceWeight", + "BlockIOReadBandwidth", + "BlockIOWeight", + "BlockIOWriteBandwidth", + "CPUAccounting", + "CPUAffinity", + "CPUAffinityFromNUMA", + "CPUQuotaPerSecUSec", + "CPUQuotaPeriodUSec", + "CPUSchedulingPolicy", + "CPUSchedulingPriority", + "CPUSchedulingResetOnFork", + "CPUShares", + "CPUWeight", + "CacheDirectory", + "CacheDirectoryMode", + "CacheDirectorySymlink", + "CapabilityBoundingSet", + "CollectMode", + "Conditions", + "ConfigurationDirectory", + "ConfigurationDirectoryMode", + "Conflicts", + "CoredumpFilter", + "DefaultDependencies", + "DefaultMemoryLow", + "DefaultMemoryLowScale", + "DefaultMemoryMin", + "DefaultMemoryMinScale", + "DefaultStartupMemoryLow", + "Description", + "DeviceAllow", + "DevicePolicy", + "DirectoryMode", + "DisableControllers", + "Documentation", + "DynamicUser", + "Environment", + "EnvironmentFiles", + "ExecPaths", + "ExecSearchPath", + "ExtensionDirectories", + "ExtensionImagePolicy", + "ExtensionImages", + "FailureAction", + "FailureActionExitStatus", + "FinalKillSignal", + "ForceUnmount", + "Group", + "IOAccounting", + "IODeviceLatencyTargetUSec", + "IODeviceWeight", + "IOReadBandwidthMax", + "IOReadIOPSMax", + "IOSchedulingClass", + "IOSchedulingPriority", + "IOWeight", + "IOWriteBandwidthMax", + "IOWriteIOPSMax", + "IPAccounting", + "IPAddressAllow", + "IPAddressDeny", + "IPCNamespacePath", + "IPEgressFilterPath", + "IPIngressFilterPath", + "IgnoreOnIsolate", + "IgnoreSIGPIPE", + "ImportCredential", + "ImportCredentialEx", + "InaccessibleDirectories", + "InaccessiblePaths", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "KeyringMode", + "KillMode", + "KillSignal", + "LazyUnmount", + "LimitAS", + "LimitASSoft", + "LimitCORE", + "LimitCORESoft", + "LimitCPU", + "LimitCPUSoft", + "LimitDATA", + "LimitDATASoft", + "LimitFSIZE", + "LimitFSIZESoft", + "LimitLOCKS", + "LimitLOCKSSoft", + "LimitMEMLOCK", + "LimitMEMLOCKSoft", + "LimitMSGQUEUE", + "LimitMSGQUEUESoft", + "LimitNICE", + "LimitNICESoft", + "LimitNOFILE", + "LimitNOFILESoft", + "LimitNPROC", + "LimitNPROCSoft", + "LimitRSS", + "LimitRSSSoft", + "LimitRTPRIO", + "LimitRTPRIOSoft", + "LimitRTTIME", + "LimitRTTIMESoft", + "LimitSIGPENDING", + "LimitSIGPENDINGSoft", + "LimitSTACK", + "LimitSTACKSoft", + "LoadCredential", + "LoadCredentialEncrypted", + "LockPersonality", + "LogExtraFields", + "LogFilterPatterns", + "LogLevelMax", + "LogNamespace", + "LogRateLimitBurst", + "LogRateLimitIntervalUSec", + "LogsDirectory", + "LogsDirectoryMode", + "LogsDirectorySymlink", + "ManagedOOMPreference", + "Markers", + "MemoryAccounting", + "MemoryDenyWriteExecute", + "MemoryHigh", + "MemoryHighScale", + "MemoryKSM", + "MemoryLimit", + "MemoryLimitScale", + "MemoryLow", + "MemoryLowScale", + "MemoryMax", + "MemoryMaxScale", + "MemoryMin", + "MemoryMinScale", + "MemoryPressureThresholdUSec", + "MemoryPressureWatch", + "MemorySwapMax", + "MemorySwapMaxScale", + "MemoryZSwapMax", + "MemoryZSwapMaxScale", + "MemoryZSwapWriteback", + "MountAPIVFS", + "MountFlags", + "MountImagePolicy", + "MountImages", + "NFTSet", + "NUMAMask", + "NUMAPolicy", + "NetworkNamespacePath", + "Nice", + "NoExecPaths", + "NoNewPrivileges", + "NonBlocking", + "OOMScoreAdjust", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "Options", + "PAMName", + "PartOf", + "PassEnvironment", + "Personality", + "PrivateDevices", + "PrivateIPC", + "PrivateMounts", + "PrivateNetwork", + "PrivatePIDs", + "PrivateTmp", + "PrivateTmpEx", + "PrivateUsers", + "PrivateUsersEx", + "ProcSubset", + "PropagatesReloadTo", + "PropagatesStopTo", + "ProtectClock", + "ProtectControlGroups", + "ProtectControlGroupsEx", + "ProtectHome", + "ProtectHostname", + "ProtectKernelLogs", + "ProtectKernelModules", + "ProtectKernelTunables", + "ProtectProc", + "ProtectSystem", + "ReadOnlyDirectories", + "ReadOnlyPaths", + "ReadWriteDirectories", + "ReadWriteOnly", + "ReadWritePaths", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "RemoveIPC", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "RestartKillSignal", + "RestrictAddressFamilies", + "RestrictFileSystems", + "RestrictNamespaces", + "RestrictNetworkInterfaces", + "RestrictRealtime", + "RestrictSUIDSGID", + "RootDirectory", + "RootEphemeral", + "RootHash", + "RootHashPath", + "RootHashSignature", + "RootHashSignaturePath", + "RootImage", + "RootImageOptions", + "RootImagePolicy", + "RootVerity", + "RuntimeDirectory", + "RuntimeDirectoryMode", + "RuntimeDirectoryPreserve", + "RuntimeDirectorySymlink", + "SELinuxContext", + "SecureBits", + "SendSIGHUP", + "SendSIGKILL", + "SetCredential", + "SetCredentialEncrypted", + "SetLoginEnvironment", + "Slice", + "SloppyOptions", + "SmackProcessLabel", + "SocketBindAllow", + "SocketBindDeny", + "SourcePath", + "StandardError", + "StandardErrorFile", + "StandardErrorFileDescriptorName", + "StandardErrorFileToAppend", + "StandardErrorFileToTruncate", + "StandardInput", + "StandardInputData", + "StandardInputFile", + "StandardInputFileDescriptorName", + "StandardOutput", + "StandardOutputFile", + "StandardOutputFileDescriptorName", + "StandardOutputFileToAppend", + "StandardOutputFileToTruncate", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StartupAllowedCPUs", + "StartupAllowedMemoryNodes", + "StartupBlockIOWeight", + "StartupCPUShares", + "StartupCPUWeight", + "StartupIOWeight", + "StartupMemoryHigh", + "StartupMemoryLow", + "StartupMemoryMax", + "StartupMemorySwapMax", + "StartupMemoryZSwapMax", + "StateDirectory", + "StateDirectoryMode", + "StateDirectorySymlink", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SupplementaryGroups", + "SurviveFinalKillSignal", + "SyslogFacility", + "SyslogIdentifier", + "SyslogLevel", + "SyslogLevelPrefix", + "SystemCallArchitectures", + "SystemCallErrorNumber", + "SystemCallFilter", + "SystemCallLog", + "TTYColumns", + "TTYPath", + "TTYReset", + "TTYRows", + "TTYVHangup", + "TTYVTDisallocate", + "TasksAccounting", + "TasksMax", + "TasksMaxScale", + "TemporaryFileSystem", + "TimeoutUSec", + "TimerSlackNSec", + "Type", + "UMask", + "UnsetEnvironment", + "Upholds", + "User", + "UtmpIdentifier", + "UtmpMode", + "Wants", + "WantsMountsFor", + "WatchdogSignal", + "What", + "Where", + "WorkingDirectory" + ], + "automount": [ + "AddRef", + "After", + "AllowIsolate", + "Asserts", + "Before", + "BindsTo", + "CollectMode", + "Conditions", + "Conflicts", + "DefaultDependencies", + "Description", + "DirectoryMode", + "Documentation", + "ExtraOptions", + "FailureAction", + "FailureActionExitStatus", + "IgnoreOnIsolate", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "Markers", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "PartOf", + "PropagatesReloadTo", + "PropagatesStopTo", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "SourcePath", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SurviveFinalKillSignal", + "TimeoutIdleUSec", + "Upholds", + "Wants", + "WantsMountsFor", + "Where" + ], + "slice": [ + "AddRef", + "After", + "AllowIsolate", + "AllowedCPUs", + "AllowedMemoryNodes", + "Asserts", + "BPFProgram", + "Before", + "BindsTo", + "BlockIOAccounting", + "BlockIODeviceWeight", + "BlockIOReadBandwidth", + "BlockIOWeight", + "BlockIOWriteBandwidth", + "CPUAccounting", + "CPUQuotaPerSecUSec", + "CPUQuotaPeriodUSec", + "CPUShares", + "CPUWeight", + "CollectMode", + "Conditions", + "Conflicts", + "DefaultDependencies", + "DefaultMemoryLow", + "DefaultMemoryLowScale", + "DefaultMemoryMin", + "DefaultMemoryMinScale", + "DefaultStartupMemoryLow", + "Description", + "DeviceAllow", + "DevicePolicy", + "DisableControllers", + "Documentation", + "FailureAction", + "FailureActionExitStatus", + "IOAccounting", + "IODeviceLatencyTargetUSec", + "IODeviceWeight", + "IOReadBandwidthMax", + "IOReadIOPSMax", + "IOWeight", + "IOWriteBandwidthMax", + "IOWriteIOPSMax", + "IPAccounting", + "IPAddressAllow", + "IPAddressDeny", + "IPEgressFilterPath", + "IPIngressFilterPath", + "IgnoreOnIsolate", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "ManagedOOMMemoryPressure", + "ManagedOOMMemoryPressureDurationUSec", + "ManagedOOMMemoryPressureLimit", + "ManagedOOMPreference", + "ManagedOOMSwap", + "Markers", + "MemoryAccounting", + "MemoryHigh", + "MemoryHighScale", + "MemoryLimit", + "MemoryLimitScale", + "MemoryLow", + "MemoryLowScale", + "MemoryMax", + "MemoryMaxScale", + "MemoryMin", + "MemoryMinScale", + "MemoryPressureThresholdUSec", + "MemoryPressureWatch", + "MemorySwapMax", + "MemorySwapMaxScale", + "MemoryZSwapMax", + "MemoryZSwapMaxScale", + "MemoryZSwapWriteback", + "NFTSet", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "PartOf", + "PropagatesReloadTo", + "PropagatesStopTo", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "RestrictNetworkInterfaces", + "SocketBindAllow", + "SocketBindDeny", + "SourcePath", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StartupAllowedCPUs", + "StartupAllowedMemoryNodes", + "StartupBlockIOWeight", + "StartupCPUShares", + "StartupCPUWeight", + "StartupIOWeight", + "StartupMemoryHigh", + "StartupMemoryLow", + "StartupMemoryMax", + "StartupMemorySwapMax", + "StartupMemoryZSwapMax", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SurviveFinalKillSignal", + "TasksAccounting", + "TasksMax", + "TasksMaxScale", + "Upholds", + "Wants", + "WantsMountsFor" + ], + "scope": [ + "AddRef", + "After", + "AllowIsolate", + "AllowedCPUs", + "AllowedMemoryNodes", + "Asserts", + "BPFProgram", + "Before", + "BindsTo", + "BlockIOAccounting", + "BlockIODeviceWeight", + "BlockIOReadBandwidth", + "BlockIOWeight", + "BlockIOWriteBandwidth", + "CPUAccounting", + "CPUQuotaPerSecUSec", + "CPUQuotaPeriodUSec", + "CPUShares", + "CPUWeight", + "CollectMode", + "Conditions", + "Conflicts", + "Controller", + "CoredumpReceive", + "DefaultDependencies", + "DefaultMemoryLow", + "DefaultMemoryLowScale", + "DefaultMemoryMin", + "DefaultMemoryMinScale", + "DefaultStartupMemoryLow", + "Delegate", + "DelegateControllers", + "DelegateSubgroup", + "Description", + "DeviceAllow", + "DevicePolicy", + "DisableControllers", + "Documentation", + "FailureAction", + "FailureActionExitStatus", + "FinalKillSignal", + "Group", + "IOAccounting", + "IODeviceLatencyTargetUSec", + "IODeviceWeight", + "IOReadBandwidthMax", + "IOReadIOPSMax", + "IOWeight", + "IOWriteBandwidthMax", + "IOWriteIOPSMax", + "IPAccounting", + "IPAddressAllow", + "IPAddressDeny", + "IPEgressFilterPath", + "IPIngressFilterPath", + "IgnoreOnIsolate", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "KillMode", + "KillSignal", + "ManagedOOMMemoryPressure", + "ManagedOOMMemoryPressureDurationUSec", + "ManagedOOMMemoryPressureLimit", + "ManagedOOMPreference", + "ManagedOOMSwap", + "Markers", + "MemoryAccounting", + "MemoryHigh", + "MemoryHighScale", + "MemoryLimit", + "MemoryLimitScale", + "MemoryLow", + "MemoryLowScale", + "MemoryMax", + "MemoryMaxScale", + "MemoryMin", + "MemoryMinScale", + "MemoryPressureThresholdUSec", + "MemoryPressureWatch", + "MemorySwapMax", + "MemorySwapMaxScale", + "MemoryZSwapMax", + "MemoryZSwapMaxScale", + "MemoryZSwapWriteback", + "NFTSet", + "OOMPolicy", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "PIDFDs", + "PIDs", + "PartOf", + "PropagatesReloadTo", + "PropagatesStopTo", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "RestartKillSignal", + "RestrictNetworkInterfaces", + "RuntimeMaxUSec", + "RuntimeRandomizedExtraUSec", + "SendSIGHUP", + "SendSIGKILL", + "Slice", + "SocketBindAllow", + "SocketBindDeny", + "SourcePath", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StartupAllowedCPUs", + "StartupAllowedMemoryNodes", + "StartupBlockIOWeight", + "StartupCPUShares", + "StartupCPUWeight", + "StartupIOWeight", + "StartupMemoryHigh", + "StartupMemoryLow", + "StartupMemoryMax", + "StartupMemorySwapMax", + "StartupMemoryZSwapMax", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SurviveFinalKillSignal", + "TasksAccounting", + "TasksMax", + "TasksMaxScale", + "TimeoutStopUSec", + "Upholds", + "User", + "Wants", + "WantsMountsFor", + "WatchdogSignal" + ] + }, + "ignored": [], + "refused": { + "BoundBy": "Dependency type BoundBy may not be created transiently.", + "ConflictedBy": "Dependency type ConflictedBy may not be created transiently.", + "ConsistsOf": "Dependency type ConsistsOf may not be created transiently.", + "OnFailureOf": "Dependency type OnFailureOf may not be created transiently.", + "OnSuccessOf": "Dependency type OnSuccessOf may not be created transiently.", + "RequiredBy": "Dependency type RequiredBy may not be created transiently.", + "RequisiteOf": "Dependency type RequisiteOf may not be created transiently.", + "SliceOf": "Dependency type SliceOf may not be created transiently.", + "TriggeredBy": "Dependency type TriggeredBy may not be created transiently.", + "Triggers": "Dependency type Triggers may not be created transiently.", + "UpheldBy": "Dependency type UpheldBy may not be created transiently.", + "WantedBy": "Dependency type WantedBy may not be created transiently." + } +} diff --git a/tools/transient-properties/systemd-259.json b/tools/transient-properties/systemd-259.json new file mode 100644 index 0000000..bb02528 --- /dev/null +++ b/tools/transient-properties/systemd-259.json @@ -0,0 +1,2017 @@ +{ + "systemd": "systemd 259 (259.5-0ubuntu3)", + "properties": { + "Accept": "b", + "AcceptFileDescriptors": "b", + "AccuracySec": "t", + "AccuracyUSec": "t", + "AddRef": "b", + "After": "as", + "AllowIsolate": "b", + "AllowedCPUs": "ay", + "AllowedMemoryNodes": "ay", + "AmbientCapabilities": "t", + "AppArmorProfile": "(bs)", + "Asserts": "a(sbbs)", + "BPFDelegateAttachments": "s", + "BPFDelegateCommands": "s", + "BPFDelegateMaps": "s", + "BPFDelegatePrograms": "s", + "BPFProgram": "a(ss)", + "Backlog": "u", + "Before": "as", + "BindIPv6Only": "s", + "BindLogSockets": "b", + "BindPaths": "a(ssbt)", + "BindReadOnlyPaths": "a(ssbt)", + "BindToDevice": "s", + "BindsTo": "as", + "Broadcast": "b", + "BusName": "s", + "CPUAffinity": "ay", + "CPUAffinityFromNUMA": "b", + "CPUQuotaPerSecUSec": "t", + "CPUQuotaPeriodUSec": "t", + "CPUSchedulingPolicy": "i", + "CPUSchedulingPriority": "i", + "CPUSchedulingResetOnFork": "b", + "CPUWeight": "t", + "CacheDirectory": "as", + "CacheDirectoryAccounting": "b", + "CacheDirectoryMode": "u", + "CacheDirectoryQuota": "(tus)", + "CacheDirectorySymlink": "a(sst)", + "CapabilityBoundingSet": "t", + "CollectMode": "s", + "ConcurrencyHardMax": "u", + "ConcurrencySoftMax": "u", + "Conditions": "a(sbbs)", + "ConfigurationDirectory": "as", + "ConfigurationDirectoryMode": "u", + "Conflicts": "as", + "Controller": "s", + "CoredumpFilter": "t", + "CoredumpReceive": "b", + "DefaultDependencies": "b", + "DefaultMemoryLow": "t", + "DefaultMemoryLowScale": "u", + "DefaultMemoryMin": "t", + "DefaultMemoryMinScale": "u", + "DefaultStartupMemoryLow": "t", + "DeferAcceptUSec": "t", + "DeferReactivation": "b", + "DeferTrigger": "s", + "DeferTriggerMaxUSec": "t", + "Delegate": "b", + "DelegateControllers": "as", + "DelegateNamespaces": "t", + "DelegateSubgroup": "s", + "Description": "s", + "DeviceAllow": "a(ss)", + "DevicePolicy": "s", + "DirectoryMode": "u", + "DisableControllers": "as", + "Documentation": "as", + "DynamicUser": "b", + "Environment": "as", + "EnvironmentFiles": "a(sb)", + "ExecCondition": "a(sasb)", + "ExecConditionEx": "a(sasas)", + "ExecPaths": "as", + "ExecReload": "a(sasb)", + "ExecReloadEx": "a(sasas)", + "ExecReloadPost": "a(sasb)", + "ExecReloadPostEx": "a(sasas)", + "ExecSearchPath": "as", + "ExecStart": "a(sasb)", + "ExecStartChown": "a(sasb)", + "ExecStartEx": "a(sasas)", + "ExecStartPost": "a(sasb)", + "ExecStartPostEx": "a(sasas)", + "ExecStartPre": "a(sasb)", + "ExecStartPreEx": "a(sasas)", + "ExecStop": "a(sasb)", + "ExecStopEx": "a(sasas)", + "ExecStopPost": "a(sasb)", + "ExecStopPostEx": "a(sasas)", + "ExecStopPre": "a(sasb)", + "ExitType": "s", + "ExtensionDirectories": "as", + "ExtensionImagePolicy": "s", + "ExtensionImages": "a(sba(ss))", + "ExtraFileDescriptors": "a(hs)", + "ExtraOptions": "s", + "FailureAction": "s", + "FailureActionExitStatus": "i", + "FileDescriptorName": "s", + "FileDescriptorStoreMax": "u", + "FileDescriptorStorePreserve": "s", + "FinalKillSignal": "i", + "FixedRandomDelay": "b", + "FlushPending": "b", + "ForceUnmount": "b", + "FreeBind": "b", + "Group": "s", + "GuessMainPID": "b", + "IOAccounting": "b", + "IODeviceLatencyTargetUSec": "a(st)", + "IODeviceWeight": "a(st)", + "IOReadBandwidthMax": "a(st)", + "IOReadIOPSMax": "a(st)", + "IOSchedulingClass": "i", + "IOSchedulingPriority": "i", + "IOWeight": "t", + "IOWriteBandwidthMax": "a(st)", + "IOWriteIOPSMax": "a(st)", + "IPAccounting": "b", + "IPAddressAllow": "a(iayu)", + "IPAddressDeny": "a(iayu)", + "IPCNamespacePath": "s", + "IPEgressFilterPath": "as", + "IPIngressFilterPath": "as", + "IPTOS": "i", + "IPTTL": "i", + "IgnoreOnIsolate": "b", + "IgnoreSIGPIPE": "b", + "ImportCredential": "as", + "ImportCredentialEx": "a(ss)", + "InaccessibleDirectories": "as", + "InaccessiblePaths": "as", + "JobRunningTimeoutUSec": "t", + "JobTimeoutAction": "s", + "JobTimeoutRebootArgument": "s", + "JoinsNamespaceOf": "as", + "KeepAlive": "b", + "KeepAliveIntervalUSec": "t", + "KeepAliveProbes": "u", + "KeepAliveTimeUSec": "t", + "KeyringMode": "s", + "KillMode": "s", + "KillSignal": "i", + "LazyUnmount": "b", + "LimitAS": "t", + "LimitASSoft": "t", + "LimitCORE": "t", + "LimitCORESoft": "t", + "LimitCPU": "t", + "LimitCPUSoft": "t", + "LimitDATA": "t", + "LimitDATASoft": "t", + "LimitFSIZE": "t", + "LimitFSIZESoft": "t", + "LimitLOCKS": "t", + "LimitLOCKSSoft": "t", + "LimitMEMLOCK": "t", + "LimitMEMLOCKSoft": "t", + "LimitMSGQUEUE": "t", + "LimitMSGQUEUESoft": "t", + "LimitNICE": "t", + "LimitNICESoft": "t", + "LimitNOFILE": "t", + "LimitNOFILESoft": "t", + "LimitNPROC": "t", + "LimitNPROCSoft": "t", + "LimitRSS": "t", + "LimitRSSSoft": "t", + "LimitRTPRIO": "t", + "LimitRTPRIOSoft": "t", + "LimitRTTIME": "t", + "LimitRTTIMESoft": "t", + "LimitSIGPENDING": "t", + "LimitSIGPENDINGSoft": "t", + "LimitSTACK": "t", + "LimitSTACKSoft": "t", + "Listen": "a(ss)", + "LoadCredential": "a(ss)", + "LoadCredentialEncrypted": "a(ss)", + "LockPersonality": "b", + "LogExtraFields": "aay", + "LogFilterPatterns": "a(bs)", + "LogLevelMax": "i", + "LogNamespace": "s", + "LogRateLimitBurst": "u", + "LogRateLimitIntervalUSec": "t", + "LogsDirectory": "as", + "LogsDirectoryAccounting": "b", + "LogsDirectoryMode": "u", + "LogsDirectoryQuota": "(tus)", + "LogsDirectorySymlink": "a(sst)", + "MakeDirectory": "b", + "ManagedOOMMemoryPressure": "s", + "ManagedOOMMemoryPressureDurationUSec": "t", + "ManagedOOMMemoryPressureLimit": "u", + "ManagedOOMPreference": "s", + "ManagedOOMSwap": "s", + "Mark": "i", + "Markers": "as", + "MaxConnections": "u", + "MaxConnectionsPerSource": "u", + "MemoryAccounting": "b", + "MemoryDenyWriteExecute": "b", + "MemoryHigh": "t", + "MemoryHighScale": "u", + "MemoryKSM": "b", + "MemoryLow": "t", + "MemoryLowScale": "u", + "MemoryMax": "t", + "MemoryMaxScale": "u", + "MemoryMin": "t", + "MemoryMinScale": "u", + "MemoryPressureThresholdUSec": "t", + "MemoryPressureWatch": "s", + "MemorySwapMax": "t", + "MemorySwapMaxScale": "u", + "MemoryZSwapMax": "t", + "MemoryZSwapMaxScale": "u", + "MemoryZSwapWriteback": "b", + "MessageQueueMaxMessages": "x", + "MessageQueueMessageSize": "x", + "MountAPIVFS": "b", + "MountFlags": "t", + "MountImagePolicy": "s", + "MountImages": "a(ssba(ss))", + "NFTSet": "a(iiss)", + "NUMAMask": "ay", + "NUMAPolicy": "i", + "NetworkNamespacePath": "s", + "Nice": "i", + "NoDelay": "b", + "NoExecPaths": "as", + "NoNewPrivileges": "b", + "NonBlocking": "b", + "NotifyAccess": "s", + "OOMPolicy": "s", + "OOMScoreAdjust": "i", + "OnActiveSec": "t", + "OnBootSec": "t", + "OnCalendar": "s", + "OnClockChange": "b", + "OnFailure": "as", + "OnFailureJobMode": "s", + "OnStartupSec": "t", + "OnSuccess": "as", + "OnSuccessJobMode": "s", + "OnTimezoneChange": "b", + "OnUnitActiveSec": "t", + "OnUnitInactiveSec": "t", + "OpenFile": "a(sst)", + "Options": "s", + "PAMName": "s", + "PIDFDs": "ah", + "PIDFile": "s", + "PIDs": "au", + "PartOf": "as", + "PassCredentials": "b", + "PassEnvironment": "as", + "PassFileDescriptorsToExec": "b", + "PassPIDFD": "b", + "PassPacketInfo": "b", + "PassSecurity": "b", + "Paths": "a(ss)", + "PermissionsStartOnly": "b", + "Persistent": "b", + "Personality": "s", + "PipeSize": "t", + "PollLimitBurst": "u", + "PollLimitIntervalUSec": "t", + "Priority": "i", + "PrivateBPF": "s", + "PrivateDevices": "b", + "PrivateIPC": "b", + "PrivateMounts": "b", + "PrivateNetwork": "b", + "PrivatePIDs": "s", + "PrivateTmp": "b", + "PrivateTmpEx": "s", + "PrivateUsers": "b", + "PrivateUsersEx": "s", + "ProcSubset": "s", + "PropagatesReloadTo": "as", + "PropagatesStopTo": "as", + "ProtectClock": "b", + "ProtectControlGroups": "b", + "ProtectControlGroupsEx": "s", + "ProtectHome": "s", + "ProtectHostname": "b", + "ProtectHostnameEx": "(ss)", + "ProtectKernelLogs": "b", + "ProtectKernelModules": "b", + "ProtectKernelTunables": "b", + "ProtectProc": "s", + "ProtectSystem": "s", + "RandomizedDelayUSec": "t", + "RandomizedOffsetUSec": "t", + "ReadOnlyDirectories": "as", + "ReadOnlyPaths": "as", + "ReadWriteDirectories": "as", + "ReadWriteOnly": "b", + "ReadWritePaths": "as", + "RebootArgument": "s", + "ReceiveBuffer": "t", + "RefuseManualStart": "b", + "RefuseManualStop": "b", + "ReloadPropagatedFrom": "as", + "ReloadSignal": "i", + "RemainAfterElapse": "b", + "RemainAfterExit": "b", + "RemoveIPC": "b", + "RemoveOnStop": "b", + "Requires": "as", + "RequiresMountsFor": "as", + "RequiresOverridable": "as", + "Requisite": "as", + "RequisiteOverridable": "as", + "Restart": "s", + "RestartForceExitStatus": "(aiai)", + "RestartKillSignal": "i", + "RestartMaxDelayUSec": "t", + "RestartMode": "s", + "RestartPreventExitStatus": "(aiai)", + "RestartSteps": "u", + "RestartUSec": "t", + "RestrictAddressFamilies": "(bas)", + "RestrictFileSystems": "(bas)", + "RestrictNamespaces": "t", + "RestrictNetworkInterfaces": "(bas)", + "RestrictRealtime": "b", + "RestrictSUIDSGID": "b", + "ReusePort": "b", + "RootDirectory": "s", + "RootDirectoryFileDescriptor": "h", + "RootDirectoryStartOnly": "b", + "RootEphemeral": "b", + "RootHash": "ay", + "RootHashPath": "s", + "RootHashSignature": "ay", + "RootHashSignaturePath": "s", + "RootImage": "s", + "RootImageOptions": "a(ss)", + "RootImagePolicy": "s", + "RootVerity": "s", + "RuntimeDirectory": "as", + "RuntimeDirectoryMode": "u", + "RuntimeDirectoryPreserve": "s", + "RuntimeDirectorySymlink": "a(sst)", + "RuntimeMaxUSec": "t", + "RuntimeRandomizedExtraUSec": "t", + "SELinuxContext": "s", + "SELinuxContextFromNet": "b", + "SecureBits": "i", + "SendBuffer": "t", + "SendSIGHUP": "b", + "SendSIGKILL": "b", + "SetCredential": "a(say)", + "SetCredentialEncrypted": "a(say)", + "SetLoginEnvironment": "b", + "Slice": "s", + "SloppyOptions": "b", + "SmackLabel": "s", + "SmackLabelIPOut": "s", + "SmackLabelIPin": "s", + "SmackProcessLabel": "(bs)", + "SocketBindAllow": "a(iiqq)", + "SocketBindDeny": "a(iiqq)", + "SocketGroup": "s", + "SocketMode": "u", + "SocketProtocol": "i", + "SocketUser": "s", + "SourcePath": "s", + "StandardError": "s", + "StandardErrorFile": "s", + "StandardErrorFileDescriptor": "h", + "StandardErrorFileDescriptorName": "s", + "StandardErrorFileToAppend": "s", + "StandardErrorFileToTruncate": "s", + "StandardInput": "s", + "StandardInputData": "ay", + "StandardInputFile": "s", + "StandardInputFileDescriptor": "h", + "StandardInputFileDescriptorName": "s", + "StandardOutput": "s", + "StandardOutputFile": "s", + "StandardOutputFileDescriptor": "h", + "StandardOutputFileDescriptorName": "s", + "StandardOutputFileToAppend": "s", + "StandardOutputFileToTruncate": "s", + "StartLimitAction": "s", + "StartLimitBurst": "u", + "StartLimitIntervalUSec": "t", + "StartupAllowedCPUs": "ay", + "StartupAllowedMemoryNodes": "ay", + "StartupCPUWeight": "t", + "StartupIOWeight": "t", + "StartupMemoryHigh": "t", + "StartupMemoryLow": "t", + "StartupMemoryMax": "t", + "StartupMemorySwapMax": "t", + "StartupMemoryZSwapMax": "t", + "StateDirectory": "as", + "StateDirectoryAccounting": "b", + "StateDirectoryMode": "u", + "StateDirectoryQuota": "(tus)", + "StateDirectorySymlink": "a(sst)", + "StopPropagatedFrom": "as", + "StopWhenUnneeded": "b", + "SuccessAction": "s", + "SuccessActionExitStatus": "i", + "SuccessExitStatus": "(aiai)", + "SupplementaryGroups": "as", + "SurviveFinalKillSignal": "b", + "Symlinks": "as", + "SyslogFacility": "i", + "SyslogIdentifier": "s", + "SyslogLevel": "i", + "SyslogLevelPrefix": "b", + "SystemCallArchitectures": "as", + "SystemCallErrorNumber": "i", + "SystemCallFilter": "(bas)", + "SystemCallLog": "(bas)", + "TCPCongestion": "s", + "TTYColumns": "u", + "TTYPath": "s", + "TTYReset": "b", + "TTYRows": "u", + "TTYVHangup": "b", + "TTYVTDisallocate": "b", + "TasksAccounting": "b", + "TasksMax": "t", + "TasksMaxScale": "u", + "TemporaryFileSystem": "a(ss)", + "TimeoutAbortUSec": "t", + "TimeoutIdleUSec": "t", + "TimeoutStartFailureMode": "s", + "TimeoutStartUSec": "t", + "TimeoutStopFailureMode": "s", + "TimeoutStopUSec": "t", + "TimeoutUSec": "t", + "TimerSlackNSec": "t", + "TimersCalendar": "a(ss)", + "TimersMonotonic": "a(st)", + "Timestamping": "s", + "Transparent": "b", + "TriggerLimitBurst": "u", + "TriggerLimitIntervalUSec": "t", + "Type": "s", + "UMask": "u", + "USBFunctionDescriptors": "s", + "USBFunctionStrings": "s", + "UnsetEnvironment": "as", + "Upholds": "as", + "User": "s", + "UserNamespacePath": "s", + "UtmpIdentifier": "s", + "UtmpMode": "s", + "WakeSystem": "b", + "Wants": "as", + "WantsMountsFor": "as", + "WatchdogSignal": "i", + "WatchdogUSec": "t", + "What": "s", + "Where": "s", + "WorkingDirectory": "s", + "Writable": "b" + }, + "unit_types": { + "service": [ + "AddRef", + "After", + "AllowIsolate", + "AllowedCPUs", + "AllowedMemoryNodes", + "AmbientCapabilities", + "AppArmorProfile", + "Asserts", + "BPFDelegateAttachments", + "BPFDelegateCommands", + "BPFDelegateMaps", + "BPFDelegatePrograms", + "BPFProgram", + "Before", + "BindLogSockets", + "BindPaths", + "BindReadOnlyPaths", + "BindsTo", + "BusName", + "CPUAffinity", + "CPUAffinityFromNUMA", + "CPUQuotaPerSecUSec", + "CPUQuotaPeriodUSec", + "CPUSchedulingPolicy", + "CPUSchedulingPriority", + "CPUSchedulingResetOnFork", + "CPUWeight", + "CacheDirectory", + "CacheDirectoryAccounting", + "CacheDirectoryMode", + "CacheDirectoryQuota", + "CacheDirectorySymlink", + "CapabilityBoundingSet", + "CollectMode", + "Conditions", + "ConfigurationDirectory", + "ConfigurationDirectoryMode", + "Conflicts", + "CoredumpFilter", + "CoredumpReceive", + "DefaultDependencies", + "DefaultMemoryLow", + "DefaultMemoryLowScale", + "DefaultMemoryMin", + "DefaultMemoryMinScale", + "DefaultStartupMemoryLow", + "Delegate", + "DelegateControllers", + "DelegateNamespaces", + "DelegateSubgroup", + "Description", + "DeviceAllow", + "DevicePolicy", + "DisableControllers", + "Documentation", + "DynamicUser", + "Environment", + "EnvironmentFiles", + "ExecCondition", + "ExecConditionEx", + "ExecPaths", + "ExecReload", + "ExecReloadEx", + "ExecReloadPost", + "ExecReloadPostEx", + "ExecSearchPath", + "ExecStart", + "ExecStartEx", + "ExecStartPost", + "ExecStartPostEx", + "ExecStartPre", + "ExecStartPreEx", + "ExecStop", + "ExecStopEx", + "ExecStopPost", + "ExecStopPostEx", + "ExitType", + "ExtensionDirectories", + "ExtensionImagePolicy", + "ExtensionImages", + "ExtraFileDescriptors", + "FailureAction", + "FailureActionExitStatus", + "FileDescriptorStoreMax", + "FileDescriptorStorePreserve", + "FinalKillSignal", + "Group", + "GuessMainPID", + "IOAccounting", + "IODeviceLatencyTargetUSec", + "IODeviceWeight", + "IOReadBandwidthMax", + "IOReadIOPSMax", + "IOSchedulingClass", + "IOSchedulingPriority", + "IOWeight", + "IOWriteBandwidthMax", + "IOWriteIOPSMax", + "IPAccounting", + "IPAddressAllow", + "IPAddressDeny", + "IPCNamespacePath", + "IPEgressFilterPath", + "IPIngressFilterPath", + "IgnoreOnIsolate", + "IgnoreSIGPIPE", + "ImportCredential", + "ImportCredentialEx", + "InaccessibleDirectories", + "InaccessiblePaths", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "KeyringMode", + "KillMode", + "KillSignal", + "LimitAS", + "LimitASSoft", + "LimitCORE", + "LimitCORESoft", + "LimitCPU", + "LimitCPUSoft", + "LimitDATA", + "LimitDATASoft", + "LimitFSIZE", + "LimitFSIZESoft", + "LimitLOCKS", + "LimitLOCKSSoft", + "LimitMEMLOCK", + "LimitMEMLOCKSoft", + "LimitMSGQUEUE", + "LimitMSGQUEUESoft", + "LimitNICE", + "LimitNICESoft", + "LimitNOFILE", + "LimitNOFILESoft", + "LimitNPROC", + "LimitNPROCSoft", + "LimitRSS", + "LimitRSSSoft", + "LimitRTPRIO", + "LimitRTPRIOSoft", + "LimitRTTIME", + "LimitRTTIMESoft", + "LimitSIGPENDING", + "LimitSIGPENDINGSoft", + "LimitSTACK", + "LimitSTACKSoft", + "LoadCredential", + "LoadCredentialEncrypted", + "LockPersonality", + "LogExtraFields", + "LogFilterPatterns", + "LogLevelMax", + "LogNamespace", + "LogRateLimitBurst", + "LogRateLimitIntervalUSec", + "LogsDirectory", + "LogsDirectoryAccounting", + "LogsDirectoryMode", + "LogsDirectoryQuota", + "LogsDirectorySymlink", + "ManagedOOMMemoryPressure", + "ManagedOOMMemoryPressureDurationUSec", + "ManagedOOMMemoryPressureLimit", + "ManagedOOMPreference", + "ManagedOOMSwap", + "Markers", + "MemoryAccounting", + "MemoryDenyWriteExecute", + "MemoryHigh", + "MemoryHighScale", + "MemoryKSM", + "MemoryLow", + "MemoryLowScale", + "MemoryMax", + "MemoryMaxScale", + "MemoryMin", + "MemoryMinScale", + "MemoryPressureThresholdUSec", + "MemoryPressureWatch", + "MemorySwapMax", + "MemorySwapMaxScale", + "MemoryZSwapMax", + "MemoryZSwapMaxScale", + "MemoryZSwapWriteback", + "MountAPIVFS", + "MountFlags", + "MountImagePolicy", + "MountImages", + "NFTSet", + "NUMAMask", + "NUMAPolicy", + "NetworkNamespacePath", + "Nice", + "NoExecPaths", + "NoNewPrivileges", + "NonBlocking", + "NotifyAccess", + "OOMPolicy", + "OOMScoreAdjust", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "OpenFile", + "PAMName", + "PIDFile", + "PartOf", + "PassEnvironment", + "PermissionsStartOnly", + "Personality", + "PrivateBPF", + "PrivateDevices", + "PrivateIPC", + "PrivateMounts", + "PrivateNetwork", + "PrivatePIDs", + "PrivateTmp", + "PrivateTmpEx", + "PrivateUsers", + "PrivateUsersEx", + "ProcSubset", + "PropagatesReloadTo", + "PropagatesStopTo", + "ProtectClock", + "ProtectControlGroups", + "ProtectControlGroupsEx", + "ProtectHome", + "ProtectHostname", + "ProtectHostnameEx", + "ProtectKernelLogs", + "ProtectKernelModules", + "ProtectKernelTunables", + "ProtectProc", + "ProtectSystem", + "ReadOnlyDirectories", + "ReadOnlyPaths", + "ReadWriteDirectories", + "ReadWritePaths", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "ReloadSignal", + "RemainAfterExit", + "RemoveIPC", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "Restart", + "RestartForceExitStatus", + "RestartKillSignal", + "RestartMaxDelayUSec", + "RestartMode", + "RestartPreventExitStatus", + "RestartSteps", + "RestartUSec", + "RestrictAddressFamilies", + "RestrictFileSystems", + "RestrictNamespaces", + "RestrictNetworkInterfaces", + "RestrictRealtime", + "RestrictSUIDSGID", + "RootDirectory", + "RootDirectoryFileDescriptor", + "RootDirectoryStartOnly", + "RootEphemeral", + "RootHash", + "RootHashPath", + "RootHashSignature", + "RootHashSignaturePath", + "RootImage", + "RootImageOptions", + "RootImagePolicy", + "RootVerity", + "RuntimeDirectory", + "RuntimeDirectoryMode", + "RuntimeDirectoryPreserve", + "RuntimeDirectorySymlink", + "RuntimeMaxUSec", + "RuntimeRandomizedExtraUSec", + "SELinuxContext", + "SecureBits", + "SendSIGHUP", + "SendSIGKILL", + "SetCredential", + "SetCredentialEncrypted", + "SetLoginEnvironment", + "Slice", + "SmackProcessLabel", + "SocketBindAllow", + "SocketBindDeny", + "SourcePath", + "StandardError", + "StandardErrorFile", + "StandardErrorFileDescriptor", + "StandardErrorFileDescriptorName", + "StandardErrorFileToAppend", + "StandardErrorFileToTruncate", + "StandardInput", + "StandardInputData", + "StandardInputFile", + "StandardInputFileDescriptor", + "StandardInputFileDescriptorName", + "StandardOutput", + "StandardOutputFile", + "StandardOutputFileDescriptor", + "StandardOutputFileDescriptorName", + "StandardOutputFileToAppend", + "StandardOutputFileToTruncate", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StartupAllowedCPUs", + "StartupAllowedMemoryNodes", + "StartupCPUWeight", + "StartupIOWeight", + "StartupMemoryHigh", + "StartupMemoryLow", + "StartupMemoryMax", + "StartupMemorySwapMax", + "StartupMemoryZSwapMax", + "StateDirectory", + "StateDirectoryAccounting", + "StateDirectoryMode", + "StateDirectoryQuota", + "StateDirectorySymlink", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SuccessExitStatus", + "SupplementaryGroups", + "SurviveFinalKillSignal", + "SyslogFacility", + "SyslogIdentifier", + "SyslogLevel", + "SyslogLevelPrefix", + "SystemCallArchitectures", + "SystemCallErrorNumber", + "SystemCallFilter", + "SystemCallLog", + "TTYColumns", + "TTYPath", + "TTYReset", + "TTYRows", + "TTYVHangup", + "TTYVTDisallocate", + "TasksAccounting", + "TasksMax", + "TasksMaxScale", + "TemporaryFileSystem", + "TimeoutAbortUSec", + "TimeoutStartFailureMode", + "TimeoutStartUSec", + "TimeoutStopFailureMode", + "TimeoutStopUSec", + "TimerSlackNSec", + "Type", + "UMask", + "USBFunctionDescriptors", + "USBFunctionStrings", + "UnsetEnvironment", + "Upholds", + "User", + "UserNamespacePath", + "UtmpIdentifier", + "UtmpMode", + "Wants", + "WantsMountsFor", + "WatchdogSignal", + "WatchdogUSec", + "WorkingDirectory" + ], + "socket": [ + "Accept", + "AcceptFileDescriptors", + "AddRef", + "After", + "AllowIsolate", + "AllowedCPUs", + "AllowedMemoryNodes", + "AmbientCapabilities", + "AppArmorProfile", + "Asserts", + "BPFDelegateAttachments", + "BPFDelegateCommands", + "BPFDelegateMaps", + "BPFDelegatePrograms", + "BPFProgram", + "Backlog", + "Before", + "BindIPv6Only", + "BindLogSockets", + "BindPaths", + "BindReadOnlyPaths", + "BindToDevice", + "BindsTo", + "Broadcast", + "CPUAffinity", + "CPUAffinityFromNUMA", + "CPUQuotaPerSecUSec", + "CPUQuotaPeriodUSec", + "CPUSchedulingPolicy", + "CPUSchedulingPriority", + "CPUSchedulingResetOnFork", + "CPUWeight", + "CacheDirectory", + "CacheDirectoryAccounting", + "CacheDirectoryMode", + "CacheDirectoryQuota", + "CacheDirectorySymlink", + "CapabilityBoundingSet", + "CollectMode", + "Conditions", + "ConfigurationDirectory", + "ConfigurationDirectoryMode", + "Conflicts", + "CoredumpFilter", + "DefaultDependencies", + "DefaultMemoryLow", + "DefaultMemoryLowScale", + "DefaultMemoryMin", + "DefaultMemoryMinScale", + "DefaultStartupMemoryLow", + "DeferAcceptUSec", + "DeferTrigger", + "DeferTriggerMaxUSec", + "DelegateNamespaces", + "Description", + "DeviceAllow", + "DevicePolicy", + "DirectoryMode", + "DisableControllers", + "Documentation", + "DynamicUser", + "Environment", + "EnvironmentFiles", + "ExecPaths", + "ExecSearchPath", + "ExecStartChown", + "ExecStartPost", + "ExecStartPre", + "ExecStopPost", + "ExecStopPre", + "ExtensionDirectories", + "ExtensionImagePolicy", + "ExtensionImages", + "FailureAction", + "FailureActionExitStatus", + "FileDescriptorName", + "FinalKillSignal", + "FlushPending", + "FreeBind", + "Group", + "IOAccounting", + "IODeviceLatencyTargetUSec", + "IODeviceWeight", + "IOReadBandwidthMax", + "IOReadIOPSMax", + "IOSchedulingClass", + "IOSchedulingPriority", + "IOWeight", + "IOWriteBandwidthMax", + "IOWriteIOPSMax", + "IPAccounting", + "IPAddressAllow", + "IPAddressDeny", + "IPCNamespacePath", + "IPEgressFilterPath", + "IPIngressFilterPath", + "IPTOS", + "IPTTL", + "IgnoreOnIsolate", + "IgnoreSIGPIPE", + "ImportCredential", + "ImportCredentialEx", + "InaccessibleDirectories", + "InaccessiblePaths", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "KeepAlive", + "KeepAliveIntervalUSec", + "KeepAliveProbes", + "KeepAliveTimeUSec", + "KeyringMode", + "KillMode", + "KillSignal", + "LimitAS", + "LimitASSoft", + "LimitCORE", + "LimitCORESoft", + "LimitCPU", + "LimitCPUSoft", + "LimitDATA", + "LimitDATASoft", + "LimitFSIZE", + "LimitFSIZESoft", + "LimitLOCKS", + "LimitLOCKSSoft", + "LimitMEMLOCK", + "LimitMEMLOCKSoft", + "LimitMSGQUEUE", + "LimitMSGQUEUESoft", + "LimitNICE", + "LimitNICESoft", + "LimitNOFILE", + "LimitNOFILESoft", + "LimitNPROC", + "LimitNPROCSoft", + "LimitRSS", + "LimitRSSSoft", + "LimitRTPRIO", + "LimitRTPRIOSoft", + "LimitRTTIME", + "LimitRTTIMESoft", + "LimitSIGPENDING", + "LimitSIGPENDINGSoft", + "LimitSTACK", + "LimitSTACKSoft", + "Listen", + "LoadCredential", + "LoadCredentialEncrypted", + "LockPersonality", + "LogExtraFields", + "LogFilterPatterns", + "LogLevelMax", + "LogNamespace", + "LogRateLimitBurst", + "LogRateLimitIntervalUSec", + "LogsDirectory", + "LogsDirectoryAccounting", + "LogsDirectoryMode", + "LogsDirectoryQuota", + "LogsDirectorySymlink", + "ManagedOOMPreference", + "Mark", + "Markers", + "MaxConnections", + "MaxConnectionsPerSource", + "MemoryAccounting", + "MemoryDenyWriteExecute", + "MemoryHigh", + "MemoryHighScale", + "MemoryKSM", + "MemoryLow", + "MemoryLowScale", + "MemoryMax", + "MemoryMaxScale", + "MemoryMin", + "MemoryMinScale", + "MemoryPressureThresholdUSec", + "MemoryPressureWatch", + "MemorySwapMax", + "MemorySwapMaxScale", + "MemoryZSwapMax", + "MemoryZSwapMaxScale", + "MemoryZSwapWriteback", + "MessageQueueMaxMessages", + "MessageQueueMessageSize", + "MountAPIVFS", + "MountFlags", + "MountImagePolicy", + "MountImages", + "NFTSet", + "NUMAMask", + "NUMAPolicy", + "NetworkNamespacePath", + "Nice", + "NoDelay", + "NoExecPaths", + "NoNewPrivileges", + "NonBlocking", + "OOMScoreAdjust", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "PAMName", + "PartOf", + "PassCredentials", + "PassEnvironment", + "PassFileDescriptorsToExec", + "PassPIDFD", + "PassPacketInfo", + "PassSecurity", + "Personality", + "PipeSize", + "PollLimitBurst", + "PollLimitIntervalUSec", + "Priority", + "PrivateBPF", + "PrivateDevices", + "PrivateIPC", + "PrivateMounts", + "PrivateNetwork", + "PrivatePIDs", + "PrivateTmp", + "PrivateTmpEx", + "PrivateUsers", + "PrivateUsersEx", + "ProcSubset", + "PropagatesReloadTo", + "PropagatesStopTo", + "ProtectClock", + "ProtectControlGroups", + "ProtectControlGroupsEx", + "ProtectHome", + "ProtectHostname", + "ProtectHostnameEx", + "ProtectKernelLogs", + "ProtectKernelModules", + "ProtectKernelTunables", + "ProtectProc", + "ProtectSystem", + "ReadOnlyDirectories", + "ReadOnlyPaths", + "ReadWriteDirectories", + "ReadWritePaths", + "RebootArgument", + "ReceiveBuffer", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "RemoveIPC", + "RemoveOnStop", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "RestartKillSignal", + "RestrictAddressFamilies", + "RestrictFileSystems", + "RestrictNamespaces", + "RestrictNetworkInterfaces", + "RestrictRealtime", + "RestrictSUIDSGID", + "ReusePort", + "RootDirectory", + "RootEphemeral", + "RootHash", + "RootHashPath", + "RootHashSignature", + "RootHashSignaturePath", + "RootImage", + "RootImageOptions", + "RootImagePolicy", + "RootVerity", + "RuntimeDirectory", + "RuntimeDirectoryMode", + "RuntimeDirectoryPreserve", + "RuntimeDirectorySymlink", + "SELinuxContext", + "SELinuxContextFromNet", + "SecureBits", + "SendBuffer", + "SendSIGHUP", + "SendSIGKILL", + "SetCredential", + "SetCredentialEncrypted", + "SetLoginEnvironment", + "Slice", + "SmackLabel", + "SmackLabelIPOut", + "SmackLabelIPin", + "SmackProcessLabel", + "SocketBindAllow", + "SocketBindDeny", + "SocketGroup", + "SocketMode", + "SocketProtocol", + "SocketUser", + "SourcePath", + "StandardError", + "StandardErrorFile", + "StandardErrorFileDescriptorName", + "StandardErrorFileToAppend", + "StandardErrorFileToTruncate", + "StandardInput", + "StandardInputData", + "StandardInputFile", + "StandardInputFileDescriptorName", + "StandardOutput", + "StandardOutputFile", + "StandardOutputFileDescriptorName", + "StandardOutputFileToAppend", + "StandardOutputFileToTruncate", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StartupAllowedCPUs", + "StartupAllowedMemoryNodes", + "StartupCPUWeight", + "StartupIOWeight", + "StartupMemoryHigh", + "StartupMemoryLow", + "StartupMemoryMax", + "StartupMemorySwapMax", + "StartupMemoryZSwapMax", + "StateDirectory", + "StateDirectoryAccounting", + "StateDirectoryMode", + "StateDirectoryQuota", + "StateDirectorySymlink", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SupplementaryGroups", + "SurviveFinalKillSignal", + "Symlinks", + "SyslogFacility", + "SyslogIdentifier", + "SyslogLevel", + "SyslogLevelPrefix", + "SystemCallArchitectures", + "SystemCallErrorNumber", + "SystemCallFilter", + "SystemCallLog", + "TCPCongestion", + "TTYColumns", + "TTYPath", + "TTYReset", + "TTYRows", + "TTYVHangup", + "TTYVTDisallocate", + "TasksAccounting", + "TasksMax", + "TasksMaxScale", + "TemporaryFileSystem", + "TimeoutUSec", + "TimerSlackNSec", + "Timestamping", + "Transparent", + "TriggerLimitBurst", + "TriggerLimitIntervalUSec", + "UMask", + "UnsetEnvironment", + "Upholds", + "User", + "UserNamespacePath", + "UtmpIdentifier", + "UtmpMode", + "Wants", + "WantsMountsFor", + "WatchdogSignal", + "WorkingDirectory", + "Writable" + ], + "timer": [ + "AccuracySec", + "AccuracyUSec", + "AddRef", + "After", + "AllowIsolate", + "Asserts", + "Before", + "BindsTo", + "CollectMode", + "Conditions", + "Conflicts", + "DefaultDependencies", + "DeferReactivation", + "Description", + "Documentation", + "FailureAction", + "FailureActionExitStatus", + "FixedRandomDelay", + "IgnoreOnIsolate", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "Markers", + "OnActiveSec", + "OnBootSec", + "OnCalendar", + "OnClockChange", + "OnFailure", + "OnFailureJobMode", + "OnStartupSec", + "OnSuccess", + "OnSuccessJobMode", + "OnTimezoneChange", + "OnUnitActiveSec", + "OnUnitInactiveSec", + "PartOf", + "Persistent", + "PropagatesReloadTo", + "PropagatesStopTo", + "RandomizedDelayUSec", + "RandomizedOffsetUSec", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "RemainAfterElapse", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "SourcePath", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SurviveFinalKillSignal", + "TimersCalendar", + "TimersMonotonic", + "Upholds", + "WakeSystem", + "Wants", + "WantsMountsFor" + ], + "path": [ + "AddRef", + "After", + "AllowIsolate", + "Asserts", + "Before", + "BindsTo", + "CollectMode", + "Conditions", + "Conflicts", + "DefaultDependencies", + "Description", + "DirectoryMode", + "Documentation", + "FailureAction", + "FailureActionExitStatus", + "IgnoreOnIsolate", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "MakeDirectory", + "Markers", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "PartOf", + "Paths", + "PropagatesReloadTo", + "PropagatesStopTo", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "SourcePath", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SurviveFinalKillSignal", + "TriggerLimitBurst", + "TriggerLimitIntervalUSec", + "Upholds", + "Wants", + "WantsMountsFor" + ], + "mount": [ + "AddRef", + "After", + "AllowIsolate", + "AllowedCPUs", + "AllowedMemoryNodes", + "AmbientCapabilities", + "AppArmorProfile", + "Asserts", + "BPFDelegateAttachments", + "BPFDelegateCommands", + "BPFDelegateMaps", + "BPFDelegatePrograms", + "BPFProgram", + "Before", + "BindLogSockets", + "BindPaths", + "BindReadOnlyPaths", + "BindsTo", + "CPUAffinity", + "CPUAffinityFromNUMA", + "CPUQuotaPerSecUSec", + "CPUQuotaPeriodUSec", + "CPUSchedulingPolicy", + "CPUSchedulingPriority", + "CPUSchedulingResetOnFork", + "CPUWeight", + "CacheDirectory", + "CacheDirectoryAccounting", + "CacheDirectoryMode", + "CacheDirectoryQuota", + "CacheDirectorySymlink", + "CapabilityBoundingSet", + "CollectMode", + "Conditions", + "ConfigurationDirectory", + "ConfigurationDirectoryMode", + "Conflicts", + "CoredumpFilter", + "DefaultDependencies", + "DefaultMemoryLow", + "DefaultMemoryLowScale", + "DefaultMemoryMin", + "DefaultMemoryMinScale", + "DefaultStartupMemoryLow", + "DelegateNamespaces", + "Description", + "DeviceAllow", + "DevicePolicy", + "DirectoryMode", + "DisableControllers", + "Documentation", + "DynamicUser", + "Environment", + "EnvironmentFiles", + "ExecPaths", + "ExecSearchPath", + "ExtensionDirectories", + "ExtensionImagePolicy", + "ExtensionImages", + "FailureAction", + "FailureActionExitStatus", + "FinalKillSignal", + "ForceUnmount", + "Group", + "IOAccounting", + "IODeviceLatencyTargetUSec", + "IODeviceWeight", + "IOReadBandwidthMax", + "IOReadIOPSMax", + "IOSchedulingClass", + "IOSchedulingPriority", + "IOWeight", + "IOWriteBandwidthMax", + "IOWriteIOPSMax", + "IPAccounting", + "IPAddressAllow", + "IPAddressDeny", + "IPCNamespacePath", + "IPEgressFilterPath", + "IPIngressFilterPath", + "IgnoreOnIsolate", + "IgnoreSIGPIPE", + "ImportCredential", + "ImportCredentialEx", + "InaccessibleDirectories", + "InaccessiblePaths", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "KeyringMode", + "KillMode", + "KillSignal", + "LazyUnmount", + "LimitAS", + "LimitASSoft", + "LimitCORE", + "LimitCORESoft", + "LimitCPU", + "LimitCPUSoft", + "LimitDATA", + "LimitDATASoft", + "LimitFSIZE", + "LimitFSIZESoft", + "LimitLOCKS", + "LimitLOCKSSoft", + "LimitMEMLOCK", + "LimitMEMLOCKSoft", + "LimitMSGQUEUE", + "LimitMSGQUEUESoft", + "LimitNICE", + "LimitNICESoft", + "LimitNOFILE", + "LimitNOFILESoft", + "LimitNPROC", + "LimitNPROCSoft", + "LimitRSS", + "LimitRSSSoft", + "LimitRTPRIO", + "LimitRTPRIOSoft", + "LimitRTTIME", + "LimitRTTIMESoft", + "LimitSIGPENDING", + "LimitSIGPENDINGSoft", + "LimitSTACK", + "LimitSTACKSoft", + "LoadCredential", + "LoadCredentialEncrypted", + "LockPersonality", + "LogExtraFields", + "LogFilterPatterns", + "LogLevelMax", + "LogNamespace", + "LogRateLimitBurst", + "LogRateLimitIntervalUSec", + "LogsDirectory", + "LogsDirectoryAccounting", + "LogsDirectoryMode", + "LogsDirectoryQuota", + "LogsDirectorySymlink", + "ManagedOOMPreference", + "Markers", + "MemoryAccounting", + "MemoryDenyWriteExecute", + "MemoryHigh", + "MemoryHighScale", + "MemoryKSM", + "MemoryLow", + "MemoryLowScale", + "MemoryMax", + "MemoryMaxScale", + "MemoryMin", + "MemoryMinScale", + "MemoryPressureThresholdUSec", + "MemoryPressureWatch", + "MemorySwapMax", + "MemorySwapMaxScale", + "MemoryZSwapMax", + "MemoryZSwapMaxScale", + "MemoryZSwapWriteback", + "MountAPIVFS", + "MountFlags", + "MountImagePolicy", + "MountImages", + "NFTSet", + "NUMAMask", + "NUMAPolicy", + "NetworkNamespacePath", + "Nice", + "NoExecPaths", + "NoNewPrivileges", + "NonBlocking", + "OOMScoreAdjust", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "Options", + "PAMName", + "PartOf", + "PassEnvironment", + "Personality", + "PrivateBPF", + "PrivateDevices", + "PrivateIPC", + "PrivateMounts", + "PrivateNetwork", + "PrivatePIDs", + "PrivateTmp", + "PrivateTmpEx", + "PrivateUsers", + "PrivateUsersEx", + "ProcSubset", + "PropagatesReloadTo", + "PropagatesStopTo", + "ProtectClock", + "ProtectControlGroups", + "ProtectControlGroupsEx", + "ProtectHome", + "ProtectHostname", + "ProtectHostnameEx", + "ProtectKernelLogs", + "ProtectKernelModules", + "ProtectKernelTunables", + "ProtectProc", + "ProtectSystem", + "ReadOnlyDirectories", + "ReadOnlyPaths", + "ReadWriteDirectories", + "ReadWriteOnly", + "ReadWritePaths", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "RemoveIPC", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "RestartKillSignal", + "RestrictAddressFamilies", + "RestrictFileSystems", + "RestrictNamespaces", + "RestrictNetworkInterfaces", + "RestrictRealtime", + "RestrictSUIDSGID", + "RootDirectory", + "RootEphemeral", + "RootHash", + "RootHashPath", + "RootHashSignature", + "RootHashSignaturePath", + "RootImage", + "RootImageOptions", + "RootImagePolicy", + "RootVerity", + "RuntimeDirectory", + "RuntimeDirectoryMode", + "RuntimeDirectoryPreserve", + "RuntimeDirectorySymlink", + "SELinuxContext", + "SecureBits", + "SendSIGHUP", + "SendSIGKILL", + "SetCredential", + "SetCredentialEncrypted", + "SetLoginEnvironment", + "Slice", + "SloppyOptions", + "SmackProcessLabel", + "SocketBindAllow", + "SocketBindDeny", + "SourcePath", + "StandardError", + "StandardErrorFile", + "StandardErrorFileDescriptorName", + "StandardErrorFileToAppend", + "StandardErrorFileToTruncate", + "StandardInput", + "StandardInputData", + "StandardInputFile", + "StandardInputFileDescriptorName", + "StandardOutput", + "StandardOutputFile", + "StandardOutputFileDescriptorName", + "StandardOutputFileToAppend", + "StandardOutputFileToTruncate", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StartupAllowedCPUs", + "StartupAllowedMemoryNodes", + "StartupCPUWeight", + "StartupIOWeight", + "StartupMemoryHigh", + "StartupMemoryLow", + "StartupMemoryMax", + "StartupMemorySwapMax", + "StartupMemoryZSwapMax", + "StateDirectory", + "StateDirectoryAccounting", + "StateDirectoryMode", + "StateDirectoryQuota", + "StateDirectorySymlink", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SupplementaryGroups", + "SurviveFinalKillSignal", + "SyslogFacility", + "SyslogIdentifier", + "SyslogLevel", + "SyslogLevelPrefix", + "SystemCallArchitectures", + "SystemCallErrorNumber", + "SystemCallFilter", + "SystemCallLog", + "TTYColumns", + "TTYPath", + "TTYReset", + "TTYRows", + "TTYVHangup", + "TTYVTDisallocate", + "TasksAccounting", + "TasksMax", + "TasksMaxScale", + "TemporaryFileSystem", + "TimeoutUSec", + "TimerSlackNSec", + "Type", + "UMask", + "UnsetEnvironment", + "Upholds", + "User", + "UserNamespacePath", + "UtmpIdentifier", + "UtmpMode", + "Wants", + "WantsMountsFor", + "WatchdogSignal", + "What", + "Where", + "WorkingDirectory" + ], + "automount": [ + "AddRef", + "After", + "AllowIsolate", + "Asserts", + "Before", + "BindsTo", + "CollectMode", + "Conditions", + "Conflicts", + "DefaultDependencies", + "Description", + "DirectoryMode", + "Documentation", + "ExtraOptions", + "FailureAction", + "FailureActionExitStatus", + "IgnoreOnIsolate", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "Markers", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "PartOf", + "PropagatesReloadTo", + "PropagatesStopTo", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "SourcePath", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SurviveFinalKillSignal", + "TimeoutIdleUSec", + "Upholds", + "Wants", + "WantsMountsFor", + "Where" + ], + "slice": [ + "AddRef", + "After", + "AllowIsolate", + "AllowedCPUs", + "AllowedMemoryNodes", + "Asserts", + "BPFProgram", + "Before", + "BindsTo", + "CPUQuotaPerSecUSec", + "CPUQuotaPeriodUSec", + "CPUWeight", + "CollectMode", + "ConcurrencyHardMax", + "ConcurrencySoftMax", + "Conditions", + "Conflicts", + "DefaultDependencies", + "DefaultMemoryLow", + "DefaultMemoryLowScale", + "DefaultMemoryMin", + "DefaultMemoryMinScale", + "DefaultStartupMemoryLow", + "Description", + "DeviceAllow", + "DevicePolicy", + "DisableControllers", + "Documentation", + "FailureAction", + "FailureActionExitStatus", + "IOAccounting", + "IODeviceLatencyTargetUSec", + "IODeviceWeight", + "IOReadBandwidthMax", + "IOReadIOPSMax", + "IOWeight", + "IOWriteBandwidthMax", + "IOWriteIOPSMax", + "IPAccounting", + "IPAddressAllow", + "IPAddressDeny", + "IPEgressFilterPath", + "IPIngressFilterPath", + "IgnoreOnIsolate", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "ManagedOOMMemoryPressure", + "ManagedOOMMemoryPressureDurationUSec", + "ManagedOOMMemoryPressureLimit", + "ManagedOOMPreference", + "ManagedOOMSwap", + "Markers", + "MemoryAccounting", + "MemoryHigh", + "MemoryHighScale", + "MemoryLow", + "MemoryLowScale", + "MemoryMax", + "MemoryMaxScale", + "MemoryMin", + "MemoryMinScale", + "MemoryPressureThresholdUSec", + "MemoryPressureWatch", + "MemorySwapMax", + "MemorySwapMaxScale", + "MemoryZSwapMax", + "MemoryZSwapMaxScale", + "MemoryZSwapWriteback", + "NFTSet", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "PartOf", + "PropagatesReloadTo", + "PropagatesStopTo", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "RestrictNetworkInterfaces", + "SocketBindAllow", + "SocketBindDeny", + "SourcePath", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StartupAllowedCPUs", + "StartupAllowedMemoryNodes", + "StartupCPUWeight", + "StartupIOWeight", + "StartupMemoryHigh", + "StartupMemoryLow", + "StartupMemoryMax", + "StartupMemorySwapMax", + "StartupMemoryZSwapMax", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SurviveFinalKillSignal", + "TasksAccounting", + "TasksMax", + "TasksMaxScale", + "Upholds", + "Wants", + "WantsMountsFor" + ], + "scope": [ + "AddRef", + "After", + "AllowIsolate", + "AllowedCPUs", + "AllowedMemoryNodes", + "Asserts", + "BPFProgram", + "Before", + "BindsTo", + "CPUQuotaPerSecUSec", + "CPUQuotaPeriodUSec", + "CPUWeight", + "CollectMode", + "Conditions", + "Conflicts", + "Controller", + "CoredumpReceive", + "DefaultDependencies", + "DefaultMemoryLow", + "DefaultMemoryLowScale", + "DefaultMemoryMin", + "DefaultMemoryMinScale", + "DefaultStartupMemoryLow", + "Delegate", + "DelegateControllers", + "DelegateSubgroup", + "Description", + "DeviceAllow", + "DevicePolicy", + "DisableControllers", + "Documentation", + "FailureAction", + "FailureActionExitStatus", + "FinalKillSignal", + "Group", + "IOAccounting", + "IODeviceLatencyTargetUSec", + "IODeviceWeight", + "IOReadBandwidthMax", + "IOReadIOPSMax", + "IOWeight", + "IOWriteBandwidthMax", + "IOWriteIOPSMax", + "IPAccounting", + "IPAddressAllow", + "IPAddressDeny", + "IPEgressFilterPath", + "IPIngressFilterPath", + "IgnoreOnIsolate", + "JobRunningTimeoutUSec", + "JobTimeoutAction", + "JobTimeoutRebootArgument", + "JoinsNamespaceOf", + "KillMode", + "KillSignal", + "ManagedOOMMemoryPressure", + "ManagedOOMMemoryPressureDurationUSec", + "ManagedOOMMemoryPressureLimit", + "ManagedOOMPreference", + "ManagedOOMSwap", + "Markers", + "MemoryAccounting", + "MemoryHigh", + "MemoryHighScale", + "MemoryLow", + "MemoryLowScale", + "MemoryMax", + "MemoryMaxScale", + "MemoryMin", + "MemoryMinScale", + "MemoryPressureThresholdUSec", + "MemoryPressureWatch", + "MemorySwapMax", + "MemorySwapMaxScale", + "MemoryZSwapMax", + "MemoryZSwapMaxScale", + "MemoryZSwapWriteback", + "NFTSet", + "OOMPolicy", + "OnFailure", + "OnFailureJobMode", + "OnSuccess", + "OnSuccessJobMode", + "PIDFDs", + "PIDs", + "PartOf", + "PropagatesReloadTo", + "PropagatesStopTo", + "RebootArgument", + "RefuseManualStart", + "RefuseManualStop", + "ReloadPropagatedFrom", + "Requires", + "RequiresMountsFor", + "RequiresOverridable", + "Requisite", + "RequisiteOverridable", + "RestartKillSignal", + "RestrictNetworkInterfaces", + "RuntimeMaxUSec", + "RuntimeRandomizedExtraUSec", + "SendSIGHUP", + "SendSIGKILL", + "Slice", + "SocketBindAllow", + "SocketBindDeny", + "SourcePath", + "StartLimitAction", + "StartLimitBurst", + "StartLimitIntervalUSec", + "StartupAllowedCPUs", + "StartupAllowedMemoryNodes", + "StartupCPUWeight", + "StartupIOWeight", + "StartupMemoryHigh", + "StartupMemoryLow", + "StartupMemoryMax", + "StartupMemorySwapMax", + "StartupMemoryZSwapMax", + "StopPropagatedFrom", + "StopWhenUnneeded", + "SuccessAction", + "SuccessActionExitStatus", + "SurviveFinalKillSignal", + "TasksAccounting", + "TasksMax", + "TasksMaxScale", + "TimeoutStopUSec", + "Upholds", + "User", + "Wants", + "WantsMountsFor", + "WatchdogSignal" + ] + }, + "ignored": [ + "BlockIOAccounting", + "BlockIODeviceWeight", + "BlockIOReadBandwidth", + "BlockIOWeight", + "BlockIOWriteBandwidth", + "CPUAccounting", + "CPUShares", + "MemoryLimit", + "MemoryLimitScale", + "StartupBlockIOWeight", + "StartupCPUShares" + ], + "refused": { + "BoundBy": "Dependency type BoundBy may not be created transiently.", + "ConflictedBy": "Dependency type ConflictedBy may not be created transiently.", + "ConsistsOf": "Dependency type ConsistsOf may not be created transiently.", + "OnFailureOf": "Dependency type OnFailureOf may not be created transiently.", + "OnSuccessOf": "Dependency type OnSuccessOf may not be created transiently.", + "RequiredBy": "Dependency type RequiredBy may not be created transiently.", + "RequisiteOf": "Dependency type RequisiteOf may not be created transiently.", + "SliceOf": "Dependency type SliceOf may not be created transiently.", + "TriggeredBy": "Dependency type TriggeredBy may not be created transiently.", + "Triggers": "Dependency type Triggers may not be created transiently.", + "UpheldBy": "Dependency type UpheldBy may not be created transiently.", + "WantedBy": "Dependency type WantedBy may not be created transiently." + } +} From 9f939c38f10f2ae6b5d4165e37db88eefb6908b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9tur=20Ingi=20Egilsson?= Date: Sun, 18 Oct 2026 06:04:33 +0200 Subject: [PATCH 3/3] Ship the transient property generator and data in the sdist tests/ is in the sdist, and test_unit_signatures checks the generated module against tools/transient-properties/ by running tools/generate_transient_properties.py, so both need to be shipped too. Co-Authored-By: Claude Opus 5.5 --- MANIFEST.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/MANIFEST.in b/MANIFEST.in index ce581b8..978e91d 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,5 @@ include README.md LICENSE recursive-include tests *.py recursive-include pystemd *.pyx *.pxd *.pxi +include tools/generate_transient_properties.py +recursive-include tools/transient-properties *.json