polkit: don't spawn local client if we access a remote system
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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) },
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
@@ -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")) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user