Fix some compiler warnings emitted by gcc-4.8.0
[oweals/busybox.git] / miscutils / wall.c
index 762f53b728d3f9c0302fa6a83f19a690ef153f20..bb709ee39e8d3697d36d4196b61618c35976675b 100644 (file)
@@ -6,6 +6,18 @@
  * Licensed under GPLv2 or later, see file LICENSE in this source tree.
  */
 
+//config:config WALL
+//config:      bool "wall"
+//config:      default y
+//config:      depends on FEATURE_UTMP
+//config:      help
+//config:        Write a message to all users that are logged in.
+
+/* Needs to be run by root or be suid root - needs to write to /dev/TTY: */
+//applet:IF_WALL(APPLET(wall, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
+
+//kbuild:lib-$(CONFIG_WALL) += wall.o
+
 //usage:#define wall_trivial_usage
 //usage:       "[FILE]"
 //usage:#define wall_full_usage "\n\n"
@@ -22,8 +34,15 @@ int wall_main(int argc UNUSED_PARAM, char **argv)
 {
        struct utmp *ut;
        char *msg;
-       int fd = argv[1] ? xopen(argv[1], O_RDONLY) : STDIN_FILENO;
+       int fd;
 
+       fd = STDIN_FILENO;
+       if (argv[1]) {
+               /* The applet is setuid.
+                * Access to the file must be under user's uid/gid.
+                */
+               fd = xopen_as_uid_gid(argv[1], O_RDONLY, getuid(), getgid());
+       }
        msg = xmalloc_read(fd, NULL);
        if (ENABLE_FEATURE_CLEAN_UP && argv[1])
                close(fd);