]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
logind: drop new delay-weak inhibitor
authorLuca Boccassi <bluca@debian.org>
Tue, 3 Sep 2024 21:37:39 +0000 (22:37 +0100)
committerLuca Boccassi <bluca@debian.org>
Fri, 13 Sep 2024 10:32:42 +0000 (12:32 +0200)
It wasn't actually requested, just a misunderstanding, so drop it.

Fixes https://github.com/systemd/systemd/issues/34091

Follow-up for 804874d26ac73e0af07c4c5d7165c95372f03f6d

NEWS
docs/INHIBITOR_LOCKS.md
man/org.freedesktop.login1.xml
man/systemd-inhibit.xml
shell-completion/zsh/_systemd-inhibit
src/login/inhibit.c
src/login/logind-dbus.c
src/login/logind-inhibit.c
src/login/logind-inhibit.h

diff --git a/NEWS b/NEWS
index 81b6380cedf9f3998128be88f43994f50335c6fa..c47f521d5cab28da68fe5b3af2ce63f1704a846d 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -35,17 +35,17 @@ CHANGES WITH 257 in spe:
           Accept=yes sockets too, where it was previously silently ignored and
           "connection" was used unconditionally.
 
-        * systemd-logind now always obeys inhibitor locks, where previously it
-          ignored locks taken by the caller or when the caller was root. A
+        * systemd-logind now always obeys block inhibitor locks, where previously
+          it ignored locks taken by the caller or when the caller was root. A
           privileged caller can always close the other sessions, remove the
           inhibitor locks, or use --force or --check-inhibitors=no to ignore the
           inhibitors. This change thus doesn't affect security, since everything
           that was possible before at a given privilege level is still possible,
           but it should make the inhibitor logic easier to use and understand,
-          and also help avoiding accidental reboots and shutdowns. New 'delay-weak'
-          and 'block-weak' inhibitor modes were added, if taken they will make
-          the inhibitor lock work as in the previous versions. Inhibitor locks
-          can also be taken by remote users (subject to polkit policy).
+          and also help avoiding accidental reboots and shutdowns. New 'block-weak'
+          inhibitor modes were added, if taken they will make the inhibitor lock
+          work as in the previous versions. Inhibitor locks can also be taken by
+          remote users (subject to polkit policy).
 
         * systemd-nspawn will now mount the unified cgroup hierarchy into a
           container if no systemd installation is found in a container's root
index b88704d330f4defe8f33a4b552e91adf43f7415a..a7e2d91fdf51fe0e860a8196c5c306e15963ef5e 100644 (file)
@@ -42,8 +42,8 @@ If such a lock is taken the operation will fail (but still may be overridden if
 The InhibitDelayMaxSec= setting in [logind.conf(5)](http://www.freedesktop.org/software/systemd/man/logind.conf.html) controls the timeout for this. This is intended to be used by applications which need a synchronous way to execute actions before system suspend but shall not be allowed to block suspend indefinitely.
 This mode is only available for _sleep_ and _shutdown_ locks.
 
-3. _block-weak_ and _delay-weak_ that work as the non-weak counterparts, but that in addition may be ignored
-automatically and silently under certain circumstances, unlike the formers which are always respected.
+3. _block-weak_ that works as its non-weak counterpart, but that in addition may be ignored
+automatically and silently under certain circumstances, unlike the former which is always respected.
 
 Inhibitor locks are taken via the Inhibit() D-Bus call on the logind Manager object:
 
index c5263efc8274dbbf2651fd5a23db1b12630e7473..4de37ef27ffe1dbee4ceaed4b4629a30d3710728 100644 (file)
@@ -672,16 +672,18 @@ node /org/freedesktop/login1 {
 #define SD_LOGIND_SKIP_INHIBITORS                (UINT64_C(1) &lt;&lt; 4)
       </programlisting>
       <para>When the <varname>flags</varname> is 0 then these methods behave just like the versions without
-      flags. Since systemd version 256 <constant>SD_LOGIND_ROOT_CHECK_INHIBITORS</constant> (0x01) is deprecated,
-      and active inhibitors are always honoured by default for privileged users too, and a new flag
-      <constant>SD_LOGIND_SKIP_INHIBITORS</constant> (0x04) can be specified to bypass inhibitors. When
-      <constant>SD_LOGIND_KEXEC_REBOOT</constant> (0x02) is set, then <function>RebootWithFlags()</function>
-      performs a kexec reboot if kexec kernel is loaded. When <constant>SD_LOGIND_SOFT_REBOOT</constant>
-      (0x04) is set, or <constant>SD_LOGIND_SOFT_REBOOT_IF_NEXTROOT_SET_UP</constant> (0x08) is set and a
-      new root file system has been set up on <literal>/run/nextroot/</literal>, then
-      <function>RebootWithFlags()</function> performs a userspace reboot only.
-      <constant>SD_LOGIND_SOFT_REBOOT_IF_NEXTROOT_SET_UP</constant> and
-      <constant>SD_LOGIND_KEXEC_REBOOT</constant> can be combined, with soft-reboot having precedence.</para>
+      flags. Since systemd version 257 active inhibitors are honoured by default for privileged users too.
+      <constant>SD_LOGIND_ROOT_CHECK_INHIBITORS</constant> (0x01) now only applies to weak inhibitors, to
+      request that they honoured for privileged users too, since they ignore them by default. A new flag
+      <constant>SD_LOGIND_SKIP_INHIBITORS</constant> (0x04) can be specified to bypass all types of
+      inhibitors. When <constant>SD_LOGIND_KEXEC_REBOOT</constant> (0x02) is set, then
+      <function>RebootWithFlags()</function> performs a kexec reboot if kexec kernel is loaded. When
+      <constant>SD_LOGIND_SOFT_REBOOT</constant> (0x04) is set, or
+      <constant>SD_LOGIND_SOFT_REBOOT_IF_NEXTROOT_SET_UP</constant> (0x08) is set and a new root file system
+      has been set up on <literal>/run/nextroot/</literal>, then <function>RebootWithFlags()</function>
+      performs a userspace reboot only. <constant>SD_LOGIND_SOFT_REBOOT_IF_NEXTROOT_SET_UP</constant> and
+      <constant>SD_LOGIND_KEXEC_REBOOT</constant> can be combined, with soft-reboot having precedence.
+      </para>
 
       <para><function>SetRebootParameter()</function> sets a parameter for a subsequent reboot operation.
       See the description of <command>reboot</command> in
@@ -738,11 +740,10 @@ node /org/freedesktop/login1 {
       should be a short human readable string identifying the reason why the lock is taken. Finally,
       <varname>mode</varname> is either <literal>block</literal> or <literal>delay</literal> which encodes
       whether the inhibit shall be consider mandatory or whether it should just delay the operation to a
-      certain maximum time, while the <literal>block-weak</literal> and <literal>delay-weak</literal>
-      variants will create an inhibitor that is automatically ignored in some circumstances. The method
-      returns a file descriptor. The lock is released the moment this file descriptor and all its duplicates
-      are closed. For more information on the inhibition logic see
-      <ulink url="https://systemd.io/INHIBITOR_LOCKS">Inhibitor Locks</ulink>.
+      certain maximum time, while the <literal>block-weak</literal> and variants will create an inhibitor
+      that is automatically ignored in some circumstances. The method returns a file descriptor. The lock is
+      released the moment this file descriptor and all its duplicates are closed. For more information on
+      the inhibition logic see <ulink url="https://systemd.io/INHIBITOR_LOCKS">Inhibitor Locks</ulink>.
       </para>
     </refsect2>
 
index df0a6370865dd989d6bff466130de13d776074af..a8516a5f44ce90c7cbea4ed4e26dbf56a403fe11 100644 (file)
       <varlistentry>
         <term><option>--mode=</option></term>
 
-        <listitem><para>Takes <literal>block</literal>, <literal>delay</literal>,
-        <literal>block-weak</literal> or <literal>delay-weak</literal> and describes how the lock is
-        applied. If <literal>block</literal> is used (the default), the lock prohibits any of the requested
-        operations without time limit, and only privileged users may override it. If
-        <literal>delay</literal> is used, the lock can only delay the requested operations for a limited
-        time. If the time elapses, the lock is ignored and the operation executed. The time limit may be
-        specified in
+        <listitem><para>Takes <literal>block</literal>, <literal>delay</literal>, or
+        <literal>block-weak</literal> and describes how the lock is applied. If <literal>block</literal> is
+        used (the default), the lock prohibits any of the requested operations without time limit, and only
+        privileged users may override it. If <literal>delay</literal> is used, the lock can only delay the
+        requested operations for a limited time. If the time elapses, the lock is ignored and the operation
+        executed. The time limit may be specified in
         <citerefentry><refentrytitle>logind.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
         Note that <literal>delay</literal> is only available for <literal>sleep</literal> and
         <literal>shutdown</literal>. In addition, the weak variants will automatically and silently be
index d43c781834429b2960de0e8a0d69327fe87c33b3..d52da55c3f7e893eebfb4d9a6afe0f5c6fb1e48a 100644 (file)
@@ -33,6 +33,6 @@ _arguments \
     '--what=[Operations to inhibit]:options:_systemd-inhibit_what' \
     '--who=[A descriptive string who is inhibiting]:who is inhibiting:' \
     '--why=[A descriptive string why is being inhibited]:reason for the lock:' \
-    '--mode=[One of block, block-weak, delay, or delay-weak]:lock mode:( block block-weak delay delay-weak )' \
+    '--mode=[One of block, block-weak, or delay]:lock mode:( block block-weak delay )' \
     '--list[List active inhibitors]' \
     '*:commands:_systemd-inhibit_commands'
index 990bda0cfd259991d8e2fe7357cd54691992d23d..a0d5c1314f631a5f8b119c51202f73da8c55aba9 100644 (file)
@@ -157,7 +157,7 @@ static int help(void) {
                "                          handle-lid-switch\n"
                "     --who=STRING         A descriptive string who is inhibiting\n"
                "     --why=STRING         A descriptive string why is being inhibited\n"
-               "     --mode=MODE          One of block, block-weak, delay, or delay-weak\n"
+               "     --mode=MODE          One of block, block-weak, or delay\n"
                "     --list               List active inhibitors\n"
                "\nSee the %s for details.\n",
                program_invocation_short_name,
index b66573f096356ebc0e091987ee883f7757aae273..ac40c87e63795dec1f86d1b1b0b0fd181efbc92e 100644 (file)
@@ -3622,7 +3622,7 @@ static int method_inhibit(sd_bus_message *message, void *userdata, sd_bus_error
                                          "Invalid mode specification %s", mode);
 
         /* Delay is only supported for shutdown/sleep */
-        if (IN_SET(mm, INHIBIT_DELAY, INHIBIT_DELAY_WEAK) && (w & ~(INHIBIT_SHUTDOWN|INHIBIT_SLEEP)))
+        if (mm == INHIBIT_DELAY && (w & ~(INHIBIT_SHUTDOWN|INHIBIT_SLEEP)))
                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
                                          "Delay inhibitors only supported for shutdown and sleep");
 
index c1798f927c8ec996582b0ccd3e53b0ab73d9a93f..70905c92b398ab1363d8dc0060e3bd669f8806f5 100644 (file)
@@ -371,7 +371,7 @@ InhibitWhat manager_inhibit_what(Manager *m, bool block) {
 
         HASHMAP_FOREACH(i, m->inhibitors)
                 if (i->started &&
-                    ((!block && IN_SET(i->mode, INHIBIT_DELAY, INHIBIT_DELAY_WEAK)) ||
+                    ((!block && i->mode == INHIBIT_DELAY) ||
                      (block && IN_SET(i->mode, INHIBIT_BLOCK, INHIBIT_BLOCK_WEAK))))
                         what |= i->what;
 
@@ -424,13 +424,13 @@ bool manager_is_inhibited(
                         continue;
 
                 if ((block && !IN_SET(i->mode, INHIBIT_BLOCK, INHIBIT_BLOCK_WEAK)) ||
-                    (!block && !IN_SET(i->mode, INHIBIT_DELAY, INHIBIT_DELAY_WEAK)))
+                    (!block && i->mode != INHIBIT_DELAY))
                         continue;
 
                 if (ignore_inactive && pidref_is_active_session(m, &i->pid) <= 0)
                         continue;
 
-                if (IN_SET(i->mode, INHIBIT_BLOCK_WEAK, INHIBIT_DELAY_WEAK) && ignore_uid && i->uid == uid)
+                if (i->mode == INHIBIT_BLOCK_WEAK && ignore_uid && i->uid == uid)
                         continue;
 
                 if (!inhibited ||
@@ -531,7 +531,6 @@ static const char* const inhibit_mode_table[_INHIBIT_MODE_MAX] = {
         [INHIBIT_BLOCK]      = "block",
         [INHIBIT_BLOCK_WEAK] = "block-weak",
         [INHIBIT_DELAY]      = "delay",
-        [INHIBIT_DELAY_WEAK] = "delay-weak"
 };
 
 DEFINE_STRING_TABLE_LOOKUP(inhibit_mode, InhibitMode);
index b5167974af9158f6967cbac19a59bbc2b78c9516..8712fb1900cc616990fd6598961cb0ffd616ab57 100644 (file)
@@ -22,7 +22,6 @@ typedef enum InhibitMode {
         INHIBIT_BLOCK,
         INHIBIT_BLOCK_WEAK,
         INHIBIT_DELAY,
-        INHIBIT_DELAY_WEAK,
         _INHIBIT_MODE_MAX,
         _INHIBIT_MODE_INVALID = -EINVAL,
 } InhibitMode;