summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--man/systemd-path.xml4
-rw-r--r--man/systemd-run.xml7
-rw-r--r--shell-completion/bash/systemd-run2
-rw-r--r--src/basic/time-util.c4
-rw-r--r--src/libsystemd-network/sd-dhcp-lease.c6
-rw-r--r--src/libsystemd-network/sd-dhcp-server.c8
-rw-r--r--src/network/networkctl.c8
-rw-r--r--src/network/networkd-link.c8
-rw-r--r--src/network/networkd-network.c6
-rw-r--r--src/run/run.c39
10 files changed, 69 insertions, 23 deletions
diff --git a/man/systemd-path.xml b/man/systemd-path.xml
index dfc75ee0ff..4f790d2cda 100644
--- a/man/systemd-path.xml
+++ b/man/systemd-path.xml
@@ -64,9 +64,9 @@
<para>When invoked without arguments a list of known paths and
their current values is shown. When at least one argument is
- passed the path with this is name is queried and its value shown.
+ passed the path with this name is queried and its value shown.
The variables whose name begins with <literal>search-</literal>
- don't refer to individual paths, but instead a to a list of
+ don't refer to individual paths, but instead to a list of
colon-separated search paths, in their order of precedence.</para>
</refsect1>
diff --git a/man/systemd-run.xml b/man/systemd-run.xml
index 80db148702..b220e0dce1 100644
--- a/man/systemd-run.xml
+++ b/man/systemd-run.xml
@@ -113,6 +113,13 @@
<variablelist>
<varlistentry>
+ <term><option>--no-ask-password</option></term>
+
+ <listitem><para>Do not query the user for authentication for
+ privileged operations.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><option>--scope</option></term>
<listitem>
diff --git a/shell-completion/bash/systemd-run b/shell-completion/bash/systemd-run
index 63c831b8f1..a948677516 100644
--- a/shell-completion/bash/systemd-run
+++ b/shell-completion/bash/systemd-run
@@ -36,7 +36,7 @@ _systemd_run() {
-r --remain-after-exit --send-sighup -H --host -M --machine --service-type
--on-active --on-boot --on-startup --on-unit-active --on-unit-inactive
--on-calendar --timer-property -t --pty -q --quiet --no-block
- --uid --gid --nice --setenv -p --property'
+ --uid --gid --nice --setenv -p --property --no-ask-password'
local mode=--system
local i
diff --git a/src/basic/time-util.c b/src/basic/time-util.c
index afc6a6eb24..531931f6e1 100644
--- a/src/basic/time-util.c
+++ b/src/basic/time-util.c
@@ -1046,7 +1046,7 @@ clockid_t clock_boottime_or_monotonic(void) {
return clock;
}
-int get_timezone(char **timezone) {
+int get_timezone(char **tz) {
_cleanup_free_ char *t = NULL;
const char *e;
char *z;
@@ -1069,6 +1069,6 @@ int get_timezone(char **timezone) {
if (!z)
return -ENOMEM;
- *timezone = z;
+ *tz = z;
return 0;
}
diff --git a/src/libsystemd-network/sd-dhcp-lease.c b/src/libsystemd-network/sd-dhcp-lease.c
index 6551e7c94c..aa07846693 100644
--- a/src/libsystemd-network/sd-dhcp-lease.c
+++ b/src/libsystemd-network/sd-dhcp-lease.c
@@ -1121,13 +1121,13 @@ int dhcp_lease_set_client_id(sd_dhcp_lease *lease, const void *client_id, size_t
return 0;
}
-int sd_dhcp_lease_get_timezone(sd_dhcp_lease *lease, const char **timezone) {
+int sd_dhcp_lease_get_timezone(sd_dhcp_lease *lease, const char **tz) {
assert_return(lease, -EINVAL);
- assert_return(timezone, -EINVAL);
+ assert_return(tz, -EINVAL);
if (!lease->timezone)
return -ENODATA;
- *timezone = lease->timezone;
+ *tz = lease->timezone;
return 0;
}
diff --git a/src/libsystemd-network/sd-dhcp-server.c b/src/libsystemd-network/sd-dhcp-server.c
index 7a8b298b51..1f167485e3 100644
--- a/src/libsystemd-network/sd-dhcp-server.c
+++ b/src/libsystemd-network/sd-dhcp-server.c
@@ -1062,16 +1062,16 @@ int sd_dhcp_server_forcerenew(sd_dhcp_server *server) {
return r;
}
-int sd_dhcp_server_set_timezone(sd_dhcp_server *server, const char *timezone) {
+int sd_dhcp_server_set_timezone(sd_dhcp_server *server, const char *tz) {
int r;
assert_return(server, -EINVAL);
- assert_return(timezone_is_valid(timezone), -EINVAL);
+ assert_return(timezone_is_valid(tz), -EINVAL);
- if (streq_ptr(timezone, server->timezone))
+ if (streq_ptr(tz, server->timezone))
return 0;
- r = free_and_strdup(&server->timezone, timezone);
+ r = free_and_strdup(&server->timezone, tz);
if (r < 0)
return r;
diff --git a/src/network/networkctl.c b/src/network/networkctl.c
index 2281d4b718..786579def0 100644
--- a/src/network/networkctl.c
+++ b/src/network/networkctl.c
@@ -497,7 +497,7 @@ static int link_status_one(
sd_hwdb *hwdb,
const char *name) {
_cleanup_strv_free_ char **dns = NULL, **ntp = NULL, **domains = NULL;
- _cleanup_free_ char *setup_state = NULL, *operational_state = NULL, *timezone = NULL;
+ _cleanup_free_ char *setup_state = NULL, *operational_state = NULL, *tz = NULL;
_cleanup_netlink_message_unref_ sd_netlink_message *req = NULL, *reply = NULL;
_cleanup_device_unref_ sd_device *d = NULL;
char devid[2 + DECIMAL_STR_MAX(int)];
@@ -662,9 +662,9 @@ static int link_status_one(
if (!strv_isempty(carrier_bound_by))
dump_list("Carrier Bound By: ", carrier_bound_by);
- (void) sd_network_link_get_timezone(ifindex, &timezone);
- if (timezone)
- printf(" Time Zone: %s", timezone);
+ (void) sd_network_link_get_timezone(ifindex, &tz);
+ if (tz)
+ printf(" Time Zone: %s", tz);
return 0;
}
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index 979f3115f6..1dc9db0fca 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -967,14 +967,14 @@ static int set_timezone_handler(sd_bus_message *m, void *userdata, sd_bus_error
return 1;
}
-int link_set_timezone(Link *link, const char *timezone) {
+int link_set_timezone(Link *link, const char *tz) {
int r;
assert(link);
assert(link->manager);
- assert(timezone);
+ assert(tz);
- log_link_debug(link, "Setting system timezone: '%s'", timezone);
+ log_link_debug(link, "Setting system timezone: '%s'", tz);
if (!link->manager->bus) {
log_link_info(link, "Not connected to system bus, ignoring timezone.");
@@ -991,7 +991,7 @@ int link_set_timezone(Link *link, const char *timezone) {
set_timezone_handler,
link,
"sb",
- timezone,
+ tz,
false);
if (r < 0)
return log_link_error_errno(link, r, "Could not set timezone: %m");
diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c
index 2a77242013..ee14401982 100644
--- a/src/network/networkd-network.c
+++ b/src/network/networkd-network.c
@@ -786,7 +786,7 @@ int config_parse_timezone(
void *data,
void *userdata) {
- char **timezone = data, *tz = NULL;
+ char **datap = data, *tz = NULL;
int r;
assert(filename);
@@ -803,8 +803,8 @@ int config_parse_timezone(
return 0;
}
- free(*timezone);
- *timezone = tz;
+ free(*datap);
+ *datap = tz;
return 0;
}
diff --git a/src/run/run.c b/src/run/run.c
index 3dd97022de..a69560208c 100644
--- a/src/run/run.c
+++ b/src/run/run.c
@@ -36,7 +36,9 @@
#include "ptyfwd.h"
#include "formats-util.h"
#include "signal-util.h"
+#include "spawn-polkit-agent.h"
+static bool arg_ask_password = true;
static bool arg_scope = false;
static bool arg_remain_after_exit = false;
static bool arg_no_block = false;
@@ -64,6 +66,18 @@ static char *arg_on_calendar = NULL;
static char **arg_timer_property = NULL;
static bool arg_quiet = 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();
+}
+
static void help(void) {
printf("%s [OPTIONS...] {COMMAND} [ARGS...]\n\n"
"Run the specified command in a transient scope or service or timer\n"
@@ -71,6 +85,7 @@ static void help(void) {
"specified with --unit option then command can be omitted.\n\n"
" -h --help Show this help\n"
" --version Show package version\n"
+ " --no-ask-password Do not prompt for password\n"
" --user Run as user unit\n"
" -H --host=[USER@]HOST Operate on remote host\n"
" -M --machine=CONTAINER Operate on local container\n"
@@ -108,6 +123,7 @@ static int parse_argv(int argc, char *argv[]) {
enum {
ARG_VERSION = 0x100,
+ ARG_NO_ASK_PASSWORD,
ARG_USER,
ARG_SYSTEM,
ARG_SCOPE,
@@ -160,6 +176,7 @@ static int parse_argv(int argc, char *argv[]) {
{ "on-calendar", required_argument, NULL, ARG_ON_CALENDAR },
{ "timer-property", required_argument, NULL, ARG_TIMER_PROPERTY },
{ "no-block", no_argument, NULL, ARG_NO_BLOCK },
+ { "no-ask-password", no_argument, NULL, ARG_NO_ASK_PASSWORD },
{},
};
@@ -177,6 +194,10 @@ static int parse_argv(int argc, char *argv[]) {
help();
return 0;
+ case ARG_NO_ASK_PASSWORD:
+ arg_ask_password = false;
+ break;
+
case ARG_VERSION:
puts(PACKAGE_STRING);
puts(SYSTEMD_FEATURES);
@@ -745,6 +766,10 @@ static int start_transient_service(
if (r < 0)
return bus_log_create_error(r);
+ r = sd_bus_message_set_allow_interactive_authorization(m, arg_ask_password);
+ if (r < 0)
+ return bus_log_create_error(r);
+
/* Name and mode */
r = sd_bus_message_append(m, "ss", service, "fail");
if (r < 0)
@@ -768,6 +793,8 @@ static int start_transient_service(
if (r < 0)
return bus_log_create_error(r);
+ polkit_agent_open_if_enabled();
+
r = sd_bus_call(bus, m, 0, &error, &reply);
if (r < 0) {
log_error("Failed to start transient service unit: %s", bus_error_message(&error, -r));
@@ -860,6 +887,10 @@ static int start_transient_scope(
if (r < 0)
return bus_log_create_error(r);
+ r = sd_bus_message_set_allow_interactive_authorization(m, arg_ask_password);
+ if (r < 0)
+ return bus_log_create_error(r);
+
/* Name and Mode */
r = sd_bus_message_append(m, "ss", scope, "fail");
if (r < 0)
@@ -883,6 +914,8 @@ static int start_transient_scope(
if (r < 0)
return bus_log_create_error(r);
+ polkit_agent_open_if_enabled();
+
r = sd_bus_call(bus, m, 0, &error, &reply);
if (r < 0) {
log_error("Failed to start transient scope unit: %s", bus_error_message(&error, -r));
@@ -1025,6 +1058,10 @@ static int start_transient_timer(
if (r < 0)
return bus_log_create_error(r);
+ r = sd_bus_message_set_allow_interactive_authorization(m, arg_ask_password);
+ if (r < 0)
+ return bus_log_create_error(r);
+
/* Name and Mode */
r = sd_bus_message_append(m, "ss", timer, "fail");
if (r < 0)
@@ -1077,6 +1114,8 @@ static int start_transient_timer(
if (r < 0)
return bus_log_create_error(r);
+ polkit_agent_open_if_enabled();
+
r = sd_bus_call(bus, m, 0, &error, &reply);
if (r < 0) {
log_error("Failed to start transient timer unit: %s", bus_error_message(&error, -r));