mirror of
https://github.com/systemd/systemd.git
synced 2024-12-25 01:34:28 +03:00
systemctl: introduce a single function to set the wall message
Let's not have the same code three times, but reduce it to one function.
This commit is contained in:
parent
b9e74c3994
commit
f2d11d35e9
@ -2760,6 +2760,37 @@ static int start_unit(sd_bus *bus, char **args) {
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int set_wall_message(sd_bus *bus) {
|
||||||
|
#ifdef HAVE_LOGIND
|
||||||
|
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||||
|
_cleanup_free_ char *m = NULL;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
assert(bus);
|
||||||
|
|
||||||
|
m = strv_join(arg_wall, " ");
|
||||||
|
if (!m)
|
||||||
|
return log_oom();
|
||||||
|
|
||||||
|
r = sd_bus_call_method(
|
||||||
|
bus,
|
||||||
|
"org.freedesktop.login1",
|
||||||
|
"/org/freedesktop/login1",
|
||||||
|
"org.freedesktop.login1.Manager",
|
||||||
|
"SetWallMessage",
|
||||||
|
&error,
|
||||||
|
NULL,
|
||||||
|
"sb",
|
||||||
|
m,
|
||||||
|
!arg_no_wall);
|
||||||
|
|
||||||
|
if (r < 0)
|
||||||
|
return log_warning_errno(r, "Failed to set wall message, ignoring: %s", bus_error_message(&error, r));
|
||||||
|
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Ask systemd-logind, which might grant access to unprivileged users
|
/* Ask systemd-logind, which might grant access to unprivileged users
|
||||||
* through PolicyKit */
|
* through PolicyKit */
|
||||||
static int reboot_with_logind(sd_bus *bus, enum action a) {
|
static int reboot_with_logind(sd_bus *bus, enum action a) {
|
||||||
@ -2773,6 +2804,8 @@ static int reboot_with_logind(sd_bus *bus, enum action a) {
|
|||||||
|
|
||||||
polkit_agent_open_if_enabled();
|
polkit_agent_open_if_enabled();
|
||||||
|
|
||||||
|
(void) set_wall_message(bus);
|
||||||
|
|
||||||
switch (a) {
|
switch (a) {
|
||||||
|
|
||||||
case ACTION_REBOOT:
|
case ACTION_REBOOT:
|
||||||
@ -2804,33 +2837,6 @@ static int reboot_with_logind(sd_bus *bus, enum action a) {
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strv_isempty(arg_wall)) {
|
|
||||||
_cleanup_free_ char *m;
|
|
||||||
|
|
||||||
m = strv_join(arg_wall, " ");
|
|
||||||
if (!m)
|
|
||||||
return log_oom();
|
|
||||||
|
|
||||||
r = sd_bus_call_method(
|
|
||||||
bus,
|
|
||||||
"org.freedesktop.login1",
|
|
||||||
"/org/freedesktop/login1",
|
|
||||||
"org.freedesktop.login1.Manager",
|
|
||||||
"SetWallMessage",
|
|
||||||
&error,
|
|
||||||
NULL,
|
|
||||||
"sb",
|
|
||||||
m,
|
|
||||||
!arg_no_wall);
|
|
||||||
|
|
||||||
if (r < 0) {
|
|
||||||
log_warning_errno(r, "Failed to set wall message, ignoring: %s",
|
|
||||||
bus_error_message(&error, r));
|
|
||||||
sd_bus_error_free(&error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
r = sd_bus_call_method(
|
r = sd_bus_call_method(
|
||||||
bus,
|
bus,
|
||||||
"org.freedesktop.login1",
|
"org.freedesktop.login1",
|
||||||
@ -7455,7 +7461,6 @@ static int halt_main(sd_bus *bus) {
|
|||||||
if (arg_when > 0) {
|
if (arg_when > 0) {
|
||||||
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
|
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||||
_cleanup_bus_flush_close_unref_ sd_bus *b = NULL;
|
_cleanup_bus_flush_close_unref_ sd_bus *b = NULL;
|
||||||
_cleanup_free_ char *m = NULL;
|
|
||||||
const char *action;
|
const char *action;
|
||||||
|
|
||||||
assert(geteuid() == 0);
|
assert(geteuid() == 0);
|
||||||
@ -7469,27 +7474,7 @@ static int halt_main(sd_bus *bus) {
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Unable to open system bus: %m");
|
return log_error_errno(r, "Unable to open system bus: %m");
|
||||||
|
|
||||||
m = strv_join(arg_wall, " ");
|
(void) set_wall_message(b);
|
||||||
if (!m)
|
|
||||||
return log_oom();
|
|
||||||
|
|
||||||
r = sd_bus_call_method(
|
|
||||||
b,
|
|
||||||
"org.freedesktop.login1",
|
|
||||||
"/org/freedesktop/login1",
|
|
||||||
"org.freedesktop.login1.Manager",
|
|
||||||
"SetWallMessage",
|
|
||||||
&error,
|
|
||||||
NULL,
|
|
||||||
"sb",
|
|
||||||
m,
|
|
||||||
!arg_no_wall);
|
|
||||||
|
|
||||||
if (r < 0) {
|
|
||||||
log_warning_errno(r, "Failed to set wall message, ignoring: %s",
|
|
||||||
bus_error_message(&error, r));
|
|
||||||
sd_bus_error_free(&error);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (arg_action) {
|
switch (arg_action) {
|
||||||
case ACTION_HALT:
|
case ACTION_HALT:
|
||||||
@ -7642,7 +7627,6 @@ int main(int argc, char*argv[]) {
|
|||||||
case ACTION_CANCEL_SHUTDOWN: {
|
case ACTION_CANCEL_SHUTDOWN: {
|
||||||
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
|
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||||
_cleanup_bus_flush_close_unref_ sd_bus *b = NULL;
|
_cleanup_bus_flush_close_unref_ sd_bus *b = NULL;
|
||||||
_cleanup_free_ char *m = NULL;
|
|
||||||
|
|
||||||
if (avoid_bus()) {
|
if (avoid_bus()) {
|
||||||
log_error("Unable to perform operation without bus connection.");
|
log_error("Unable to perform operation without bus connection.");
|
||||||
@ -7653,31 +7637,7 @@ int main(int argc, char*argv[]) {
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Unable to open system bus: %m");
|
return log_error_errno(r, "Unable to open system bus: %m");
|
||||||
|
|
||||||
if (arg_wall) {
|
(void) set_wall_message(b);
|
||||||
m = strv_join(arg_wall, " ");
|
|
||||||
if (!m) {
|
|
||||||
r = log_oom();
|
|
||||||
goto finish;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
r = sd_bus_call_method(
|
|
||||||
b,
|
|
||||||
"org.freedesktop.login1",
|
|
||||||
"/org/freedesktop/login1",
|
|
||||||
"org.freedesktop.login1.Manager",
|
|
||||||
"SetWallMessage",
|
|
||||||
&error,
|
|
||||||
NULL,
|
|
||||||
"sb",
|
|
||||||
m,
|
|
||||||
!arg_no_wall);
|
|
||||||
|
|
||||||
if (r < 0) {
|
|
||||||
log_warning_errno(r, "Failed to set wall message, ignoring: %s",
|
|
||||||
bus_error_message(&error, r));
|
|
||||||
sd_bus_error_free(&error);
|
|
||||||
}
|
|
||||||
|
|
||||||
r = sd_bus_call_method(
|
r = sd_bus_call_method(
|
||||||
b,
|
b,
|
||||||
|
Loading…
Reference in New Issue
Block a user