Sat Oct 10 20:01:48 CEST 1998: Martin Schulze <joey@infodrom.north.de>

Added support for TESTING define which will turn klogd into
      stdio-mode used for debugging.

  Mon Oct 12 13:01:27 MET DST 1998: Martin Schulze <joey@infodrom.north.de>
      Used unsigned long and strtoul() to resolve kernel oops symbols.
This commit is contained in:
Joey Schulze 1998-10-12 16:38:30 +00:00
parent 0e4915d405
commit 6abd86e133

33
klogd.c
View File

@ -197,10 +197,17 @@
* unevaluated priorities I've worked out a real fix that strips * unevaluated priorities I've worked out a real fix that strips
* %'s to an even number which is harmless for printf. * %'s to an even number which is harmless for printf.
* *
* Sat Oct 10 20:01:48 CEST 1998: Martin Schulze <joey@infodrom.north.de>
* Added support for TESTING define which will turn klogd into
* stdio-mode used for debugging.
*
* Mon Apr 13 18:18:45 CEST 1998: Martin Schulze <joey@infodrom.north.de> * Mon Apr 13 18:18:45 CEST 1998: Martin Schulze <joey@infodrom.north.de>
* Modified System.map read function to try all possible map * Modified System.map read function to try all possible map
* files until a file with matching version is found. Added support for * files until a file with matching version is found. Added support for
* Debian release. * Debian release.
*
* Mon Oct 12 13:01:27 MET DST 1998: Martin Schulze <joey@infodrom.north.de>
* Used unsigned long and strtoul() to resolve kernel oops symbols.
*/ */
@ -218,7 +225,9 @@
#include <stdlib.h> #include <stdlib.h>
#include "klogd.h" #include "klogd.h"
#include "ksyms.h" #include "ksyms.h"
#ifndef TESTING
#include "pidfile.h" #include "pidfile.h"
#endif
#include "version.h" #include "version.h"
#define __LIBRARY__ #define __LIBRARY__
@ -234,11 +243,13 @@ _syscall3(int,ksyslog,int, type, char *, buf, int, len);
#define LOG_BUFFER_SIZE 4096 #define LOG_BUFFER_SIZE 4096
#define LOG_LINE_LENGTH 1024 #define LOG_LINE_LENGTH 1024
#ifndef TESTING
#if defined(FSSTND) #if defined(FSSTND)
static char *PidFile = _PATH_VARRUN "klogd.pid"; static char *PidFile = _PATH_VARRUN "klogd.pid";
#else #else
static char *PidFile = "/etc/klogd.pid"; static char *PidFile = "/etc/klogd.pid";
#endif #endif
#endif
static int kmsg, static int kmsg,
change_state = 0, change_state = 0,
@ -371,7 +382,9 @@ static void Terminate()
if ( output_file != (FILE *) 0 ) if ( output_file != (FILE *) 0 )
fclose(output_file); fclose(output_file);
closelog(); closelog();
#ifndef TESTING
(void) remove_pid(PidFile); (void) remove_pid(PidFile);
#endif
exit(1); exit(1);
} }
@ -380,9 +393,13 @@ static void SignalDaemon(sig)
int sig; int sig;
{ {
#ifndef TESTING
auto int pid = check_pid(PidFile); auto int pid = check_pid(PidFile);
kill(pid, sig); kill(pid, sig);
#else
kill(getpid(), sig);
#endif
return; return;
} }
@ -490,6 +507,7 @@ static enum LOGSRC GetKernelLogSrc(void)
return(kernel); return(kernel);
} }
#ifndef TESTING
if ( (kmsg = open(_PATH_KLOG, O_RDONLY)) < 0 ) if ( (kmsg = open(_PATH_KLOG, O_RDONLY)) < 0 )
{ {
fprintf(stderr, "klogd: Cannot open proc file system, " \ fprintf(stderr, "klogd: Cannot open proc file system, " \
@ -497,6 +515,9 @@ static enum LOGSRC GetKernelLogSrc(void)
ksyslog(7, NULL, 0); ksyslog(7, NULL, 0);
exit(1); exit(1);
} }
#else
kmsg = fileno(stdin);
#endif
#ifdef DEBRELEASE #ifdef DEBRELEASE
Syslog(LOG_INFO, "klogd %s-%s#%s, log source = %s started.", \ Syslog(LOG_INFO, "klogd %s-%s#%s, log source = %s started.", \
@ -570,6 +591,9 @@ extern void Syslog(int priority, char *fmt, ...)
va_start(ap, fmt); va_start(ap, fmt);
vsyslog(priority, fmt, ap); vsyslog(priority, fmt, ap);
va_end(ap); va_end(ap);
#ifdef TESTING
printf ("\n");
#endif
return; return;
} }
@ -769,12 +793,12 @@ static void LogLine(char *ptr, int len)
{ {
auto int sym_space; auto int sym_space;
auto int value; unsigned long value;
auto struct symbol sym; auto struct symbol sym;
auto char *symbol; auto char *symbol;
*(line-1) = 0; /* null terminate the address string */ *(line-1) = 0; /* null terminate the address string */
value = strtol(sym_start+1, (char **) 0, 16); value = strtoul(sym_start+1, (char **) 0, 16);
*(line-1) = '>'; /* put back delim */ *(line-1) = '>'; /* put back delim */
symbol = LookupSymbol(value, &sym); symbol = LookupSymbol(value, &sym);
@ -879,7 +903,9 @@ int main(argc, argv)
auto char *log_level = (char *) 0, auto char *log_level = (char *) 0,
*output = (char *) 0; *output = (char *) 0;
#ifndef TESTING
chdir ("/"); chdir ("/");
#endif
/* Parse the command-line. */ /* Parse the command-line. */
while ((ch = getopt(argc, argv, "c:df:iIk:nopsvx")) != EOF) while ((ch = getopt(argc, argv, "c:df:iIk:nopsvx")) != EOF)
switch((char)ch) switch((char)ch)
@ -938,6 +964,7 @@ int main(argc, argv)
} }
#ifndef TESTING
/* /*
* The following code allows klogd to auto-background itself. * The following code allows klogd to auto-background itself.
* What happens is that the program forks and the parent quits. * What happens is that the program forks and the parent quits.
@ -991,7 +1018,7 @@ int main(argc, argv)
fputs("klogd: Already running.\n", stderr); fputs("klogd: Already running.\n", stderr);
Terminate(); Terminate();
} }
#endif
/* Signal setups. */ /* Signal setups. */
for (ch= 1; ch < NSIG; ++ch) for (ch= 1; ch < NSIG; ++ch)