From: Yu Watanabe Date: Thu, 15 Aug 2024 22:31:41 +0000 (+0900) Subject: networkctl: enable interactive authentication for dbus method call X-Git-Tag: v257-rc1~676^2~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=67899e3e6ba358b05ac859118c964b84746151f9;p=thirdparty%2Fsystemd.git networkctl: enable interactive authentication for dbus method call Previously, e.g. 'networkctl reload' did not ask password through polkit. --- diff --git a/src/network/networkctl.c b/src/network/networkctl.c index 6c96a84c46b..1d43bd2dee6 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -95,6 +95,7 @@ bool arg_stdin = false; unsigned arg_lines = 10; char *arg_drop_in = NULL; sd_json_format_flags_t arg_json_format_flags = SD_JSON_FORMAT_OFF; +bool arg_ask_password = true; STATIC_DESTRUCTOR_REGISTER(arg_drop_in, freep); @@ -174,6 +175,8 @@ int acquire_bus(sd_bus **ret) { if (r < 0) return log_error_errno(r, "Failed to connect to system bus: %m"); + (void) sd_bus_set_allow_interactive_authorization(bus, arg_ask_password); + if (networkd_is_running()) { r = varlink_connect_networkd(/* ret_varlink = */ NULL); if (r < 0) @@ -2841,6 +2844,8 @@ static int link_renew(int argc, char *argv[], void *userdata) { if (r < 0) return r; + (void) polkit_agent_open_if_enabled(BUS_TRANSPORT_LOCAL, arg_ask_password); + r = 0; for (int i = 1; i < argc; i++) { @@ -2881,6 +2886,8 @@ static int link_force_renew(int argc, char *argv[], void *userdata) { if (r < 0) return r; + (void) polkit_agent_open_if_enabled(BUS_TRANSPORT_LOCAL, arg_ask_password); + for (int i = 1; i < argc; i++) { int index = rtnl_resolve_interface_or_warn(&rtnl, argv[i]); if (index < 0) @@ -2903,6 +2910,8 @@ static int verb_reload(int argc, char *argv[], void *userdata) { if (r < 0) return r; + (void) polkit_agent_open_if_enabled(BUS_TRANSPORT_LOCAL, arg_ask_password); + r = bus_call_method(bus, bus_network_mgr, "Reload", &error, NULL, NULL); if (r < 0) return log_error_errno(r, "Failed to reload network settings: %s", bus_error_message(&error, r)); @@ -2922,6 +2931,8 @@ static int verb_reconfigure(int argc, char *argv[], void *userdata) { if (r < 0) return r; + (void) polkit_agent_open_if_enabled(BUS_TRANSPORT_LOCAL, arg_ask_password); + indexes = set_new(NULL); if (!indexes) return log_oom(); diff --git a/src/network/networkctl.h b/src/network/networkctl.h index d44ee8173e0..f88b2d9ab59 100644 --- a/src/network/networkctl.h +++ b/src/network/networkctl.h @@ -19,6 +19,7 @@ extern bool arg_stdin; extern unsigned arg_lines; extern char *arg_drop_in; extern sd_json_format_flags_t arg_json_format_flags; +extern bool arg_ask_password; bool networkd_is_running(void); int acquire_bus(sd_bus **ret);