From 46e65dcc3a522b5e992e165b5e61d14254026859 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 7 Nov 2013 21:06:44 +0100 Subject: [PATCH] polkit: don't spawn local client if we access a remote system --- src/hostname/hostnamectl.c | 17 +++++++++++++---- src/locale/localectl.c | 3 +++ src/login/loginctl.c | 10 ++++++---- src/machine/machinectl.c | 2 +- src/shared/pager.c | 3 +++ src/timedate/timedatectl.c | 3 +++ 6 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/hostname/hostnamectl.c b/src/hostname/hostnamectl.c index af4281791..523177b27 100644 --- a/src/hostname/hostnamectl.c +++ b/src/hostname/hostnamectl.c @@ -48,6 +48,18 @@ static bool arg_transient = false; static bool arg_pretty = false; static bool arg_static = false; +static void polkit_agent_open_if_enabled(void) { + + /* Open the polkit agent as a child process if necessary */ + if (!arg_ask_password) + return; + + if (arg_transport != BUS_TRANSPORT_LOCAL) + return; + + polkit_agent_open(); +} + typedef struct StatusInfo { char *hostname; char *static_hostname; @@ -192,12 +204,9 @@ static int show_status(sd_bus *bus, char **args, unsigned n) { static int set_simple_string(sd_bus *bus, const char *method, const char *value) { _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; - static bool first=true; int r = 0; - if (first && arg_ask_password) - polkit_agent_open(); - first = false; + polkit_agent_open_if_enabled(); r = sd_bus_call_method( bus, diff --git a/src/locale/localectl.c b/src/locale/localectl.c index e8bf51057..748a14841 100644 --- a/src/locale/localectl.c +++ b/src/locale/localectl.c @@ -63,6 +63,9 @@ static void polkit_agent_open_if_enabled(void) { if (!arg_ask_password) return; + if (arg_transport != BUS_TRANSPORT_LOCAL) + return; + polkit_agent_open(); } diff --git a/src/login/loginctl.c b/src/login/loginctl.c index cb05907ff..c9899ecba 100644 --- a/src/login/loginctl.c +++ b/src/login/loginctl.c @@ -53,7 +53,6 @@ static char *arg_host = NULL; static void pager_open_if_enabled(void) { - /* Cache result before we open the pager */ if (arg_no_pager) return; @@ -67,6 +66,9 @@ static void polkit_agent_open_if_enabled(void) { if (!arg_ask_password) return; + if (arg_transport != BUS_TRANSPORT_LOCAL) + return; + polkit_agent_open(); } @@ -372,9 +374,9 @@ static int print_session_status_info(sd_bus *bus, const char *path) { {} }; - SessionStatusInfo i = {}; char since1[FORMAT_TIMESTAMP_RELATIVE_MAX], *s1; char since2[FORMAT_TIMESTAMP_MAX], *s2; + SessionStatusInfo i = {}; int r; r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &i); @@ -527,8 +529,8 @@ static int print_seat_status_info(sd_bus *bus, const char *path) { static const struct bus_properties_map map[] = { { "Id", "s", NULL, offsetof(SeatStatusInfo, id) }, - { "ActiveSession", "(so)", &prop_map_first_of_struct, offsetof(SeatStatusInfo, active_session) }, - { "Sessions", "a(so)", &prop_map_sessions_strv, offsetof(SeatStatusInfo, sessions) }, + { "ActiveSession", "(so)", prop_map_first_of_struct, offsetof(SeatStatusInfo, active_session) }, + { "Sessions", "a(so)", prop_map_sessions_strv, offsetof(SeatStatusInfo, sessions) }, {} }; diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c index aa2b0986e..f60c66055 100644 --- a/src/machine/machinectl.c +++ b/src/machine/machinectl.c @@ -793,7 +793,7 @@ static int machinectl_main(sd_bus *bus, int argc, char *argv[]) { left = argc - optind; if (left <= 0) - /* Special rule: no arguments means "list-sessions" */ + /* Special rule: no arguments means "list" */ i = 0; else { if (streq(argv[optind], "help")) { diff --git a/src/shared/pager.c b/src/shared/pager.c index 8dddf24f4..9fa611479 100644 --- a/src/shared/pager.c +++ b/src/shared/pager.c @@ -34,13 +34,16 @@ static pid_t pager_pid = 0; _noreturn_ static void pager_fallback(void) { ssize_t n; + do { n = splice(STDIN_FILENO, NULL, STDOUT_FILENO, NULL, 64*1024, 0); } while (n > 0); + if (n < 0) { log_error("Internal pager failed: %m"); _exit(EXIT_FAILURE); } + _exit(EXIT_SUCCESS); } diff --git a/src/timedate/timedatectl.c b/src/timedate/timedatectl.c index 7ce9a824e..54b39a180 100644 --- a/src/timedate/timedatectl.c +++ b/src/timedate/timedatectl.c @@ -58,6 +58,9 @@ static void polkit_agent_open_if_enabled(void) { if (!arg_ask_password) return; + if (arg_transport != BUS_TRANSPORT_LOCAL) + return; + polkit_agent_open(); } -- 2.30.2