From: Mike Yuan Date: Tue, 26 Sep 2023 15:21:23 +0000 (+0800) Subject: systemctl-enable: warn if disabled/masked units has active triggering units X-Git-Tag: v255-rc1~405^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d708bb7c02687f1dfdcb706676cdc31e82e8cfa8;p=thirdparty%2Fsystemd.git systemctl-enable: warn if disabled/masked units has active triggering units Closes #311 --- diff --git a/man/systemctl.xml b/man/systemctl.xml index 1b7179e10ac..d07c8eae28b 100644 --- a/man/systemctl.xml +++ b/man/systemctl.xml @@ -896,6 +896,10 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err executed. This output may be suppressed by passing . + If a unit gets disabled but its triggering units are still active, a warning containing + the names of the triggering units is shown. can be used to suppress + the warning. + When this command is used with , 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 @@ -1083,6 +1087,10 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err mode, in which case the directories are below the user's home directory however. + If a unit gets masked but its triggering units are still active, a warning containing + the names of the triggering units is shown. can be used to suppress + the warning. + @@ -2240,7 +2248,8 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err that are enabled in global scope, - when a stop-ped unit still has active triggering units. + when a stop-ped, disable-d, or mask-ed + unit still has active triggering units. diff --git a/src/systemctl/systemctl-enable.c b/src/systemctl/systemctl-enable.c index c2d9336d904..4d554444d39 100644 --- a/src/systemctl/systemctl-enable.c +++ b/src/systemctl/systemctl-enable.c @@ -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")) { @@ -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; @@ -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")) { @@ -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)