]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
agetty: make sure that reload file exists
authorKarel Zak <kzak@redhat.com>
Mon, 9 Mar 2015 11:26:55 +0000 (12:26 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 9 Mar 2015 11:26:55 +0000 (12:26 +0100)
agetty monitors /run/agetty.reload file, unfortunately if the file
does not exist when agetty starts up then "agetty" --reload does not
work. This patch forces agetty to create the file before inotify
is enabled.

Reported-by: Sitsofe Wheeler <sitsofe@gmail.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
term-utils/agetty.c

index 0d7bd1db72bb8ee59e76116975a6b5b824d15b03..9ee32d246a3190b07e7c33cbdfa8594ff296e137 100644 (file)
@@ -1667,11 +1667,22 @@ static int wait_for_term_input(int fd)
                return 1;
 
        if (inotify_fd == AGETTY_RELOAD_FDNONE) {
+               /* make sure the reload trigger file exists */
+               int reload_fd = open(AGETTY_RELOAD_FILENAME,
+                                       O_CREAT|O_CLOEXEC|O_RDONLY,
+                                       S_IRUSR|S_IWUSR);
+
                /* initialize reload trigger inotify stuff */
-               inotify_fd = inotify_init1(IN_NONBLOCK | IN_CLOEXEC);
-               if (inotify_fd > 0)
-                       inotify_add_watch(inotify_fd, AGETTY_RELOAD_FILENAME,
+               if (reload_fd >= 0) {
+                       inotify_fd = inotify_init1(IN_NONBLOCK | IN_CLOEXEC);
+                       if (inotify_fd > 0)
+                               inotify_add_watch(inotify_fd, AGETTY_RELOAD_FILENAME,
                                          IN_ATTRIB | IN_MODIFY);
+
+                       close(reload_fd);
+               } else
+                       log_warn(_("failed to create reload file: %s: %m"),
+                                       AGETTY_RELOAD_FILENAME);
        }
 
        FD_ZERO(&rfds);
@@ -2496,8 +2507,8 @@ static int plymouth_command(const char* arg)
 static void reload_agettys(void)
 {
 #ifdef AGETTY_RELOAD
-       int fd = open(AGETTY_RELOAD_FILENAME, O_CREAT|O_CLOEXEC|O_WRONLY, 0700);
-
+       int fd = open(AGETTY_RELOAD_FILENAME, O_CREAT|O_CLOEXEC|O_WRONLY,
+                                             S_IRUSR|S_IWUSR);
        if (fd < 0)
                err(EXIT_FAILURE, _("cannot open %s"), AGETTY_RELOAD_FILENAME);