]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
logger: do not exit when socket errors are not enforced
authorSami Kerola <kerolasa@iki.fi>
Sun, 19 Jul 2015 20:19:12 +0000 (21:19 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 20 Jul 2015 08:54:44 +0000 (10:54 +0200)
The libc openlog(3) does not have error detection whether unix socket
could be opened.  As a side effect that made it possible to use logger
even if syslogd was not running.  Of course user message in these cases
were lost.  This change makes the logger do behave similar way again, so
that sysvinit scripts can successfully pipe messages to logger when ever.

Addresses: https://bugs.debian.org/787864
Addresses: https://bugs.debian.org/790875
Reported-by: Andreas Beckmann <anbe@debian.org>
Reported-by: Andreas Henriksson <andreas@fatal.se>
Tested-by: Robie Basak <robie.basak@ubuntu.com>
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
misc-utils/logger.c

index 8908dfcc1062fb77d0a7b67481275ba1fbaf2ed7..9947b75e42b3c359f36b2b850c2e45bcdc86a5e6 100644 (file)
@@ -242,9 +242,10 @@ static int unix_socket(struct logger_ctl *ctl, const char *path, const int socke
                if (ctl->unix_socket_errors)
                        err(EXIT_FAILURE, _("socket %s"), path);
                else
-                       /* See --socket-errors manual page entry for
-                        * explanation of this strange exit.  */
-                       exit(EXIT_SUCCESS);
+                       /* openlog(3) compatibility, socket errors are
+                        * not reported, but ignored silently */
+                       ctl->noact = 1;
+                       return -1;
        }
        return fd;
 }
@@ -685,7 +686,7 @@ static void logger_stdin(struct logger_ctl *ctl)
 
 static void logger_close(const struct logger_ctl *ctl)
 {
-       if (close(ctl->fd) != 0)
+       if (ctl->fd != -1 && close(ctl->fd) != 0)
                err(EXIT_FAILURE, _("close failed"));
        free(ctl->hdr);
 }