Skip to content

Commit

Permalink
systemctl-enable: warn if disabled/masked units has active triggering…
Browse files Browse the repository at this point in the history
… units

Closes systemd#311

(cherry picked from commit d708bb7)
  • Loading branch information
YHNdnzj authored and bluca committed Nov 8, 2023
1 parent a847fb1 commit a11fc4d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 4 deletions.
11 changes: 10 additions & 1 deletion man/systemctl.xml
Original file line number Diff line number Diff line change
Expand Up @@ -858,6 +858,10 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err
executed. This output may be suppressed by passing <option>--quiet</option>.
</para>

<para>If a unit gets disabled but its triggering units are still active, a warning containing
the names of the triggering units is shown. <option>--no-warn</option> can be used to suppress
the warning.</para>

<para>When this command is used with <option>--user</option>, the units being operated on might
still be enabled in global scope, and thus get started automatically even after a successful
disablement in user scope. In this case, a warning about it is shown, which can be suppressed
Expand Down Expand Up @@ -1034,6 +1038,10 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err
placed precisely in the two aforementioned directories). Similar restrictions apply for
<option>--user</option> mode, in which case the directories are below the user's home directory
however.</para>

<para>If a unit gets masked but its triggering units are still active, a warning containing
the names of the triggering units is shown. <option>--no-warn</option> can be used to suppress
the warning.</para>
</listitem>
</varlistentry>

Expand Down Expand Up @@ -2114,7 +2122,8 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err
that are enabled in global scope,</para>
</listitem>
<listitem>
<para>when a <command>stop</command>-ped unit still has active triggering units.</para>
<para>when a <command>stop</command>-ped, <command>disable</command>-d, or <command>mask</command>-ed
unit still has active triggering units.</para>
</listitem>
</itemizedlist>
</para>
Expand Down
17 changes: 14 additions & 3 deletions src/systemctl/systemctl-enable.c
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,8 @@ int verb_enable(int argc, char *argv[], void *userdata) {
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
bool expect_carries_install_info = false;
bool send_runtime = true, send_force = true, send_preset_mode = false;
const char *method;
const char *method, *warn_trigger_operation = NULL;
bool warn_trigger_ignore_masked = true; /* suppress "used uninitialized" warning */
sd_bus *bus;

if (STR_IN_SET(verb, "mask", "unmask")) {
Expand Down Expand Up @@ -170,6 +171,9 @@ int verb_enable(int argc, char *argv[], void *userdata) {
method = "DisableUnitFilesWithFlagsAndInstallInfo";
expect_carries_install_info = true;
send_force = false;

warn_trigger_operation = "Disabling";
warn_trigger_ignore_masked = true;
} else if (streq(verb, "reenable")) {
method = "ReenableUnitFiles";
expect_carries_install_info = true;
Expand All @@ -185,9 +189,12 @@ int verb_enable(int argc, char *argv[], void *userdata) {

expect_carries_install_info = true;
ignore_carries_install_info = true;
} else if (streq(verb, "mask"))
} else if (streq(verb, "mask")) {
method = "MaskUnitFiles";
else if (streq(verb, "unmask")) {

warn_trigger_operation = "Masking";
warn_trigger_ignore_masked = false;
} else if (streq(verb, "unmask")) {
method = "UnmaskUnitFiles";
send_force = false;
} else if (streq(verb, "revert")) {
Expand Down Expand Up @@ -245,6 +252,10 @@ int verb_enable(int argc, char *argv[], void *userdata) {
if (r < 0)
return r;
}

if (warn_trigger_operation && !arg_quiet && !arg_no_warn)
STRV_FOREACH(unit, names)
warn_triggering_units(bus, *unit, warn_trigger_operation, warn_trigger_ignore_masked);
}

if (carries_install_info == 0 && !ignore_carries_install_info)
Expand Down

0 comments on commit a11fc4d

Please sign in to comment.