Fix #8: kernel messages duplicated to console
When building the sysklogd project --without-klogd we must disable the kernel logging to console on Linux. This fix depends on how the sysctl setting `kernel.printk` is configured. The patch only calls the kernel to set console_loglevel to minimum_console_loglevel. See the kernel docs for details: https://www.kernel.org/doc/Documentation/sysctl/kernel.txt Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
parent
a7fe2ef700
commit
8aa2060312
@ -385,6 +385,8 @@ int main(int argc, char *argv[])
|
|||||||
/* Attempt to open kernel log pipe */
|
/* Attempt to open kernel log pipe */
|
||||||
if (opensys(_PATH_KLOG))
|
if (opensys(_PATH_KLOG))
|
||||||
warn("Kernel logging disabled, failed opening %s", _PATH_KLOG);
|
warn("Kernel logging disabled, failed opening %s", _PATH_KLOG);
|
||||||
|
else
|
||||||
|
kern_console_off();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!Foreground) {
|
if (!Foreground) {
|
||||||
@ -2016,6 +2018,10 @@ void die(int signo)
|
|||||||
free(pe);
|
free(pe);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef KLOGD
|
||||||
|
kern_console_on();
|
||||||
|
#endif
|
||||||
|
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,12 @@
|
|||||||
#ifndef SYSKLOGD_SYSLOGD_H_
|
#ifndef SYSKLOGD_SYSLOGD_H_
|
||||||
#define SYSKLOGD_SYSLOGD_H_
|
#define SYSKLOGD_SYSLOGD_H_
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
#include <netdb.h> /* struct addrinfo */
|
#include <netdb.h> /* struct addrinfo */
|
||||||
|
#ifdef __linux__
|
||||||
|
#include <sys/klog.h> /* When building w/o klogd */
|
||||||
|
#endif
|
||||||
#include <sys/param.h> /* MAXHOSTNAMELEN */
|
#include <sys/param.h> /* MAXHOSTNAMELEN */
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/un.h> /* struct sockaddr_un */
|
#include <sys/un.h> /* struct sockaddr_un */
|
||||||
@ -141,6 +146,23 @@
|
|||||||
(((d)->s6_addr32[2] ^ (a)->s6_addr32[2]) & (m)->s6_addr32[2]) == 0 && \
|
(((d)->s6_addr32[2] ^ (a)->s6_addr32[2]) & (m)->s6_addr32[2]) == 0 && \
|
||||||
(((d)->s6_addr32[3] ^ (a)->s6_addr32[3]) & (m)->s6_addr32[3]) == 0 )
|
(((d)->s6_addr32[3] ^ (a)->s6_addr32[3]) & (m)->s6_addr32[3]) == 0 )
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When building without klogd on Linux systems we use these klogctl(2)
|
||||||
|
* commands to control kernel log messages to console.
|
||||||
|
*/
|
||||||
|
#define SYSLOG_ACTION_CLOSE 0
|
||||||
|
#define SYSLOG_ACTION_OPEN 1
|
||||||
|
#define SYSLOG_ACTION_CONSOLE_OFF 6
|
||||||
|
#define SYSLOG_ACTION_CONSOLE_ON 7
|
||||||
|
|
||||||
|
#ifdef __linux__
|
||||||
|
#define kern_console_off() klogctl(SYSLOG_ACTION_CONSOLE_OFF, NULL, 0)
|
||||||
|
#define kern_console_on() klogctl(SYSLOG_ACTION_CONSOLE_ON, NULL, 0)
|
||||||
|
#else
|
||||||
|
#define kern_console_off() do { } while (0)
|
||||||
|
#define kern_console_on() do { } while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Flags to logmsg().
|
* Flags to logmsg().
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user