]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
networkctl: enable interactive authentication for dbus method call
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 15 Aug 2024 22:31:41 +0000 (07:31 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 19 Aug 2024 02:27:53 +0000 (11:27 +0900)
Previously, e.g. 'networkctl reload' did not ask password through
polkit.

src/network/networkctl.c
src/network/networkctl.h

index 6c96a84c46bdd5313b2d287aee337642eedfb9e4..1d43bd2dee64b61373f01b2d3f18b647af5d04c9 100644 (file)
@@ -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();
index d44ee8173e01fcb9c188278d9d1b64434ce7e0db..f88b2d9ab595e9ba0d5c76a43cd67deffcf1e005 100644 (file)
@@ -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);