]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
misc: syslog: Fix calls to openlog() with LOG_KERN facility (BZ #3604)
authorDan Raymond <draymond@foxvalley.net>
Tue, 13 Apr 2021 13:26:12 +0000 (10:26 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 13 Apr 2021 19:33:27 +0000 (16:33 -0300)
POSIX states for syslog [1]:

  "Values of the priority argument are formed by OR'ing together a
  severity-level value and an optional facility value. If no
  facility value is specified, the current default facility value is
  used."

So the patch fixes an existing violation of the openlog interface contract
where it is ignoring the facility argument when the value is zero

It allows the use LOG_KERN by calling openlog prior syslog usage.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
[1] https://pubs.opengroup.org/onlinepubs/9699919799/functions/syslog.html

misc/syslog.c

index 2cc63ef287a71fc6447774773adbffddaae514f3..bb30cd963a239fa63af05ebde1be77182ac5d0e0 100644 (file)
@@ -285,7 +285,7 @@ __vsyslog_internal(int pri, const char *fmt, va_list ap,
 
        /* Get connected, output the message to the local logger. */
        if (!connected)
-               openlog_internal(LogTag, LogStat | LOG_NDELAY, 0);
+               openlog_internal(NULL, LogStat | LOG_NDELAY, LogFacility);
 
        /* If we have a SOCK_STREAM connection, also send ASCII NUL as
           a record terminator.  */
@@ -299,7 +299,7 @@ __vsyslog_internal(int pri, const char *fmt, va_list ap,
                /* Try to reopen the syslog connection.  Maybe it went
                   down.  */
                closelog_internal ();
-               openlog_internal(LogTag, LogStat | LOG_NDELAY, 0);
+               openlog_internal(NULL, LogStat | LOG_NDELAY, LogFacility);
              }
 
            if (!connected || __send(LogFile, buf, bufsize, send_flags) < 0)
@@ -343,7 +343,7 @@ openlog_internal(const char *ident, int logstat, int logfac)
        if (ident != NULL)
                LogTag = ident;
        LogStat = logstat;
-       if (logfac != 0 && (logfac &~ LOG_FACMASK) == 0)
+       if ((logfac &~ LOG_FACMASK) == 0)
                LogFacility = logfac;
 
        int retry = 0;