diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2007-06-14 13:07:32 +0000 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2007-06-14 13:07:32 +0000 |
commit | 2112ef22ae40b421279221f77140f90e09308c39 (patch) | |
tree | 1e704e1ca6784ddd436963f39f71746e75253278 /klogd.c | |
parent | f925aba4ad669c6b96b348c0761ed0531c6f41b4 (diff) | |
download | rsyslog-2112ef22ae40b421279221f77140f90e09308c39.tar.gz rsyslog-2112ef22ae40b421279221f77140f90e09308c39.tar.xz rsyslog-2112ef22ae40b421279221f77140f90e09308c39.zip |
re-wrote syslog.c from scratch to solve a license compatibility issue,
provide some bug fixes and performance enhancemnts. Also required
changes to klogd.c to support the new interface.
Diffstat (limited to 'klogd.c')
-rw-r--r-- | klogd.c | 200 |
1 files changed, 85 insertions, 115 deletions
@@ -275,6 +275,8 @@ _syscall3(int,ksyslog,int, type, char *, buf, int, len); #include <sys/klog.h> #define ksyslog klogctl #endif +extern int writeSyslogV(int pri, const char *szFmt, va_list va); +extern int writeSyslog(int iPri, const char *szFmt, ...); #ifndef _PATH_KLOG #define _PATH_KLOG "/proc/kmsg" @@ -332,8 +334,84 @@ static void LogProcLine(void); extern int main(int argc, char *argv[]); -static void CloseLogSrc() +extern void Syslog(int priority, char *fmt, ...) +{ + va_list ap; + char *argl; + + if ( debugging ) + { + fputs("Logging line:\n", stderr); + fprintf(stderr, "\tLine: %s\n", fmt); + fprintf(stderr, "\tPriority: %d\n", priority); + } + /* Handle output to a file. */ + if ( output_file != (FILE *) 0 ) { + va_start(ap, fmt); + vfprintf(output_file, fmt, ap); + va_end(ap); + fputc('\n', output_file); + fflush(output_file); + if (!one_shot) + fsync(fileno(output_file)); + return; + } + + /* Output using syslog. */ + if (!strcmp(fmt, "%s")) { + va_start(ap, fmt); + argl = va_arg(ap, char *); + if (argl[0] == '<' && argl[1] && argl[2] == '>') { + switch ( argl[1] ) + { + case '0': + priority = LOG_EMERG; + break; + case '1': + priority = LOG_ALERT; + break; + case '2': + priority = LOG_CRIT; + break; + case '3': + priority = LOG_ERR; + break; + case '4': + priority = LOG_WARNING; + break; + case '5': + priority = LOG_NOTICE; + break; + case '6': + priority = LOG_INFO; + break; + case '7': + default: + priority = LOG_DEBUG; + } + argl += 3; + } + writeSyslog(priority, fmt, argl); + va_end(ap); +#ifdef TESTING + putchar('\n'); +#endif + return; + } + + va_start(ap, fmt); + writeSyslogV(priority, fmt, ap); + va_end(ap); +#ifdef TESTING + printf ("\n"); +#endif + + return; +} + + +static void CloseLogSrc(void) { /* Turn on logging of messages to console. */ ksyslog(7, NULL, 0); @@ -371,10 +449,7 @@ void restart(sig) } -void stop_logging(sig) - - int sig; - +void stop_logging(int sig) { signal(SIGTSTP, stop_logging); change_state = 1; @@ -383,20 +458,14 @@ void stop_logging(sig) } -void stop_daemon(sig) - - int sig; - +void stop_daemon(int sig) { Terminate(); return; } -void reload_daemon(sig) - - int sig; - +void reload_daemon(int sig) { change_state = 1; reload_symbols = 1; @@ -415,7 +484,6 @@ void reload_daemon(sig) static void Terminate() - { CloseLogSrc(); Syslog(LOG_INFO, "Kernel log daemon terminating."); @@ -429,10 +497,7 @@ static void Terminate() exit(1); } -static void SignalDaemon(sig) - - int sig; - +static void SignalDaemon(int sig) { #ifndef TESTING auto int pid = check_pid(PidFile); @@ -445,8 +510,7 @@ static void SignalDaemon(sig) } -static void ReloadSymbols() - +static void ReloadSymbols(void) { if (symbol_lookup) { if ( reload_symbols > 1 ) @@ -459,7 +523,6 @@ static void ReloadSymbols() static void ChangeLogging(void) - { /* Terminate kernel logging. */ if ( terminate == 1 ) @@ -508,11 +571,9 @@ static void ChangeLogging(void) static enum LOGSRC GetKernelLogSrc(void) - { auto struct stat sb; - /* Set level of kernel console messaging.. */ if ( (ksyslog(8, NULL, console_log_level) < 0) && \ (errno == EINVAL) ) @@ -570,87 +631,6 @@ static enum LOGSRC GetKernelLogSrc(void) } -extern void Syslog(int priority, char *fmt, ...) - -{ - va_list ap; - char *argl; - - if ( debugging ) - { - fputs("Logging line:\n", stderr); - fprintf(stderr, "\tLine: %s\n", fmt); - fprintf(stderr, "\tPriority: %d\n", priority); - } - - /* Handle output to a file. */ - if ( output_file != (FILE *) 0 ) - { - va_start(ap, fmt); - vfprintf(output_file, fmt, ap); - va_end(ap); - fputc('\n', output_file); - fflush(output_file); - if (!one_shot) - fsync(fileno(output_file)); - return; - } - - /* Output using syslog. */ - if (!strcmp(fmt, "%s")) - { - va_start(ap, fmt); - argl = va_arg(ap, char *); - if (argl[0] == '<' && argl[1] && argl[2] == '>') - { - switch ( argl[1] ) - { - case '0': - priority = LOG_EMERG; - break; - case '1': - priority = LOG_ALERT; - break; - case '2': - priority = LOG_CRIT; - break; - case '3': - priority = LOG_ERR; - break; - case '4': - priority = LOG_WARNING; - break; - case '5': - priority = LOG_NOTICE; - break; - case '6': - priority = LOG_INFO; - break; - case '7': - default: - priority = LOG_DEBUG; - } - argl += 3; - } - syslog(priority, fmt, argl); - va_end(ap); -#ifdef TESTING - putchar('\n'); -#endif - return; - } - - va_start(ap, fmt); - vsyslog(priority, fmt, ap); - va_end(ap); -#ifdef TESTING - printf ("\n"); -#endif - - return; -} - - /* * Copy characters from ptr to line until a char in the delim * string is encountered or until min( space, len ) chars have @@ -909,7 +889,6 @@ static void LogLine(char *ptr, int len) static void LogKernelLine(void) - { auto int rdcnt; @@ -934,7 +913,6 @@ static void LogKernelLine(void) static void LogProcLine(void) - { auto int rdcnt; @@ -959,12 +937,7 @@ static void LogProcLine(void) } -int main(argc, argv) - - int argc; - - char *argv[]; - +int main(int argc, char *argv[]) { auto int ch, use_output = 0; @@ -1117,9 +1090,6 @@ int main(argc, argv) return(1); } } - else - openlog("kernel", 0, LOG_KERN); - /* Handle one-shot logging. */ if ( one_shot ) |