summaryrefslogtreecommitdiffstats
path: root/misc-utils/logger.c
diff options
context:
space:
mode:
authorSami Kerola2015-07-19 22:19:12 +0200
committerKarel Zak2015-07-20 10:54:44 +0200
commit9b83e7a48d023b2822de930c9408a127654144f1 (patch)
treed00da796a714a524b99bccb55a020fd62cdf7358 /misc-utils/logger.c
parenthwclock: add -D to the man page (diff)
downloadkernel-qcow2-util-linux-9b83e7a48d023b2822de930c9408a127654144f1.tar.gz
kernel-qcow2-util-linux-9b83e7a48d023b2822de930c9408a127654144f1.tar.xz
kernel-qcow2-util-linux-9b83e7a48d023b2822de930c9408a127654144f1.zip
logger: do not exit when socket errors are not enforced
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>
Diffstat (limited to 'misc-utils/logger.c')
-rw-r--r--misc-utils/logger.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/misc-utils/logger.c b/misc-utils/logger.c
index 8908dfcc1..9947b75e4 100644
--- a/misc-utils/logger.c
+++ b/misc-utils/logger.c
@@ -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);
}