summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Thorarensen <sebth@naju.se>2014-03-14 00:38:05 +0100
committerLennart Poettering <lennart@poettering.net>2014-03-14 21:27:33 +0100
commit9003d9b0d628be059922e522fd35f9c5b4d8b039 (patch)
tree3363d67fa31dcb4f83a1615eef66cdf160fb0256
parent5a4d665ad679a8436f1210ba67d713a8f0b91b96 (diff)
downloadsystemd-9003d9b0d628be059922e522fd35f9c5b4d8b039.tar.gz
utmp-wtmp: allow overriding username on wall
utmp_wall() now takes an optional argument 'username_override' which allows the caller to override the username shown on wall messages. journald will use this to inform users that its wall messages comes from 'systemd-journald'.
-rw-r--r--src/shared/utmp-wtmp.c12
-rw-r--r--src/shared/utmp-wtmp.h2
-rw-r--r--src/shutdownd/shutdownd.c2
-rw-r--r--src/systemctl/systemctl.c4
-rw-r--r--src/tty-ask-password-agent/tty-ask-password-agent.c2
5 files changed, 13 insertions, 9 deletions
diff --git a/src/shared/utmp-wtmp.c b/src/shared/utmp-wtmp.c
index 32996fad36..30a0c031f3 100644
--- a/src/shared/utmp-wtmp.c
+++ b/src/shared/utmp-wtmp.c
@@ -347,16 +347,20 @@ static int write_to_terminal(const char *tty, const char *message) {
return 0;
}
-int utmp_wall(const char *message, bool (*match_tty)(const char *tty)) {
+int utmp_wall(const char *message, const char *username, bool (*match_tty)(const char *tty)) {
_cleanup_free_ char *text = NULL, *hn = NULL, *un = NULL, *tty = NULL;
char date[FORMAT_TIMESTAMP_MAX];
struct utmpx *u;
int r;
hn = gethostname_malloc();
- un = getlogname_malloc();
- if (!hn || !un)
+ if (!hn)
return -ENOMEM;
+ if (!username) {
+ un = getlogname_malloc();
+ if (!un)
+ return -ENOMEM;
+ }
getttyname_harder(STDIN_FILENO, &tty);
@@ -364,7 +368,7 @@ int utmp_wall(const char *message, bool (*match_tty)(const char *tty)) {
"\a\r\n"
"Broadcast message from %s@%s%s%s (%s):\r\n\r\n"
"%s\r\n\r\n",
- un, hn,
+ un ?: username, hn,
tty ? " on " : "", strempty(tty),
format_timestamp(date, sizeof(date), now(CLOCK_REALTIME)),
message) < 0)
diff --git a/src/shared/utmp-wtmp.h b/src/shared/utmp-wtmp.h
index 5924023203..040a16e746 100644
--- a/src/shared/utmp-wtmp.h
+++ b/src/shared/utmp-wtmp.h
@@ -32,4 +32,4 @@ int utmp_put_runlevel(int runlevel, int previous);
int utmp_put_dead_process(const char *id, pid_t pid, int code, int status);
int utmp_put_init_process(const char *id, pid_t pid, pid_t sid, const char *line);
-int utmp_wall(const char *message, bool (*match_tty)(const char *tty));
+int utmp_wall(const char *message, const char *username, bool (*match_tty)(const char *tty));
diff --git a/src/shutdownd/shutdownd.c b/src/shutdownd/shutdownd.c
index 8d034e6cca..fafd9ce32e 100644
--- a/src/shutdownd/shutdownd.c
+++ b/src/shutdownd/shutdownd.c
@@ -143,7 +143,7 @@ static void warn_wall(usec_t n, struct sd_shutdown_command *c) {
if (asprintf(&l, "%s%s%s%s!", c->wall_message, c->wall_message[0] ? "\n" : "",
prefix, format_timestamp(date, sizeof(date), c->usec)) >= 0)
- utmp_wall(l, NULL);
+ utmp_wall(l, NULL, NULL);
else
log_error("Failed to allocate wall message");
}
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 254ca10c4f..156605d1b6 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -257,7 +257,7 @@ static void warn_wall(enum action a) {
}
if (*p) {
- utmp_wall(p, NULL);
+ utmp_wall(p, NULL, NULL);
return;
}
}
@@ -265,7 +265,7 @@ static void warn_wall(enum action a) {
if (!table[a])
return;
- utmp_wall(table[a], NULL);
+ utmp_wall(table[a], NULL, NULL);
}
static bool avoid_bus(void) {
diff --git a/src/tty-ask-password-agent/tty-ask-password-agent.c b/src/tty-ask-password-agent/tty-ask-password-agent.c
index 7a90e6507f..fa4d660215 100644
--- a/src/tty-ask-password-agent/tty-ask-password-agent.c
+++ b/src/tty-ask-password-agent/tty-ask-password-agent.c
@@ -538,7 +538,7 @@ static int show_passwords(void) {
free(p);
if (wall) {
- utmp_wall(wall, wall_tty_match);
+ utmp_wall(wall, NULL, wall_tty_match);
free(wall);
}
}