diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2022-12-05 10:27:24 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-05 10:27:24 +0100 |
commit | 8608fef36c0bde17bc6254fb2264f559081d8037 (patch) | |
tree | 0fc0d00c937f9cfed9e7daf5c732ec3df318e8f7 /src/core/dbus-manager.c | |
parent | 2877b14720928a214403870c68279ee3f8cc843f (diff) | |
parent | 0acb1459a15f5b4d3a9bd2e7bf52661ca7bdebf0 (diff) | |
download | systemd-8608fef36c0bde17bc6254fb2264f559081d8037.tar.gz |
Merge pull request #25437 from YHNdnzj/systemctl-disable-warn-statically-enabled-services
systemctl: warn if trying to disable a unit with no install info
Diffstat (limited to 'src/core/dbus-manager.c')
-rw-r--r-- | src/core/dbus-manager.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c index ab2617153a..d2e7372606 100644 --- a/src/core/dbus-manager.c +++ b/src/core/dbus-manager.c @@ -2425,6 +2425,7 @@ static int method_disable_unit_files_generic( sd_bus_message *message, Manager *m, int (*call)(LookupScope scope, UnitFileFlags flags, const char *root_dir, char *files[], InstallChange **changes, size_t *n_changes), + bool carries_install_info, sd_bus_error *error) { _cleanup_strv_free_ char **l = NULL; @@ -2440,7 +2441,8 @@ static int method_disable_unit_files_generic( if (r < 0) return r; - if (sd_bus_message_is_method_call(message, NULL, "DisableUnitFilesWithFlags")) { + if (sd_bus_message_is_method_call(message, NULL, "DisableUnitFilesWithFlags") || + sd_bus_message_is_method_call(message, NULL, "DisableUnitFilesWithFlagsAndInstallInfo")) { uint64_t raw_flags; r = sd_bus_message_read(message, "t", &raw_flags); @@ -2469,19 +2471,23 @@ static int method_disable_unit_files_generic( if (r < 0) return install_error(error, r, changes, n_changes); - return reply_install_changes_and_free(m, message, -1, changes, n_changes, error); + return reply_install_changes_and_free(m, message, carries_install_info ? r : -1, changes, n_changes, error); } static int method_disable_unit_files_with_flags(sd_bus_message *message, void *userdata, sd_bus_error *error) { - return method_disable_unit_files_generic(message, userdata, unit_file_disable, error); + return method_disable_unit_files_generic(message, userdata, unit_file_disable, /* carries_install_info = */ false, error); +} + +static int method_disable_unit_files_with_flags_and_install_info(sd_bus_message *message, void *userdata, sd_bus_error *error) { + return method_disable_unit_files_generic(message, userdata, unit_file_disable, /* carries_install_info = */ true, error); } static int method_disable_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) { - return method_disable_unit_files_generic(message, userdata, unit_file_disable, error); + return method_disable_unit_files_generic(message, userdata, unit_file_disable, /* carries_install_info = */ false, error); } static int method_unmask_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) { - return method_disable_unit_files_generic(message, userdata, unit_file_unmask, error); + return method_disable_unit_files_generic(message, userdata, unit_file_unmask, /* carries_install_info = */ false, error); } static int method_revert_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) { @@ -3194,6 +3200,11 @@ const sd_bus_vtable bus_manager_vtable[] = { SD_BUS_RESULT("a(sss)", changes), method_disable_unit_files_with_flags, SD_BUS_VTABLE_UNPRIVILEGED), + SD_BUS_METHOD_WITH_ARGS("DisableUnitFilesWithFlagsAndInstallInfo", + SD_BUS_ARGS("as", files, "t", flags), + SD_BUS_RESULT("b", carries_install_info, "a(sss)", changes), + method_disable_unit_files_with_flags_and_install_info, + SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_METHOD_WITH_ARGS("ReenableUnitFiles", SD_BUS_ARGS("as", files, "b", runtime, "b", force), SD_BUS_RESULT("b", carries_install_info, "a(sss)", changes), |