From 034afb1ec2f0079a0880a19871548b3f220b1d98 Mon Sep 17 00:00:00 2001 From: Simon Ruderich Date: Sat, 17 May 2014 22:40:02 +0200 Subject: [PATCH] add option -m to allow wall messages from normal users Per default only messages from root are allowed. --- src/wall-notify.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/wall-notify.c b/src/wall-notify.c index bbc783b..ab1c868 100644 --- a/src/wall-notify.c +++ b/src/wall-notify.c @@ -67,7 +67,7 @@ static void setup_signals(void) { sigaction(SIGUSR2, &action, NULL); } -static int open_tty(void) { +static int open_tty(int public) { int ptm; const char *name; @@ -81,6 +81,7 @@ static int open_tty(void) { /* Prevent write access for other users so they can't use wall to send * messages to this program. */ + if (!public) { name = ptsname(ptm); if (!name) { return -1; @@ -88,6 +89,7 @@ static int open_tty(void) { if (chmod(name, S_IRUSR | S_IWUSR) != 0) { return -1; } + } if (unlockpt(ptm) != 0) { return -1; @@ -359,10 +361,11 @@ static void *x11_event_loop_thread(void *unused) { #endif static void usage(const char *argv0) { - fprintf(stderr, "usage: %s [-X] \n", argv0); + fprintf(stderr, "usage: %s [-X] [-m] \n", argv0); fprintf(stderr, "Pass wall messages to .\n"); fprintf(stderr, "\n"); fprintf(stderr, "-X quit when the current X session terminates\n"); + fprintf(stderr, "-m allow messages from normal users (like `mesg y`)\n"); #ifdef DONT_USE_X11 fprintf(stderr, "\n"); fprintf(stderr, "compiled without X11 support, -X disabled\n"); @@ -372,7 +375,7 @@ static void usage(const char *argv0) { int main(int argc, char **argv) { - int option, enable_x11; + int option, enable_x11, mesg_yes; int ptm, pts; char *name; @@ -380,6 +383,7 @@ int main(int argc, char **argv) { opterr = 0; enable_x11 = 0; + mesg_yes = 0; /* * Glibc violates POSIX by default and skips over non-option arguments and @@ -388,11 +392,13 @@ int main(int argc, char **argv) { * the optstring with "+" fixes this behaver. This is not POSIX * compatible, but the option should be ignored on other systems. */ - while ((option = getopt(argc, argv, "+Xh")) != -1) { + while ((option = getopt(argc, argv, "+Xmh")) != -1) { switch (option) { case 'X': enable_x11 = 1; break; + case 'm': + mesg_yes = 1; case 'h': usage(argv[0]); break; @@ -411,7 +417,7 @@ int main(int argc, char **argv) { /* Arguments for notification program. */ argv += optind; - ptm = open_tty(); + ptm = open_tty(mesg_yes); if (ptm < 0) { perror("open_tty"); exit(EXIT_FAILURE); -- 2.43.2