]> ruderich.org/simon Gitweb - wall-notify/wall-notify.git/commitdiff
add option -m to allow wall messages from normal users
authorSimon Ruderich <simon@ruderich.org>
Sat, 17 May 2014 20:40:02 +0000 (22:40 +0200)
committerSimon Ruderich <simon@ruderich.org>
Sat, 17 May 2014 21:03:36 +0000 (23:03 +0200)
Per default only messages from root are allowed.

src/wall-notify.c

index bbc783b5e884514ca1f793da674ba22d71bc5415..ab1c868fdfa18245e03b38a716b02931c1e15643 100644 (file)
@@ -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] <cmd args..>\n", argv0);
+    fprintf(stderr, "usage: %s [-X] [-m] <cmd args..>\n", argv0);
     fprintf(stderr, "Pass wall messages to <cmd args..>.\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);