- from PLD
authorMarcin Krol <hawk@tld-linux.org>
Mon, 27 Apr 2015 10:33:25 +0000 (10:33 +0000)
committerMarcin Krol <hawk@tld-linux.org>
Mon, 27 Apr 2015 10:33:25 +0000 (10:33 +0000)
20 files changed:
klogd.init [new file with mode: 0644]
klogd.service [new file with mode: 0644]
klogd.sysconfig [new file with mode: 0644]
sysklogd-alpha.patch [new file with mode: 0644]
sysklogd-alphafoo.patch [new file with mode: 0644]
sysklogd-bind.patch [new file with mode: 0644]
sysklogd-install.patch [new file with mode: 0644]
sysklogd-ksyms.patch [new file with mode: 0644]
sysklogd-openlog.patch [new file with mode: 0644]
sysklogd-opt.patch [new file with mode: 0644]
sysklogd-security.patch [new file with mode: 0644]
sysklogd-sparc.patch [new file with mode: 0644]
sysklogd.spec [new file with mode: 0644]
syslog.conf [new file with mode: 0644]
syslog.init [new file with mode: 0644]
syslog.logrotate [new file with mode: 0644]
syslog.service [new file with mode: 0644]
syslog.sysconfig [new file with mode: 0644]
syslogd-listfiles.8 [new file with mode: 0644]
syslogd-listfiles.sh [new file with mode: 0644]

diff --git a/klogd.init b/klogd.init
new file mode 100644 (file)
index 0000000..25fe8b2
--- /dev/null
@@ -0,0 +1,75 @@
+#!/bin/sh
+#
+# klogd                Starts klogd.
+#
+# chkconfig:   2345 31 69
+# description: Klogd catches kernel messages and sends it to syslog daemon. \
+#              It is a good idea to always run klogd.
+
+
+# Source function library
+. /etc/rc.d/init.d/functions
+
+# Set defaults
+CONSOLELOG_LEVEL=4
+
+# Get service config
+[ -f /etc/sysconfig/klogd ] && . /etc/sysconfig/klogd
+
+if [ -n "$CONSOLELOG_LEVEL" ]; then
+       OPTIONS="$OPTIONS -c $CONSOLELOG_LEVEL"
+fi
+
+if [ -n "$RUNAS" ]; then
+       OPTIONS="$OPTIONS -u $RUNAS"
+fi
+
+RETVAL=0
+# See how we were called.
+case "$1" in
+  start)
+       # Check if the service is already running?
+       if [ ! -f /var/lock/subsys/klogd ]; then
+               msg_starting "Kernel logger"
+               daemon klogd $OPTIONS
+               RETVAL=$?
+               [ $RETVAL -eq 0 ] && touch /var/lock/subsys/klogd
+       else
+               msg_already_running "Kernel logger"
+       fi
+       ;;
+  stop)
+       if [ -f /var/lock/subsys/klogd ]; then
+               msg_stopping "Kernel logger"
+               killproc klogd
+               /sbin/klogd -r
+               rm -f /var/lock/subsys/klogd >/dev/null 2>&1
+       else
+               msg_not_running "Kernel logger"
+       fi
+       ;;
+  status)
+       status klogd
+       exit $?
+       ;;
+  restart)
+       $0 stop
+       $0 start
+       exit $?
+       ;;
+  reload|force-reload)
+       if [ -f /var/lock/subsys/klogd ]; then
+               msg_reloading "Kernel logger"
+               killproc klogd -USR2
+               RETVAL=$?
+       else
+               msg_not_running "Kernel logger"
+               exit 7
+       fi
+       ;;
+  *)
+       msg_usage "$0 {start|stop|restart|reload|force-reload|status}"
+       exit 3
+esac
+
+exit $RETVAL
diff --git a/klogd.service b/klogd.service
new file mode 100644 (file)
index 0000000..3fdcb6c
--- /dev/null
@@ -0,0 +1,12 @@
+[Unit]                                                                                                                                                                           
+Description=System Kernel Logging Service
+After=syslog.service
+
+[Service]
+EnvironmentFile=/etc/sysconfig/klogd
+ExecStart=/sbin/service klogd start
+ExecStop=/sbin/service klogd stop
+Type=forking
+
+[Install]
+WantedBy=multi-user.target
diff --git a/klogd.sysconfig b/klogd.sysconfig
new file mode 100644 (file)
index 0000000..1a94098
--- /dev/null
@@ -0,0 +1,7 @@
+# klog console loggin level. Look at /usr/include/linux/kernel.h for values.
+# [1-7]
+CONSOLELOG_LEVEL=1
+
+# run klogd as this user.
+# note it doesn't work (yet?) as non-root: http://glen.alkohol.ee/pld/klogd-syslog.txt.bz2
+#RUNAS=syslog
diff --git a/sysklogd-alpha.patch b/sysklogd-alpha.patch
new file mode 100644 (file)
index 0000000..5dfdb90
--- /dev/null
@@ -0,0 +1,31 @@
+--- sysklogd-1.3-31/syslogd.c.alpha    Wed Feb 24 23:49:03 1999
++++ sysklogd-1.3-31/syslogd.c  Wed Feb 24 23:52:57 1999
+@@ -607,8 +607,8 @@
+  * in seconds after previous message is logged.  After each flush,
+  * we move to the next interval until we reach the largest.
+  */
+-int   repeatinterval[] = { 30, 60 };  /* # of secs before flush */
+-#define       MAXREPEAT ((sizeof(repeatinterval) / sizeof(repeatinterval[0])) - 1)
++time_t        repeatinterval[] = { 30, 60 };  /* # of secs before flush */
++#define       MAXREPEAT ((int) ((sizeof(repeatinterval) / sizeof(repeatinterval[0])) - 1))
+ #define       REPEATTIME(f)   ((f)->f_time + repeatinterval[(f)->f_repeatcount])
+ #define       BACKOFF(f)      { if (++(f)->f_repeatcount > MAXREPEAT) \
+                                (f)->f_repeatcount = MAXREPEAT; \
+@@ -713,7 +713,7 @@
+ char **crunch_list(char *list);
+ int usage(void);
+ void untty(void);
+-void printchopped(const char *hname, char *msg, int len, int fd);
++void printchopped(const char *hname, char *msg, size_t len, int fd);
+ void printline(const char *hname, char *msg);
+ void printsys(char *msg);
+ void logmsg(int pri, char *msg, const char *from, int flags);
+@@ -1347,7 +1347,7 @@
+ void printchopped(hname, msg, len, fd)
+       const char *hname;
+       char *msg;
+-      int len;
++        size_t len;
+       int fd;
+ {
+       auto int ptlngth;
diff --git a/sysklogd-alphafoo.patch b/sysklogd-alphafoo.patch
new file mode 100644 (file)
index 0000000..a90c474
--- /dev/null
@@ -0,0 +1,13 @@
+--- sysklogd-1.3-31/klogd.c.alphafoo   Thu Feb 25 11:12:49 1999
++++ sysklogd-1.3-31/klogd.c    Thu Feb 25 11:13:39 1999
+@@ -245,6 +245,10 @@
+ #define ksyslog klogctl
+ #endif
++#ifndef _PATH_KLOG
++#define _PATH_KLOG  "/proc/kmsg"
++#endif
++
+ #define LOG_BUFFER_SIZE 4096
+ #define LOG_LINE_LENGTH 1000
diff --git a/sysklogd-bind.patch b/sysklogd-bind.patch
new file mode 100644 (file)
index 0000000..deb5a07
--- /dev/null
@@ -0,0 +1,101 @@
+--- sysklogd-1.5/sysklogd.8.orig       2007-05-27 14:16:17.000000000 +0200
++++ sysklogd-1.5/sysklogd.8    2007-09-03 23:39:50.712669654 +0200
+@@ -15,6 +15,9 @@
+ .I config file
+ ]
+ .RB [ " \-h " ] 
++.RB [ " \-i "
++.I IP address
++]
+ .RB [ " \-l "
+ .I hostlist
+ ]
+@@ -103,6 +106,13 @@
+ This can cause syslog loops that fill up hard disks quite fast and
+ thus needs to be used with caution.
+ .TP
++.BI "\-i " "IP address"
++If
++.B syslogd
++is configured to accept log input from a UDP port, specify an IP address
++to bind to, rather than the default of INADDR_ANY.  The address must be in
++dotted quad notation, DNS host names are not allowed.
++.TP
+ .BI "\-l " "hostlist"
+ Specify a hostname that should be logged only with its simple hostname
+ and not the fqdn.  Multiple hosts may be specified using the colon
+diff -ur sysklogd-1.4.1.orig/syslogd.c sysklogd-1.4.1/syslogd.c
+--- sysklogd-1.4.1.orig/syslogd.c      Sun Mar 11 22:40:10 2001
++++ sysklogd-1.4.1/syslogd.c   Mon Oct  8 07:24:41 2001
+@@ -736,6 +736,8 @@
+ int   NoHops = 1;             /* Can we bounce syslog messages through an
+                                  intermediate host. */
++char  *bind_addr = NULL;      /* bind UDP port to this interface only */
++
+ extern        int errno;
+ /* Function prototypes. */
+@@ -829,7 +831,7 @@
+               funix[i]  = -1;
+       }
+-      while ((ch = getopt(argc, argv, "a:dhf:l:m:np:rs:v")) != EOF)
++      while ((ch = getopt(argc, argv, "a:dhf:i:l:m:np:rs:v")) != EOF)
+               switch((char)ch) {
+               case 'a':
+                       if (nfunix < MAXFUNIX)
+@@ -846,9 +848,17 @@
+               case 'h':
+                       NoHops = 0;
+                       break;
++              case 'i':
++                      if (bind_addr) {
++                              fprintf(stderr, "Only one -i argument allowed, "
++                                      "the first one is taken.\n");
++                              break;
++                      }
++                      bind_addr = optarg;
++                      break;
+               case 'l':
+                       if (LocalHosts) {
+-                              fprintf (stderr, "Only one -l argument allowed," \
++                              fprintf(stderr, "Only one -l argument allowed, "
+                                       "the first one is taken.\n");
+                               break;
+                       }
+@@ -1175,7 +1185,7 @@
+ int usage()
+ {
+       fprintf(stderr, "usage: syslogd [-drvh] [-l hostlist] [-m markinterval] [-n] [-p path]\n" \
+-              " [-s domainlist] [-f conffile]\n");
++              " [-s domainlist] [-f conffile] [-i IP address]\n");
+       exit(1);
+ }
+@@ -1217,15 +1227,22 @@
+       int fd, on = 1;
+       struct sockaddr_in sin;
++      memset(&sin, 0, sizeof(sin));
++      sin.sin_family = AF_INET;
++      sin.sin_port = LogPort;
++      if (bind_addr) {
++              if (!inet_aton(bind_addr, &sin.sin_addr)) {
++                      logerror("syslog: not a valid IP address to bind to.");
++                      return -1;
++              }
++      }
++
+       fd = socket(AF_INET, SOCK_DGRAM, 0);
+       if (fd < 0) {
+               logerror("syslog: Unknown protocol, suspending inet service.");
+               return fd;
+       }
+-      memset(&sin, 0, sizeof(sin));
+-      sin.sin_family = AF_INET;
+-      sin.sin_port = LogPort;
+       if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, \
+                      (char *) &on, sizeof(on)) < 0 ) {
+               logerror("setsockopt(REUSEADDR), suspending inet");
diff --git a/sysklogd-install.patch b/sysklogd-install.patch
new file mode 100644 (file)
index 0000000..a4137de
--- /dev/null
@@ -0,0 +1,34 @@
+--- sysklogd-1.5/Makefile.orig 2007-09-03 23:47:45.207709586 +0200
++++ sysklogd-1.5/Makefile      2007-09-03 23:49:39.926247023 +0200
+@@ -30,8 +30,8 @@
+ INSTALL = /usr/bin/install
+ # Destination paths, set prefix=/opt if required
+-BINDIR = $(prefix)/usr/sbin
+-MANDIR = $(prefix)/usr/share/man
++BINDIR = $(DESTDIR)/usr/sbin
++MANDIR = $(DESTDIR)/usr/share/man
+ # There is one report that under an all ELF system there may be a need to
+ # explicilty link with libresolv.a.  If linking syslogd fails you may wish
+@@ -127,14 +127,14 @@
+       rm -f syslogd klogd ksym syslog_tst oops_test TAGS tsyslogd tklogd
+ install_exec: syslogd klogd
+-      ${INSTALL} -m 500 -s syslogd ${BINDIR}/syslogd
+-      ${INSTALL} -m 500 -s klogd ${BINDIR}/klogd
++      ${INSTALL} -m 755 syslogd ${BINDIR}/syslogd
++      ${INSTALL} -m 755 klogd ${BINDIR}/klogd
+ install_man:
+-      ${INSTALL} -o ${MAN_USER} -g ${MAN_GROUP} -m ${MAN_PERMS} sysklogd.8 ${MANDIR}/man8/sysklogd.8
+-      ${INSTALL} -o ${MAN_USER} -g ${MAN_GROUP} -m ${MAN_PERMS} syslogd.8 ${MANDIR}/man8/syslogd.8
+-      ${INSTALL} -o ${MAN_USER} -g ${MAN_GROUP} -m ${MAN_PERMS} syslog.conf.5 ${MANDIR}/man5/syslog.conf.5
+-      ${INSTALL} -o ${MAN_USER} -g ${MAN_GROUP} -m ${MAN_PERMS} klogd.8 ${MANDIR}/man8/klogd.8
++      ${INSTALL} -m ${MAN_PERMS} sysklogd.8 ${MANDIR}/man8/sysklogd.8
++      ${INSTALL} -m ${MAN_PERMS} syslogd.8 ${MANDIR}/man8/syslogd.8
++      ${INSTALL} -m ${MAN_PERMS} syslog.conf.5 ${MANDIR}/man5/syslog.conf.5
++      ${INSTALL} -m ${MAN_PERMS} klogd.8 ${MANDIR}/man8/klogd.8
+ obj-m += oops.o
diff --git a/sysklogd-ksyms.patch b/sysklogd-ksyms.patch
new file mode 100644 (file)
index 0000000..f860270
--- /dev/null
@@ -0,0 +1,42 @@
+diff -urN sysklogd-1.3-31/klogd.c sysklogd-1.3-31.new/klogd.c
+--- sysklogd-1.3-31/klogd.c    Tue Nov 30 10:55:55 1999
++++ sysklogd-1.3-31.new/klogd.c        Tue Nov 30 10:44:21 1999
+@@ -810,8 +810,7 @@
+                value  = strtoul(sym_start+1, (char **) 0, 16);
+                *(line-1) = '>';  /* put back delim */
+-               symbol = LookupSymbol(value, &sym);
+-               if ( !symbol_lookup || symbol == (char *) 0 )
++               if ( !symbol_lookup || (symbol = LookupSymbol(value, &sym)) == (char *)0 )
+                {
+                   parse_state = PARSING_TEXT;
+                   break;
+@@ -1062,8 +1061,11 @@
+       if ( one_shot )
+       {
+               if (symbol_lookup) {
+-                      InitKsyms(symfile);
+-                      InitMsyms();
++                      symbol_lookup  = (InitKsyms(symfile) == 1);
++                      symbol_lookup |= InitMsyms();
++                      if (symbol_lookup == 0) {
++                              Syslog(LOG_WARNING, "cannot find any symbols, turning off symbol lookups\n");
++                      }
+               }
+               if ( (logsrc = GetKernelLogSrc()) == kernel )
+                       LogKernelLine();
+@@ -1078,8 +1080,11 @@
+ #endif
+       logsrc = GetKernelLogSrc();
+       if (symbol_lookup) {
+-              InitKsyms(symfile);
+-              InitMsyms();
++              symbol_lookup  = (InitKsyms(symfile) == 1);
++              symbol_lookup |= InitMsyms();
++              if (symbol_lookup == 0) {
++                      Syslog(LOG_WARNING, "cannot find any symbols, turning off symbol lookups\n");
++              }
+       }
+         /* The main loop. */
+
diff --git a/sysklogd-openlog.patch b/sysklogd-openlog.patch
new file mode 100644 (file)
index 0000000..25b676d
--- /dev/null
@@ -0,0 +1,56 @@
+diff -Nur sysklogd-1.4.1.orig/syslog.c sysklogd-1.4.1/syslog.c
+--- sysklogd-1.4.1.orig/syslog.c       Sun Mar 11 20:35:51 2001
++++ sysklogd-1.4.1/syslog.c    Wed Mar 21 04:49:48 2001
+@@ -72,6 +72,7 @@
+ #define       _PATH_LOGNAME   "/dev/log"
++static int    LogType = SOCK_DGRAM;   /* type of socket connection */
+ static int    LogFile = -1;           /* fd for log */
+ static int    connected;              /* have done connect */
+ static int    LogStat = 0;            /* status bits, set by openlog() */
+@@ -206,22 +207,33 @@
+               LogFacility = logfac;
+ #ifndef TESTING
+-      if (LogFile == -1) {
+-              SyslogAddr.sa_family = AF_UNIX;
+-              strncpy(SyslogAddr.sa_data, _PATH_LOGNAME,
+-                  sizeof(SyslogAddr.sa_data));
+-              if (LogStat & LOG_NDELAY) {
+-                      LogFile = socket(AF_UNIX, SOCK_DGRAM, 0);
+-/*                    fcntl(LogFile, F_SETFD, 1); */
++      while (1) {
++              if (LogFile == -1) {
++                      SyslogAddr.sa_family = AF_UNIX;
++                      strncpy(SyslogAddr.sa_data, _PATH_LOGNAME,
++                          sizeof(SyslogAddr.sa_data));
++                      if (LogStat & LOG_NDELAY) {
++                              LogFile = socket(AF_UNIX, LogType, 0);
++/*                            fcntl(LogFile, F_SETFD, 1); */
++                      }
++              }
++              if (LogFile != -1 && !connected) {
++                      if (connect(LogFile, &SyslogAddr, sizeof(SyslogAddr.sa_family)+
++                          strlen(SyslogAddr.sa_data)) == -1) {
++                              close(LogFile);
++                              LogFile = -1;
++                              if (LogType == SOCK_DGRAM && errno == EPROTOTYPE) {
++                                      LogType = SOCK_STREAM;
++                                      continue;
++                              }
++                      } else
++                              connected = 1;
+               }
++              break;
+       }
+-      if (LogFile != -1 && !connected &&
+-          connect(LogFile, &SyslogAddr, sizeof(SyslogAddr.sa_family)+
+-                      strlen(SyslogAddr.sa_data)) != -1)
+ #else
+         LogFile = fileno(stdout);
+ #endif
+-              connected = 1;
+ }
+ /*
diff --git a/sysklogd-opt.patch b/sysklogd-opt.patch
new file mode 100644 (file)
index 0000000..3b96057
--- /dev/null
@@ -0,0 +1,11 @@
+--- sysklogd-1.5/Makefile.orig 2007-05-30 17:28:48.000000000 +0200
++++ sysklogd-1.5/Makefile      2007-09-03 23:46:08.526200021 +0200
+@@ -20,7 +20,7 @@
+ CC= gcc
+ #SKFLAGS= -g -DSYSV -Wall
+ #LDFLAGS= -g
+-SKFLAGS= $(RPM_OPT_FLAGS) -O3 -DSYSV -fomit-frame-pointer -Wall -fno-strength-reduce
++SKFLAGS= $(OPTIMIZE) -DSYSV -Wall $(shell getconf LFS_CFLAGS)
+ # -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
+ # -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
+ # $(shell getconf LFS_SKFLAGS)
diff --git a/sysklogd-security.patch b/sysklogd-security.patch
new file mode 100644 (file)
index 0000000..6e656cb
--- /dev/null
@@ -0,0 +1,246 @@
+this file was extracted from trustix sysklogd package
+sysklogd-1.4.1-32tr.src.rpm by glen@pld-linux.org, 2005-08-01
+
+i have no idea who is original author of this patch (feel free to add the
+information here).
+
+diff -Nur sysklogd-1.4.1.orig/klogd.8 sysklogd-1.4.1/klogd.8
+--- sysklogd-1.4.1.orig/klogd.8        Sun Mar 11 20:35:51 2001
++++ sysklogd-1.4.1/klogd.8     Fri Mar 16 14:11:38 2001
+@@ -17,7 +17,11 @@
+ .RB [ " \-f "
+ .I fname
+ ]
++.RB [ " \-u "
++.I username
++]
+ .RB [ " \-iI " ]
++.RB [ " \-r " ]
+ .RB [ " \-n " ]
+ .RB [ " \-o " ]
+ .RB [ " \-p " ]
+@@ -46,11 +50,24 @@
+ .BI "\-f " file
+ Log messages to the specified filename rather than to the syslog facility.
+ .TP
++.BI "\-u " username
++Tells klogd to become the specified user and drop root privileges before
++starting logging. This is useful if you are paranoid about how well we wrote
++this program.
++.TP
+ .BI "\-i \-I"
+ Signal the currently executing klogd daemon.  Both of these switches control
+ the loading/reloading of symbol information.  The \-i switch signals the
+ daemon to reload the kernel module symbols.  The \-I switch signals for a
+ reload of both the static kernel symbols and the kernel module symbols.
++.TP
++.B "\-r"
++Reset kernel logging. You should run
++.B klogd
++with this argument after killing the daemon, if you run the daemon as a non-
++privileged user. This is because
++.B klogd
++will be unable to reset kernel logging automatically in that case.
+ .TP
+ .B "\-n"
+ Avoid auto-backgrounding.  This is needed especially if the
+diff -Nur sysklogd-1.4.1.orig/klogd.c sysklogd-1.4.1/klogd.c
+--- sysklogd-1.4.1.orig/klogd.c        Sun Mar 11 20:40:10 2001
++++ sysklogd-1.4.1/klogd.c     Fri Mar 16 14:38:52 2001
+@@ -275,6 +275,10 @@
+ #define ksyslog klogctl
+ #endif
++/* Support for running as an unprivileged user */
++#include <pwd.h>
++#include <grp.h>
++
+ #define LOG_BUFFER_SIZE 4096
+ #define LOG_LINE_LENGTH 1000
+@@ -308,6 +312,9 @@
+ int debugging = 0;
+ int symbols_twice = 0;
++int drop_privileges = 0;
++uid_t server_uid = 0;
++gid_t server_gid = 0;
+ /* Function prototypes. */
+ extern int ksyslog(int type, char *buf, int len);
+@@ -994,7 +1001,7 @@
+       chdir ("/");
+ #endif
+       /* Parse the command-line. */
+-      while ((ch = getopt(argc, argv, "c:df:iIk:nopsvx2")) != EOF)
++      while ((ch = getopt(argc, argv, "c:df:u:iIk:noprsvx2")) != EOF)
+               switch((char)ch)
+               {
+                   case '2':           /* Print lines with symbols twice. */
+@@ -1010,6 +1017,31 @@
+                       output = optarg;
+                       use_output++;
+                       break;
++                  case 'u':           /* Run as this user */
++                      if (optarg) {
++                          struct passwd *pwd;
++
++                          pwd = getpwnam(optarg);
++                          if (!pwd) {
++                              fprintf(stderr, "Failed to look up user %s " \
++                              "to switch to. Terminating.\n", optarg);
++                          exit(1);
++                          }
++
++                      drop_privileges = 1;
++                      server_uid = pwd->pw_uid;
++                      server_gid = pwd->pw_gid;
++                      } else {
++                          fprintf(stderr, "Must specify user name along " \
++                                          "with -u option.\n");
++                          exit(1);
++                      }
++                      break;
++                  case 'r':           /* Reset logging */
++                      Syslog(LOG_INFO, "Resetting kernel logging.");
++                      CloseLogSrc();
++                      exit(0);
++                      break;
+                   case 'i':           /* Reload module symbols. */
+                       SignalDaemon(SIGUSR1);
+                       return(0);
+@@ -1161,6 +1193,13 @@
+       if (symbol_lookup) {
+               InitKsyms(symfile);
+               InitMsyms();
++      }
++
++      /* Drop privileges if a user name was specified on the command line */
++      if (drop_privileges) {
++              setgroups(0, NULL);
++              setgid(server_gid);
++              setuid(server_uid);
+       }
+         /* The main loop. */
+diff -Nur sysklogd-1.4.1.orig/sysklogd.8 sysklogd-1.4.1/sysklogd.8
+--- sysklogd-1.4.1.orig/sysklogd.8     Sun Mar 11 20:35:51 2001
++++ sysklogd-1.4.1/sysklogd.8  Fri Mar 16 14:40:16 2001
+@@ -29,6 +29,9 @@
+ .RB [ " \-s "
+ .I domainlist
+ ]
++.RB [ " \-u"
++.IB username
++]
+ .RB [ " \-v " ]
+ .LP
+ .SH DESCRIPTION
+@@ -149,6 +152,22 @@
+ is specified and the host logging resolves to satu.infodrom.north.de
+ no domain would be cut, you will have to specify two domains like:
+ .BR "\-s north.de:infodrom.north.de" .
++.TP
++.BI "\-u " "username"
++This causes the
++.B syslogd
++daemon to become the named user before starting up logging. This
++option is useful if you are paranoid about how well we wrote this
++program.
++
++Note that when this option is in use,
++.B syslogd
++will open all log files as root when the daemon is first started;
++however, after a
++.B SIGHUP
++the files will be reopened as the non-privileged user. You should
++take this into account when deciding the ownership of the log
++files.
+ .TP
+ .B "\-v"
+ Print version and exit.
+diff -Nur sysklogd-1.4.1.orig/syslogd.c sysklogd-1.4.1/syslogd.c
+--- sysklogd-1.4.1.orig/syslogd.c      Sun Mar 11 20:40:10 2001
++++ sysklogd-1.4.1/syslogd.c   Fri Mar 16 14:44:02 2001
+@@ -500,6 +500,10 @@
+ #include <paths.h>
+ #endif
++/* Support for running syslogd as non-root user */
++#include <pwd.h>
++#include <grp.h>
++
+ #ifndef UTMP_FILE
+ #ifdef UTMP_FILENAME
+ #define UTMP_FILE UTMP_FILENAME
+@@ -735,6 +739,7 @@
+ char  **LocalHosts = NULL;    /* these hosts are logged with their hostname */
+ int   NoHops = 1;             /* Can we bounce syslog messages through an
+                                  intermediate host. */
++char  *server_user = NULL;    /* user name to run server as, instead of root */
+ extern        int errno;
+@@ -869,7 +869,7 @@
+               funix[i]  = -1;
+       }
+-      while ((ch = getopt(argc, argv, "a:dhf:i:l:m:np:rs:v")) != EOF)
++      while ((ch = getopt(argc, argv, "a:dhf:i:l:m:np:rs:u:v")) != EOF)
+               switch((char)ch) {
+               case 'a':
+                       if (nfunix < MAXFUNIX)
+@@ -874,6 +879,15 @@
+                       }
+                       StripDomains = crunch_list(optarg);
+                       break;
++              case 'u':
++                      if (optarg)
++                              server_user = strdup(optarg);
++                      else {
++                              fprintf (stderr, "Must specify user name " \
++                                               "along with -u option.\n");
++                              exit (1);
++                      }
++                      break;
+               case 'v':
+                       printf("syslogd %s.%s\n", VERSION, PATCHLEVEL);
+                       exit (0);
+@@ -1020,6 +1034,28 @@
+       if (getpid() != ppid)
+               kill (ppid, SIGTERM);
+ #endif
++      /*
++      * Drop privileges if a user name was specified on
++      * the command line.
++      */
++      if (server_user) {
++              struct passwd *pwd;
++
++              pwd = getpwnam(server_user);
++              if (!pwd) {
++                      dprintf("Failed to look up user %s.\n", server_user);
++                      exit(1);
++              }
++
++      /* initgroups should not require the stupid "extra group" thingy */
++              if (initgroups(server_user, pwd->pw_gid)) {
++                      dprintf("Failed to set groups for user %s.\n", server_user);
++                      exit(1);
++              }
++
++              setgid(pwd->pw_gid);
++              setuid(pwd->pw_uid);
++      }
+       /* Main loop begins here. */
+       for (;;) {
+@@ -1255,7 +1255,7 @@
+ int usage()
+ {
+       fprintf(stderr, "usage: syslogd [-drvh] [-l hostlist] [-m markinterval] [-n] [-p path]\n" \
+-              " [-s domainlist] [-f conffile] [-i IP address]\n");
++              " [-s domainlist] [-f conffile] [-u username] [-i IP address]\n");
+       exit(1);
+ }
diff --git a/sysklogd-sparc.patch b/sysklogd-sparc.patch
new file mode 100644 (file)
index 0000000..1d8ee88
--- /dev/null
@@ -0,0 +1,95 @@
+--- sysklogd-1.3/ksym.c.jj     Mon Dec  7 13:04:35 1998
++++ sysklogd-1.3/ksym.c        Mon Dec  7 11:43:10 1998
+@@ -79,6 +79,7 @@
+ #include <stdlib.h>
+ #include <malloc.h>
+ #include <sys/utsname.h>
++#include <ctype.h>
+ #include "klogd.h"
+ #include "ksyms.h"
+@@ -668,6 +669,84 @@ extern char * ExpandKadds(line, el)
+       if ( (num_syms == 0) ||
+            (kp = strstr(line, "[<")) == (char *) 0 )
+       {
++#ifdef __sparc__
++              if (num_syms) {
++                      /*
++                       * On SPARC, register dumps do not have the [< >] characters in it.
++                       */
++                      static struct sparc_tests {
++                              char *str;
++                              int len;
++                      } tests[] = { { "PC: ", 4 },
++                                    { " o7: ", 5 },
++                                    { " ret_pc: ", 9 },
++                                    { " i7: ", 5 },
++                                    { "Caller[", 7 }
++                                  };
++                      int i, j, ndigits;
++                      char *kp2;
++                      for (i = 0; i < 5; i++) {
++                              kp = strstr(line, tests[i].str);
++                              if (!kp) continue;
++                              kp2 = kp + tests[i].len;
++                              if (!isxdigit(*kp2)) continue;
++                              for (ndigits = 1; isxdigit(kp2[ndigits]); ndigits++);
++                              if (ndigits != 8 && ndigits != 16) continue;
++                              /* On sparc64, all kernel addresses are in first 4GB */
++                              if (ndigits == 16) {
++                                      if (strncmp (kp2, "00000000", 8)) continue;
++                                      kp2 += 8;
++                              }
++                              if (!i) {
++                                      char *kp3;
++                                      if (ndigits == 16 && kp > line && kp[-1L] != 'T') continue;
++                                      kp3 = kp2 + 8;
++                                      if (ndigits == 16) {
++                                              if (strncmp (kp3, " TNPC: 00000000", 15) || !isxdigit(kp3[15]))
++                                                      continue;
++                                              kp3 += 15;
++                                      } else {
++                                              if (strncmp (kp3, " NPC: ", 6) || !isxdigit(kp3[6]))
++                                                      continue;
++                                              kp3 += 6;
++                                      }
++                                      for (j = 0; isxdigit(kp3[j]); j++);
++                                      if (j != 8) continue;
++                                      strncpy(elp, line, kp2 + 8 - line);
++                                      elp += kp2 + 8 - line;
++                                      value = strtol(kp2, (char **) 0, 16);
++                                      if ( (symbol = LookupSymbol(value, &sym)) ) {
++                                              if (sym.size)
++                                                      elp += sprintf(elp, " (%s+%d/%d)", symbol, sym.offset, sym.size);
++                                              else
++                                                      elp += sprintf(elp, " (%s)", symbol);
++                                      }
++                                      strncpy(elp, kp2 + 8, kp3 - kp2);
++                                      elp += kp3 - kp2;
++                                      value = strtol(kp3, (char **) 0, 16);
++                                      if ( (symbol = LookupSymbol(value, &sym)) ) {
++                                              if (sym.size)
++                                                      elp += sprintf(elp, " (%s+%d/%d)", symbol, sym.offset, sym.size);
++                                              else
++                                                      elp += sprintf(elp, " (%s)", symbol);
++                                      }
++                                      strcpy(elp, kp3 + 8);
++                              } else {
++                                      strncpy(elp, line, kp2 + 8 - line);
++                                      elp += kp2 + 8 - line;
++                                      value = strtol(kp2, (char **) 0, 16);
++                                      if ( (symbol = LookupSymbol(value, &sym)) ) {
++                                              if (sym.size)
++                                                      elp += sprintf(elp, " (%s+%d/%d)", symbol, sym.offset, sym.size);
++                                              else
++                                                      elp += sprintf(elp, " (%s)", symbol);
++                                      }
++                                      strcpy(elp, kp2 + 8);
++                              }
++                              return el;
++                      }
++              }
++#endif        
+               strcpy(el, line);
+               return(el);
+       }
diff --git a/sysklogd.spec b/sysklogd.spec
new file mode 100644 (file)
index 0000000..1a03b18
--- /dev/null
@@ -0,0 +1,324 @@
+# TODO:
+# - trigger for upgrade from inetutils-syslogd
+Summary:       Linux system and kernel logger
+Summary(de.UTF-8):     Linux-System- und Kerner-Logger
+Summary(es.UTF-8):     Registrador de log del sistema linux
+Summary(fr.UTF-8):     Le système Linux et le logger du noyau
+Summary(pl.UTF-8):     Programy logujące zdarzenia w systemie i jądrze Linuksa
+Summary(pt_BR.UTF-8):  Registrador de log do sistema linux
+Summary(tr.UTF-8):     Linux sistem ve çekirdek kayıt süreci
+Name:          sysklogd
+Version:       1.5
+Release:       7
+License:       GPL v2+
+Group:         Daemons
+Source0:       http://www.infodrom.org/projects/sysklogd/download/%{name}-%{version}.tar.gz
+# Source0-md5: e053094e8103165f98ddafe828f6ae4b
+Source1:       syslog.conf
+Source2:       syslog.init
+Source3:       syslog.logrotate
+Source4:       syslog.sysconfig
+Source5:       klogd.init
+Source6:       klogd.sysconfig
+Source7:       syslogd-listfiles.sh
+Source8:       syslogd-listfiles.8
+Source9:       syslog.service
+Source10:      klogd.service
+Patch0:                %{name}-bind.patch
+Patch1:                %{name}-alpha.patch
+Patch2:                %{name}-alphafoo.patch
+Patch3:                %{name}-opt.patch
+Patch4:                %{name}-sparc.patch
+Patch5:                %{name}-install.patch
+Patch6:                %{name}-openlog.patch
+Patch7:                %{name}-security.patch
+Patch8:                %{name}-ksyms.patch
+URL:           http://www.infodrom.org/projects/sysklogd/
+BuildRequires: rpmbuild(macros) >= 1.268
+BuildRoot:     %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+
+%define                _exec_prefix    /
+%define        _bindir         /usr/sbin
+%define        _sbindir        /sbin
+
+%description
+This is the Linux system and kernel logging program. It is run as a
+daemon (background process) to log messages to different places. These
+are usually things like sendmail logs, security logs, and errors from
+other daemons.
+
+%description -l de.UTF-8
+Dies ist das Linux-System- und Kernel-Protokollierprogramm. Es wird
+als Dämon (Hintergrundprozeß) ausgeführt und protokolliert
+verschiedene Meldungen. Es protokolliert z.B. sendmail- und
+Sicherheits-Protokolle und Fehler von anderen Dämonen.
+
+%description -l es.UTF-8
+Este es el programa de log para el kernel y el sistema Linux. Se
+ejecuta como un daemon (proceso en background) para registrar mensajes
+en diferentes lugares. Estos son generalmente registros del sendmail,
+seguridad, y mensajes de otros daemons.
+
+%description -l fr.UTF-8
+Programme de trace du sytème Linux et du noyau. Il est lancé en démon
+(processus en arrière plan) pour stocker les messages à différents
+endroits. Ce sont généralement des choses comme les traces de
+sendmail, de sécurité et d'erreurs d'autres démons. I
+
+%description -l pl.UTF-8
+Pakiet ten zawiera programy, które są uruchamiane jako demony i służą
+do logowania zdarzeń w systemie i w jądrze Linuksa. Same logi mogą być
+składowane w różnych miejscach (zdalnie i lokalnie). Przeważnie do
+logów trafiają informacje o odbieranej i wysyłanej poczcie np. z
+sendmaila, zdarzenia dotyczące bezpieczeństwa systemu, a także
+informacje o błędach z innych demonów.
+
+%description -l pt_BR.UTF-8
+Este é o programa de log para o kernel e o sistema Linux. Ele roda
+como um daemon (processo em background) para registrar mensagens em
+diferentes lugares. Estes são geralmente registros do sendmail,
+segurança, e mensagens de outros daemons.
+
+%description -l tr.UTF-8
+Bu paket, Linux sistemi ve çekirdeği için kayıt tutan programı içerir.
+Değişik yerlerde mesajların kayıtlarını tutmak içın arkaplanda
+koşturulur. Bu mesajlar, sendmail, güvenlik ve diğer sunucu
+süreçlerinin hatalarıyla ilgili mesajlardır.
+
+%package -n syslog
+Summary:       Linux system logger
+Summary(de.UTF-8):     Linux-System-Logger
+Summary(pl.UTF-8):     Program logujący zdarzenia w systemie Linux
+License:       BSD
+Group:         Daemons
+Requires(post):        fileutils
+Requires(post,preun):  /sbin/chkconfig
+Requires(post,preun):  rc-scripts >= 0.2.0
+Requires(postun):      /usr/sbin/groupdel
+Requires(postun):      /usr/sbin/userdel
+Requires(pre): /usr/lib/rpm/user_group.sh
+Requires(pre): /bin/id
+Requires(pre): /usr/bin/getgid
+Requires(pre): /usr/sbin/groupadd
+Requires(pre): /usr/sbin/useradd
+Requires(pre): /usr/sbin/usermod
+Requires(post,preun,postun):   systemd-units >= 38
+Requires(triggerpostun):       sed >= 4.0
+# for vservers we don't need klogd and syslog works without klogd
+# (just it doesn't log kernel buffer into syslog)
+# Requires:    klogd
+Requires:      logrotate >= 3.2-3
+Requires:      psmisc >= 20.1
+Requires:       systemd-units >= 38
+Suggests:      klogd
+Provides:      group(syslog)
+Provides:       service(syslog)
+Provides:      syslogdaemon
+Provides:      user(syslog)
+Obsoletes:     msyslog
+Obsoletes:     sysklogd
+Obsoletes:     syslog-ng
+Obsoletes:     syslog-systemd
+
+%description -n syslog
+This is the Linux system logging program. It is run as a daemon
+(background process) to log messages to different places. These are
+usually things like sendmail logs, security logs, and errors from
+other daemons.
+
+%description -n syslog -l pl.UTF-8
+Pakiet ten zawiera program, który jest uruchamiany jako demon i służy
+do logowania zdarzeń w systemie Linux. Same logi mogą być składowane w
+różnych miejscach (zdalnie i lokalnie). Przeważnie do logów trafiają
+informacje o odbieranej i wysyłanej poczcie np. z sendmaila, zdarzenia
+dotyczące bezpieczeństwa systemu, a także informacje o błędach z
+innych demonów.
+
+%package -n klogd
+Summary:       Linux kernel logger
+Summary(de.UTF-8):     Linux-Kerner-Logger
+Summary(pl.UTF-8):     Program logujący zdarzenia w jądrze Linuksa
+Group:         Daemons
+Requires(post,preun):  /sbin/chkconfig
+Requires(post,preun):  rc-scripts >= 0.2.0
+Requires(postun):      /usr/sbin/groupdel
+Requires(postun):      /usr/sbin/userdel
+Requires(pre): /usr/lib/rpm/user_group.sh
+Requires(pre): /bin/id
+Requires(pre): /usr/bin/getgid
+Requires(pre): /usr/sbin/groupadd
+Requires(pre): /usr/sbin/useradd
+Requires(pre): /usr/sbin/usermod
+Requires(post,preun,postun):   systemd-units >= 38
+Requires:       systemd-units >= 38
+Suggests:      syslog
+Provides:      group(syslog)
+Provides:      user(syslog)
+Provides:       service(klogd)
+Obsoletes:     sysklogd
+Obsoletes:     klogd-systemd
+
+%description -n klogd
+This is the Linux kernel logging program. It is run as a daemon
+(background process) to log messages from kernel.
+
+%description -n klogd -l pl.UTF-8
+Pakiet ten zawiera program, który jest uruchamiany jako demon i służy
+do logowania komunikatów jądra Linuksa.
+
+%prep
+%setup -q
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+
+%build
+%{__make} \
+       CC="%{__cc}" \
+       OPTIMIZE="%{rpmcflags}" \
+       LDFLAGS="%{rpmldflags}"
+
+%install
+rm -rf $RPM_BUILD_ROOT
+install -d $RPM_BUILD_ROOT/etc/{sysconfig,rc.d/init.d,logrotate.d} \
+       $RPM_BUILD_ROOT{%{_sbindir},%{_mandir}/man{5,8},%{_bindir}} \
+       $RPM_BUILD_ROOT{/dev,/var/log/news,%{systemdunitdir}}
+
+%{__make} install \
+       BINDIR=$RPM_BUILD_ROOT%{_sbindir} \
+       MANDIR=$RPM_BUILD_ROOT%{_mandir}
+
+install %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/syslog.conf
+
+install %{SOURCE2} $RPM_BUILD_ROOT/etc/rc.d/init.d/syslog
+install %{SOURCE3} $RPM_BUILD_ROOT/etc/logrotate.d/syslog
+install %{SOURCE4} $RPM_BUILD_ROOT/etc/sysconfig/syslog
+install %{SOURCE5} $RPM_BUILD_ROOT/etc/rc.d/init.d/klogd
+install %{SOURCE6} $RPM_BUILD_ROOT/etc/sysconfig/klogd
+
+install %{SOURCE7} $RPM_BUILD_ROOT%{_bindir}/syslogd-listfiles
+install %{SOURCE8} $RPM_BUILD_ROOT%{_mandir}/man8
+install %{SOURCE9} $RPM_BUILD_ROOT%{systemdunitdir}
+install %{SOURCE10} $RPM_BUILD_ROOT%{systemdunitdir}
+
+for n in debug kernel maillog messages secure syslog user spooler lpr daemon
+do
+       > $RPM_BUILD_ROOT/var/log/$n
+done
+
+echo .so sysklogd.8 > $RPM_BUILD_ROOT%{_mandir}/man8/syslogd.8
+
+# our strip can't strip otherwise
+chmod u+w $RPM_BUILD_ROOT%{_sbindir}/{klogd,syslogd}
+
+%pre -n syslog
+%groupadd -P syslog -g 18 syslog
+%useradd -P syslog -u 18 -g syslog -c "Syslog User" syslog
+%addusertogroup syslog logs
+
+%post -n syslog
+for n in /var/log/{cron,daemon,debug,kernel,lpr,maillog,messages,secure,spooler,syslog,user}; do
+       [ ! -f $n ] && touch $n
+       chmod 640 $n
+       chown syslog:syslog $n
+done
+
+/sbin/chkconfig --add syslog
+%service syslog restart "syslog daemon"
+%service -q klogd restart
+
+%systemd_post syslog.service
+
+%preun -n syslog
+if [ "$1" = "0" ]; then
+       %service syslog stop
+       /sbin/chkconfig --del syslog
+fi
+%systemd_preun syslog.service
+
+%postun -n syslog
+if [ "$1" = "0" ]; then
+       %userremove syslog
+       %groupremove syslog
+fi
+%systemd_reload
+
+%pre -n klogd
+%groupadd -P klogd -g 18 syslog
+%useradd -P klogd -u 18 -g syslog -c "Syslog User" syslog
+%addusertogroup syslog logs
+
+%post -n klogd
+/sbin/chkconfig --add klogd
+%service klogd restart "kernel logger daemon"
+%systemd_post klogd.service
+
+%preun -n klogd
+if [ "$1" = "0" ]; then
+       %service klogd stop
+       /sbin/chkconfig --del klogd
+fi
+%systemd_preun klogd.service
+
+%postun -n klogd
+if [ "$1" = "0" ]; then
+       %userremove syslog
+       %groupremove syslog
+fi
+%systemd_reload
+
+%triggerpostun -- inetutils-syslogd
+/sbin/chkconfig --del syslog
+/sbin/chkconfig --add syslog
+if [ -f /etc/syslog.conf.rpmsave ]; then
+       mv -f /etc/syslog.conf{,.rpmnew}
+       mv -f /etc/syslog.conf{.rpmsave,}
+       echo "Moved /etc/syslog.conf.rpmsave to /etc/syslog.conf"
+       echo "Original file from package is available as /etc/syslog.conf.rpmnew"
+fi
+
+%triggerpostun -n syslog -- syslog < 1.5-4
+# remove any -a option from ADDITIONAL_SOCK
+cp -f /etc/sysconfig/syslog{,.rpmsave}
+sed -i -e '/^ADDITIONAL_SOCK=/s/-a //g' /etc/sysconfig/syslog
+
+# reset config file permission, so people running with syslog uid can
+# survive syslog reload
+chgrp syslog /etc/syslog.conf
+
+%systemd_trigger syslog.service
+
+%triggerpostun -n klogd -- klogd < 1.5-4
+%systemd_trigger klogd.service
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files -n syslog
+%defattr(644,root,root,755)
+%doc ANNOUNCE NEWS README* CHANGES
+%attr(640,root,syslog) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/*.conf
+%attr(640,root,root) %config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/syslog
+%attr(640,root,root) %config(noreplace) %verify(not md5 mtime size) /etc/logrotate.d/syslog
+%attr(754,root,root) /etc/rc.d/init.d/syslog
+%attr(640,root,root) %ghost /var/log/[cdklmsu]*
+%dir %attr(770,root,news) /var/log/news
+%attr(755,root,root) %{_sbindir}/syslogd
+%attr(755,root,root) %{_bindir}/syslogd-listfiles
+%{_mandir}/man5/*
+%{_mandir}/man8/sys*
+%{systemdunitdir}/syslog.service
+
+%files -n klogd
+%defattr(644,root,root,755)
+%attr(754,root,root) /etc/rc.d/init.d/klogd
+%attr(640,root,root) %config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/klogd
+%attr(755,root,root) %{_sbindir}/klogd
+%{_mandir}/man8/klog*
+%{systemdunitdir}/klogd.service
diff --git a/syslog.conf b/syslog.conf
new file mode 100644 (file)
index 0000000..0065a70
--- /dev/null
@@ -0,0 +1,52 @@
+# Network logging to loghost
+#*.*                                                   @loghost
+
+# Everybody gets emergency messages.
+*.=emerg                                               *
+
+# The authpriv file has restricted access.
+auth,authpriv.*                                                /var/log/secure
+
+# Cron entry
+cron.*                                                 /var/log/cron
+
+daemon.*                                               /var/log/daemon
+
+ftp.*                                                  -/var/log/xferlog
+
+# Log all kernel messages.
+kern.*                                                 /var/log/kernel
+
+lpr.*                                                  -/var/log/lpr
+
+# Log all mail messages in one place.
+mail.*                                                 -/var/log/maillog
+
+# Log all news messages in one place.
+news.=crit                                             -/var/log/news/news.crit
+news.=err                                              -/var/log/news/news.err
+news.notice                                            -/var/log/news/news.notice
+
+syslog.*                                               -/var/log/syslog
+
+user.*                                                 -/var/log/user
+
+uucp.*;news.=crit                                      -/var/log/spooler
+
+# Log debug messages.
+*.=debug                                               -/var/log/debug
+
+# The following two suck, but sysklogd sucks at configurability
+# If you want it The Right Way(TM) use syslog-ng
+local0.*                                               -/var/log/pgsql
+local6.*                                               -/var/log/freshclam.log
+
+# Log all other messages.
+*.!=debug;\
+       auth,authpriv,cron,daemon,ftp,kern,lpr,mail,news,syslog,user,uucp.none                  -/var/log/messages
+
+# All logs on tty12
+#*.*                                                   /dev/tty12
+
+# Log all kernel messages to the console.
+#kern.*                                                        /dev/console
diff --git a/syslog.init b/syslog.init
new file mode 100644 (file)
index 0000000..727ddda
--- /dev/null
@@ -0,0 +1,115 @@
+#!/bin/sh
+#
+# syslog       Starts syslogd.
+#
+#
+# chkconfig:   2345 30 70
+# description: Syslog is the facility by which many daemons use to log \
+#              messages to various system log files. It is a good idea to \
+#              always run syslog.
+
+
+# Source function library
+. /etc/rc.d/init.d/functions
+
+# Set defaults
+ENABLE_RECEIVE_FROM_NET=no
+HOSTLIST=""
+DOMAINLIST=""
+MARK_TIMESTAMP=""
+ADDITIONAL_SOCK=""
+CONFIG_FILE="/etc/syslog.conf"
+
+# Get service config
+[ -f /etc/sysconfig/syslog ] && . /etc/sysconfig/syslog
+
+if [ "$ENABLE_RECEIVE_FROM_NET" = yes ]; then
+       OPTIONS="-r"
+else
+       OPTIONS=""
+fi
+
+if [ -n "$MARK_TIMESTAMP" ]; then
+       OPTIONS="$OPTIONS -m $MARK_TIMESTAMP"
+fi
+if [ -n "$HOSTLIST" ]; then
+       OPTIONS="$OPTIONS -l $HOSTLIST"
+fi
+if [ -n "$DOMAINLIST" ]; then
+       OPTIONS="$OPTIONS -s $DOMAINLIST"
+fi
+if [ -n "$ADDITIONAL_SOCK" ]; then
+       for a in $ADDITIONAL_SOCK; do
+               OPTIONS="$OPTIONS -a $a"
+       done
+fi
+
+if [ -n "$RUNAS" ]; then
+       OPTIONS="$OPTIONS -u $RUNAS"
+fi
+
+chown_syslog_files() {
+       [ -n "$RUNAS" ] || return
+
+       local files=$(/usr/sbin/syslogd-listfiles -f "$CONFIG_FILE" -a)
+       touch $files
+       chown ${RUNAS}: $files
+}
+
+RETVAL=0
+# See how we were called.
+case "$1" in
+  start)
+       # Check if the service is already running?
+       if [ ! -f /var/lock/subsys/syslog ]; then
+               msg_starting "System logger"
+               daemon syslogd $OPTIONS
+               RETVAL=$?
+               [ $RETVAL -eq 0 ] && touch /var/lock/subsys/syslog
+       else
+               msg_already_running "System logger"
+       fi
+       ;;
+  stop)
+       if [ -f /var/lock/subsys/syslog ]; then
+               msg_stopping "System logger"
+               killproc syslogd
+               rm -f /var/lock/subsys/syslog >/dev/null 2>&1
+       else
+               msg_not_running "System logger"
+       fi
+       ;;
+  status)
+       status syslogd
+       exit $?
+       ;;
+  reload|force-reload)
+       if [ -f /var/lock/subsys/syslog ]; then
+               msg_reloading "System logger"
+               chown_syslog_files
+               killproc syslogd -HUP
+               RETVAL=$?
+       else
+               msg_not_running "System logger"
+               exit 7
+       fi
+       ;;
+  flush-logs)
+       if [ -f /var/lock/subsys/syslog ]; then
+               msg_reloading "System logger"
+               chown_syslog_files
+               killproc syslogd -HUP
+               RETVAL=$?
+       fi
+       ;;
+  restart)
+       $0 stop
+       $0 start
+       exit $?
+       ;;
+  *)
+       msg_usage "$0 {start|stop|restart|reload|force-reload|flush-logs|status}"
+       exit 3
+esac
+
+exit $RETVAL
diff --git a/syslog.logrotate b/syslog.logrotate
new file mode 100644 (file)
index 0000000..fdc9fb0
--- /dev/null
@@ -0,0 +1,16 @@
+/var/log/alert
+/var/log/debug
+/var/log/kernel
+/var/log/maillog
+/var/log/messages
+/var/log/news.log
+/var/log/secure
+/var/log/syslog
+/var/log/xferlog {
+       create 640 syslog logs
+       sharedscripts
+
+       postrotate
+               /sbin/service syslog flush-logs >/dev/null
+       endscript
+}
diff --git a/syslog.service b/syslog.service
new file mode 100644 (file)
index 0000000..7f9f9cd
--- /dev/null
@@ -0,0 +1,11 @@
+[Unit]                                                                                                                                                                           
+Description=System Logging Service
+
+[Service]
+EnvironmentFile=/etc/sysconfig/syslog
+ExecStart=/sbin/service syslog start
+ExecStop=/sbin/service syslog stop
+Type=forking
+
+[Install]
+WantedBy=multi-user.target
diff --git a/syslog.sysconfig b/syslog.sysconfig
new file mode 100644 (file)
index 0000000..49998f5
--- /dev/null
@@ -0,0 +1,22 @@
+# This  option  will  enable  the facility to receive message
+# from the network using an internet domain socket with the syslog service
+ENABLE_RECEIVE_FROM_NET=no
+
+# Specify a hostname that should be logged only with its simple hostname and
+# not the fqdn. Multiple hosts may be specified using the colon (``:'')
+HOSTLIST=""
+
+# Specify a domainname that should be stripped off before logging. Multiple
+# domains may logging. Multiple domains may be specified using the colon
+# (``:'') separator. Remember that the first match is used, not the best.
+DOMAINLIST=""
+
+# If non-zero, syslogd marks timestamp to syslog. Specify interval between two 
+# "-- MARK --"
+MARK_TIMESTAMP=0
+
+# Use additional sockets separated with space, i. e. socket from chrooted bind or from vserver
+ADDITIONAL_SOCK=""
+
+# run syslog as this user.
+#RUNAS=syslog
diff --git a/syslogd-listfiles.8 b/syslogd-listfiles.8
new file mode 100644 (file)
index 0000000..9d63d1c
--- /dev/null
@@ -0,0 +1,77 @@
+.\" syslogd-listfiles.8 - generic routine for /etc/syslog.conf
+.\" Copyright (c) 1997  Martin Schulze <joey@debian.org>
+.\" 
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\" 
+.\" This program is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+.\" GNU General Public License for more details.
+.\" 
+.\" You should have received a copy of the GNU General Public License
+.\" along with this program; if not, write to the Free Software
+.\" Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+.\"
+.TH SYSLOGD-LISTFILES 8 "1 January 1998" "Debian project" "Debian GNU/Linux"
+.SH NAME
+syslogd-listfiles \- list system logfiles
+.SH SYNOPSIS
+.B syslogd-listfiles
+.RB [ " \-a " | " \-\-all " ]
+.RB [ " \-\-auth " ] 
+.RB [ " \-f "
+.I config file
+]
+.RB [ " \-\-news " ]
+.RB [ " \-w " | " \-\-weekly " ]
+.SH DESCRIPTION
+.B Sysklogd
+provides a modern mechanism to log system messages.  This mechanism is
+controlled by the file
+.IR /etc/syslog.conf .
+Messages are divided into logfiles which can grow quite big.
+Therefore the logfiles need to be rotated once per day, per week or
+per month.  On a Debian GNU/Linux system most of the files are rotated
+once per week.
+
+This program helps the rotation script to determine which logfiles
+need to be rotated and when.  It takes care of news logfiles that are
+handled by the
+.B news.daily
+script from INN.  In conjunction with the scripts in
+.IR /etc/cron.daily " and " /etc/cron.weekly
+it takes care of files with sensitive information.
+
+By default a list of files for daily rotation is generated.  At the
+moment this option only reflects entries that contain "*.*" as
+facility.priority.
+
+.SH OPTIONS
+.TP
+.BR "\-a" ", " "\-\-all"
+List all logfiles and ignore all other rules.
+.TP
+.BI "\-f " "config file"
+Specify an alternative configuration file instead of
+.IR /etc/syslog.conf ","
+which is the default.
+.TP
+.B "\-\-auth"
+Only list files containing sensitive information such as the one
+containing auth.*.
+.TP
+.B "\-\-news"
+Don't exclude news logfiles which are normally handled by the
+.B news.daily
+script from INN.
+.TP
+.BR "\-w" ", " "\-\-weekly"
+Generate the list for weekly rotation.
+.LP
+.SH SEE ALSO
+.BR syslog.conf (5),
+.BR syslogd (8),
+.BR savelog (8).
diff --git a/syslogd-listfiles.sh b/syslogd-listfiles.sh
new file mode 100644 (file)
index 0000000..f4d92f6
--- /dev/null
@@ -0,0 +1,99 @@
+#!/bin/sh
+CONF="/etc/syslog.conf"
+OPT_DAILY=1
+OPT_ALL=0
+OPT_AUTH=0
+OPT_NEWS=0
+
+usage ()
+{
+       local VER=$(echo '$Revision$' | awk '{print $2}')
+       cat 2>&1 <<EOF
+PLD Linux syslogd-listfiles $VER.  Copyright (C) 2000 S.Zagrodzki,
+Copyright (C) 2005 Elan Ruusamäe.  This is free software; see the GNU General
+Public Licence version 2 or later for copying conditions.  There is NO
+warranty.
+
+Usage: syslogd-listfiles <options>
+Options: -f file        specifies another syslog.conf file
+         -a | --all     list all files (including news)
+         --auth         list all files containing auth.<some prio>
+         --news         include news logfiles, too
+         -w | --weekly  use weekly pattern instead of daily
+EOF
+# TODO from original .pl file:
+#      --ignore-size  don't rotate files which got too large
+#      --large nnn     define what is large in bytes (default: 10MB)
+#      -s pattern      skip files matching pattern
+}
+
+while [ -n "$1" ]; do
+       case "$1" in
+       -f)
+               shift
+               CONF="$1"
+               shift
+               ;;
+       --weekly|-w)
+               OPT_DAILY=0
+               shift
+               ;;
+       --all|-a)
+               OPT_ALL=1
+               shift
+               ;;
+       --auth)
+               OPT_AUTH=1
+               shift
+               ;;
+       --news)
+               OPT_NEWS=1
+               shift
+               ;;
+       *)
+               usage
+               exit 1
+               ;;
+       esac
+done
+
+# some magic is appearing here, line continuations are parsed by shell so we
+# need not to take extra care on that.
+egrep -v '^(#|[ \t]*$)' "$CONF" | while read line; do
+       echo "$line"
+done | awk -vopt_news=$OPT_NEWS -vopt_all=$OPT_ALL -vopt_auth=$OPT_AUTH -vopt_daily=$OPT_DAILY '{
+       file = $NF;
+       sub("^-", "", file);
+
+       # skip /dev and not full paths (skips effectively remote logging and program pipes)
+       if (file ~ /^\/dev/ || file !~ /^\//) {
+               next;
+       }
+       pat = substr($0, 0, length($0) - length($NF));
+
+       # These files are handled by news.daily from INN, so we ignore them
+       if (!opt_news && (pat ~ /news\.(\*|crit|err|info|notice)/)) {
+               next;
+       }
+
+       output = 0;
+       if (opt_all) {
+               output = 1;
+       } else if (opt_auth) {
+               if (pat ~ /auth[^\.]*\./ && pat !~ /auth[^\.]*\.none/) {
+                       output = 1;
+               }
+       } else {
+               everything = (pat ~ /\*\.\*/);
+               if ((everything && opt_daily)) {
+                       output = 1
+               }
+               if ((!everything && !opt_daily)) {
+                       output = 1
+               }
+       }
+
+       if (output) {
+               print file;
+       }
+}'