diff options
Diffstat (limited to 'src/login/loginctl.c')
-rw-r--r-- | src/login/loginctl.c | 51 |
1 files changed, 19 insertions, 32 deletions
diff --git a/src/login/loginctl.c b/src/login/loginctl.c index a63174c093..dfcaff6195 100644 --- a/src/login/loginctl.c +++ b/src/login/loginctl.c @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ /*** This file is part of systemd. @@ -37,6 +38,7 @@ #include "pager.h" #include "parse-util.h" #include "process-util.h" +#include "sigbus.h" #include "signal-util.h" #include "spawn-polkit-agent.h" #include "strv.h" @@ -61,25 +63,11 @@ static bool arg_ask_password = true; static unsigned arg_lines = 10; static OutputMode arg_output = OUTPUT_SHORT; -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(); -} - static OutputFlags get_output_flags(void) { return arg_all * OUTPUT_SHOW_ALL | - arg_full * OUTPUT_FULL_WIDTH | - (!on_tty() || pager_have()) * OUTPUT_FULL_WIDTH | + (arg_full || !on_tty() || pager_have()) * OUTPUT_FULL_WIDTH | colors_enabled() * OUTPUT_COLOR; } @@ -727,7 +715,7 @@ static int print_seat_status_info(sd_bus *bus, const char *path, bool *new_line) printf("\t Devices:\n"); - show_sysfs(i.id, "\t\t ", c); + show_sysfs(i.id, "\t\t ", c, get_output_flags()); } return 0; @@ -739,7 +727,7 @@ static int print_seat_status_info(sd_bus *bus, const char *path, bool *new_line) printf(fmt "\n", __VA_ARGS__); \ else \ printf("%s=" fmt "\n", name, __VA_ARGS__); \ - } while(0) + } while (0) static int print_property(const char *name, sd_bus_message *m, const char *contents) { int r; @@ -1081,7 +1069,7 @@ static int activate(int argc, char *argv[], void *userdata) { assert(bus); assert(argv); - polkit_agent_open_if_enabled(); + polkit_agent_open_if_enabled(arg_transport, arg_ask_password); if (argc < 2) { /* No argument? Let's either use $XDG_SESSION_ID (if specified), or an empty @@ -1125,7 +1113,7 @@ static int kill_session(int argc, char *argv[], void *userdata) { assert(bus); assert(argv); - polkit_agent_open_if_enabled(); + polkit_agent_open_if_enabled(arg_transport, arg_ask_password); if (!arg_kill_who) arg_kill_who = "all"; @@ -1159,16 +1147,16 @@ static int enable_linger(int argc, char *argv[], void *userdata) { assert(bus); assert(argv); - polkit_agent_open_if_enabled(); + polkit_agent_open_if_enabled(arg_transport, arg_ask_password); b = streq(argv[0], "enable-linger"); if (argc < 2) { - /* No argument? Let's either use $XDG_SESSION_ID (if specified), or an empty - * session name, in which case logind will try to guess our session. */ + /* No argument? Let's use an empty user name, + * then logind will use our user. */ short_argv[0] = argv[0]; - short_argv[1] = getenv("XDG_SESSION_ID") ?: (char*) ""; + short_argv[1] = (char*) ""; short_argv[2] = NULL; argv = short_argv; argc = 2; @@ -1210,7 +1198,7 @@ static int terminate_user(int argc, char *argv[], void *userdata) { assert(bus); assert(argv); - polkit_agent_open_if_enabled(); + polkit_agent_open_if_enabled(arg_transport, arg_ask_password); for (i = 1; i < argc; i++) { uid_t uid; @@ -1244,7 +1232,7 @@ static int kill_user(int argc, char *argv[], void *userdata) { assert(bus); assert(argv); - polkit_agent_open_if_enabled(); + polkit_agent_open_if_enabled(arg_transport, arg_ask_password); if (!arg_kill_who) arg_kill_who = "all"; @@ -1281,7 +1269,7 @@ static int attach(int argc, char *argv[], void *userdata) { assert(bus); assert(argv); - polkit_agent_open_if_enabled(); + polkit_agent_open_if_enabled(arg_transport, arg_ask_password); for (i = 2; i < argc; i++) { @@ -1311,7 +1299,7 @@ static int flush_devices(int argc, char *argv[], void *userdata) { assert(bus); assert(argv); - polkit_agent_open_if_enabled(); + polkit_agent_open_if_enabled(arg_transport, arg_ask_password); r = sd_bus_call_method( bus, @@ -1335,7 +1323,7 @@ static int lock_sessions(int argc, char *argv[], void *userdata) { assert(bus); assert(argv); - polkit_agent_open_if_enabled(); + polkit_agent_open_if_enabled(arg_transport, arg_ask_password); r = sd_bus_call_method( bus, @@ -1359,7 +1347,7 @@ static int terminate_seat(int argc, char *argv[], void *userdata) { assert(bus); assert(argv); - polkit_agent_open_if_enabled(); + polkit_agent_open_if_enabled(arg_transport, arg_ask_password); for (i = 1; i < argc; i++) { @@ -1596,12 +1584,13 @@ static int loginctl_main(int argc, char *argv[], sd_bus *bus) { } int main(int argc, char *argv[]) { - sd_bus *bus = NULL; + _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; int r; setlocale(LC_ALL, ""); log_parse_environment(); log_open(); + sigbus_install(); r = parse_argv(argc, argv); if (r <= 0) @@ -1618,8 +1607,6 @@ int main(int argc, char *argv[]) { r = loginctl_main(argc, argv, bus); finish: - sd_bus_flush_close_unref(bus); - pager_close(); polkit_agent_close(); |