mirror of
https://github.com/systemd/systemd.git
synced 2024-12-25 01:34:28 +03:00
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'.
This commit is contained in:
parent
5a4d665ad6
commit
9003d9b0d6
@ -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)
|
||||
|
@ -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));
|
||||
|
@ -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");
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user