commit bf60d858bb9fc654125c756bf5f874e7de7ce8b312c4aeea88239b1de1f70bea Author: OBS User unknown Date: Mon Dec 18 23:17:53 2006 +0000 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/syslogd?expand=0&rev=1 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/logrotate.syslog b/logrotate.syslog new file mode 100644 index 0000000..3a36efa --- /dev/null +++ b/logrotate.syslog @@ -0,0 +1,52 @@ +# +# Please note, that changing of log file permissions in this +# file is not sufficient if syslog-ng is used as log daemon. +# It is required to specify the permissions in the syslog-ng +# configuration /etc/syslog-ng/syslog-ng.conf.in as well. +# + +/var/log/warn /var/log/messages /var/log/allmessages /var/log/localmessages /var/log/firewall { + compress + dateext + maxage 365 + rotate 99 + missingok + notifempty + size +4096k + create 640 root root + sharedscripts + postrotate + /etc/init.d/syslog reload + endscript +} + +/var/log/mail /var/log/mail.info /var/log/mail.warn /var/log/mail.err { + compress + dateext + maxage 365 + rotate 99 + missingok + notifempty + size +4096k + create 640 root root + sharedscripts + postrotate + /etc/init.d/syslog reload + endscript +} + +/var/log/news/news.crit /var/log/news/news.err /var/log/news/news.notice { + compress + dateext + maxage 365 + rotate 99 + missingok + notifempty + size +4096k + create 640 news news + sharedscripts + postrotate + /etc/init.d/syslog reload + endscript +} + diff --git a/rc.earlysyslog b/rc.earlysyslog new file mode 100644 index 0000000..81d9389 --- /dev/null +++ b/rc.earlysyslog @@ -0,0 +1,69 @@ +#! /bin/sh +# +# Copyright (c) 1996-2001 SuSE GmbH Nuernberg, Germany. +# Copyright (c) 2002-2003 SuSE Linux AG, Nuernberg, Germany. +# +# Author: Florian La Roche , 1996 +# Werner Fink , 1998-2001 +# +# /etc/init.d/syslog +# +### BEGIN INIT INFO +# Provides: earlysyslog +# Required-Start: +# Required-Stop: +# Default-Start: 5 +# Default-Stop: +# Description: Start the system logging daemons +### END INIT INFO + +. /etc/sysconfig/syslog + +BINDIR=/sbin + +case "$SYSLOG_DAEMON" in + syslog-ng) + syslog=syslog-ng + config=/etc/syslog-ng/syslog-ng.conf + ;; + *) + syslog=syslogd + config=/etc/syslog.conf + ;; +esac +syslog_bin=${BINDIR}/$syslog + klog_bin=${BINDIR}/klogd + +# check config and programs +test -s ${config} || { + echo 1>&2 "${config} does not exist" + if test "$1" == "stop" ; then exit 0 ; else exit 6 ; fi +} +test -x ${syslog_bin} || { + echo 1>&2 "${syslog_bin} is not installed" + if test "$1" == "stop" ; then exit 0 ; else exit 5 ; fi +} +test -x ${klog_bin} || { + echo 1>&2 "${klog_bin} is not installed" + if test "$1" == "stop" ; then exit 0 ; else exit 5 ; fi +} + +case "$SYSLOG_DAEMON" in + syslog-ng) + while read line ; do + case "$line" in + \#*|"") continue ;; + *udp\ *|*udp\(*) exit 0 ;; + *tcp\ *|*tcp\(*) exit 0 ;; + esac + done < ${config} + ;; + *) + while read select action ; do + case "$select" in \#*|"") continue ;; esac + case "$action" in *@*) exit 0 ;; esac + done < ${config} + ;; +esac + +exec /etc/init.d/syslog $1 early diff --git a/rc.syslog b/rc.syslog new file mode 100644 index 0000000..cafd12a --- /dev/null +++ b/rc.syslog @@ -0,0 +1,164 @@ +#! /bin/sh +# +# Copyright (c) 1996-2001 SuSE GmbH Nuernberg, Germany. +# Copyright (c) 2002-2003 SuSE Linux AG, Nuernberg, Germany. +# +# Author: Florian La Roche , 1996 +# Werner Fink , 1998-2001 +# +# /etc/init.d/syslog +# +### BEGIN INIT INFO +# Provides: syslog +# Required-Start: network +# Should-Start: earlysyslog +# Required-Stop: network +# Default-Start: 2 3 5 +# Default-Stop: +# Description: Start the system logging daemons +### END INIT INFO + +. /etc/sysconfig/syslog + +BINDIR=/sbin + +case "$SYSLOG_DAEMON" in + syslog-ng) + syslog=syslog-ng + config=/etc/syslog-ng/syslog-ng.conf + params="$SYSLOG_NG_PARAMS" + ;; + *) + syslog=syslogd + config=/etc/syslog.conf + params="$SYSLOGD_PARAMS" + ;; +esac +# add additional sockets to params +for variable in ${!SYSLOGD_ADDITIONAL_SOCKET*}; do + eval value=\$$variable + test -n "${value}" && test -d ${value%/*} && \ + params="$params -a $value" +done + +syslog_pid="/var/run/${syslog}.pid" +syslog_bin=${BINDIR}/$syslog + klog_bin=${BINDIR}/klogd +syslog_use="" + +# check config and programs +test -s ${config} || { + echo 1>&2 "${config} does not exist" + if test "$1" == "stop" ; then exit 0 ; else exit 6 ; fi +} +test -x ${syslog_bin} || { + echo 1>&2 "${syslog_bin} is not installed" + if test "$1" == "stop" ; then exit 0 ; else exit 5 ; fi +} +test -x ${klog_bin} || { + echo 1>&2 "${klog_bin} is not installed" + if test "$1" == "stop" ; then exit 0 ; else exit 5 ; fi +} +test -s /var/lock/subsys/syslogd && { + read -t 5 syslog_use < /var/lock/subsys/syslogd +} +test -z "$syslog_use" && syslog_use=${syslog_bin} + +# +# Do not translate symbol addresses for 2.6 kernel +# +case `uname -r` in +0.*|1.*|2.[0-4].*) + ;; +*) + KLOGD_PARAMS="${KLOGD_PARAMS:+$KLOGD_PARAMS }-x" + ;; +esac + +. /etc/rc.status +rc_reset +case "$1" in + start) + if test -f /var/lock/subsys/earlysyslog ; then + # Syslog service already done + rm -f /var/lock/subsys/earlysyslog + exit 0 + fi + if test "$2" = "early" ; then + # Start syslog service early + touch /var/lock/subsys/earlysyslog + fi + + if ! test -e /dev/xconsole ; then + mkfifo -m 0600 /dev/xconsole + chown root:tty /dev/xconsole + fi + if test -s /var/run/klogd.pid ; then + killproc ${klog_bin} + fi + if test -s ${syslog_pid} ; then + killproc -p ${syslog_pid} ${syslog_use} + echo -n "Re-" + fi + echo -n "Starting syslog services" + test -z "$KERNEL_LOGLEVEL" && KERNEL_LOGLEVEL=1 + + startproc -p ${syslog_pid} ${syslog_bin} ${params} + rc_status + + # Remember the currently used syslog daemon + echo ${syslog_bin} > /var/lock/subsys/syslogd + + if test $? -eq 0 ; then + startproc ${klog_bin} -c $KERNEL_LOGLEVEL $KLOGD_PARAMS + rc_status + fi + rc_status -v + ;; + stop) + rm -f /var/lock/subsys/earlysyslog + test "$2" = "early" && exit 0 + + echo -n "Shutting down syslog services" + killproc -TERM ${klog_bin} ; rc_status + killproc -p ${syslog_pid} -TERM ${syslog_use} ; rc_status -v + rm -f /var/lock/subsys/syslogd + ;; + try-restart|condrestart) + if test "$1" = "condrestart"; then + echo "${attn} Use try-restart ${done}(LSB)${attn} instead${norm}" + fi + $0 status + if test $? = 0; then + $0 restart + else + rc_reset # Not running is not a failure. + fi + rc_status + ;; + restart) + $0 stop + $0 start + rc_status + ;; + reload|force-reload) + echo -n "Reload syslog service" + killproc -TSTP ${klog_bin} ; rc_status + killproc -p ${syslog_pid} -HUP ${syslog_use} ; rc_status + killproc -CONT ${klog_bin} ; rc_status + killproc -USR2 ${klog_bin} ; rc_status -v + ;; + status) + echo -n "Checking for service syslog:" + checkproc ${klog_bin} ; rc_status + checkproc -p ${syslog_pid} ${syslog_use} ; rc_status -v + ;; + probe) + test ${config} -nt ${syslog_pid} && echo reload + ;; + *) + echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}" + exit 1 + ;; +esac +rc_exit diff --git a/ready b/ready new file mode 100644 index 0000000..473a0f4 diff --git a/sysconfig.syslog b/sysconfig.syslog new file mode 100644 index 0000000..edafbfc --- /dev/null +++ b/sysconfig.syslog @@ -0,0 +1,41 @@ +## Path: System/Logging +## Description: System logging +## Type: list(0,1,2,3,4,5,6,7) +## Default: 1 +## Config: "" +## ServiceRestart: syslog +# +# Default loglevel for klogd +# +KERNEL_LOGLEVEL=1 + +## Type: string +## Default: "" +## Config: "" +## ServiceRestart: syslog +# +# if not empty: parameters for syslogd +# for example SYSLOGD_PARAMS="-r -s my.dom.ain" +# +SYSLOGD_PARAMS="" + +## Type: string +## Default: -x +## Config: "" +## ServiceRestart: syslog +# +# if not empty: parameters for klogd +# for example KLOGD_PARAMS="-x" to avoid (duplicate) symbol resolution +# +KLOGD_PARAMS="-x" + +## Type: list(syslogd,syslog-ng) +## Default: syslogd +## Config: syslog-ng +## Command: /sbin/rcsyslog restart +## PreSaveCommand: /sbin/rcsyslog status && /sbin/rcsyslog stop +# +# The name of the syslog daemon used as +# syslog service: "syslogd", "syslog-ng" +# +SYSLOG_DAEMON="syslogd" diff --git a/sysklogd-1.4.1-dgram.patch b/sysklogd-1.4.1-dgram.patch new file mode 100644 index 0000000..15c2921 --- /dev/null +++ b/sysklogd-1.4.1-dgram.patch @@ -0,0 +1,14 @@ +--- syslog.c ++++ syslog.c Wed May 23 18:48:13 2001 +@@ -211,8 +211,9 @@ + 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); */ ++ if ((LogFile = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0) ++ return; ++ fcntl(LogFile, F_SETFD, 1); + } + } + if (LogFile != -1 && !connected && diff --git a/sysklogd-1.4.1-dns.patch b/sysklogd-1.4.1-dns.patch new file mode 100644 index 0000000..ee97657 --- /dev/null +++ b/sysklogd-1.4.1-dns.patch @@ -0,0 +1,459 @@ +--- sysklogd-1.4.1/Makefile.resolve 2003-06-02 14:30:18.000000000 +0200 ++++ sysklogd-1.4.1/Makefile 2003-06-02 14:30:18.000000000 +0200 +@@ -62,8 +62,8 @@ + + install: install_man install_exec + +-syslogd: syslogd.o pidfile.o +- ${CC} ${LDFLAGS} -o syslogd syslogd.o pidfile.o ${LIBS} ++syslogd: syslogd.o pidfile.o resolve.o ++ ${CC} ${LDFLAGS} -o syslogd syslogd.o pidfile.o resolve.o ${LIBS} + + klogd: klogd.o syslog.o pidfile.o ksym.o ksym_mod.o + ${CC} ${LDFLAGS} -o klogd klogd.o syslog.o pidfile.o ksym.o \ +--- sysklogd-1.4.1/resolve.c.resolve 2003-06-02 14:30:18.000000000 +0200 ++++ sysklogd-1.4.1/resolve.c 2003-06-02 14:30:33.000000000 +0200 +@@ -0,0 +1,249 @@ ++/* ++ * Resolve a hostname ++ * ++ * Copyright (C) 2003, SuSE Linux AG ++ * Written by okir@suse.de ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#if defined(__GLIBC__) ++#define dprintf mydprintf ++#endif /* __GLIBC__ */ ++ ++/* Number of times we retry resolving a name */ ++#define RESOLVER_RETRIES 10 ++/* Timeout between retries to resolve a name */ ++#define RESOLVER_RETRY_TIME (3 * 60) ++/* Time to wait for the sub-process comes up with an ++ * answer, before we suspend the entry */ ++#define RESOLVER_WAIT_TIME 5 ++ ++struct res_name { ++ struct res_name * next; ++ char * name; ++ unsigned int retries; ++ time_t retry_time; ++ time_t wait_time; ++ pid_t process; ++ int pipe; ++ struct sockaddr_storage address; ++}; ++ ++extern void dprintf(char *fmt, ...); ++static int do_result(struct res_name *res); ++static void do_query(int, int, const char *); ++ ++static struct res_name *resolve; ++ ++int ++resolve_name(const char *name, int family, struct sockaddr_storage *addr) ++{ ++ struct res_name *res; ++ int fd[2]; ++ pid_t pid; ++ time_t now; ++ ++ time(&now); ++ for (res = resolve; res; res = res->next) { ++ if (!strcmp(res->name, name)) { ++ /* If there's still a sub-process ++ * attached, see if it came up with an ++ * answer in the meantime */ ++ if (res->pipe >= 0) ++ do_result(res); ++ goto check_result; ++ } ++ } ++ ++ res = (struct res_name *) calloc(1, sizeof(*res)); ++ res->name = strdup(name); ++ res->retries = RESOLVER_RETRIES; ++ res->retry_time = now + RESOLVER_RETRY_TIME; ++ res->pipe = -1; ++ res->next = resolve; ++ resolve = res; ++ ++retry: res->retries -= 1; ++ ++ dprintf("Trying to resolve \"%s\", attempt #%u\n", ++ res->name, RESOLVER_RETRIES - res->retries); ++ ++ if (res->pipe >= 0) { ++ /* Make sure resolver subprocess is dead */ ++ kill(res->process, SIGKILL); ++ close(res->pipe); ++ res->pipe = -1; ++ } ++ ++ signal(SIGCHLD, SIG_IGN); ++ if (pipe(fd) < 0) { ++ /* log error? */ ++ return -1; ++ } ++ if ((pid = fork()) < 0) { ++ /* log error? */ ++ close(fd[0]); ++ close(fd[1]); ++ return -1; ++ } ++ ++ if (pid == 0) { ++ close(fd[0]); ++ do_query(fd[1], family, res->name); ++ /* shouldn't return */ ++ exit(1); ++ } ++ ++ res->wait_time = now + RESOLVER_WAIT_TIME; ++ res->process = pid; ++ res->pipe = fd[0]; ++ close(fd[1]); ++ ++ /* Try to collect result within the next couple ++ * of seconds */ ++ do_result(res); ++ ++check_result: ++ if (res->pipe >= 0) { ++ dprintf("%s: name resolution not complete, " ++ "waiting for resolver sub-process\n", ++ res->name); ++ return 0; ++ } ++ ++ if (res->address.ss_family != AF_UNSPEC) { ++ *addr = res->address; ++ return 1; ++ } ++ if (res->retries == 0) { ++ dprintf("%s: too many failed attempts to resolve hostname, " ++ "given up.\n", res->name); ++ return -1; ++ } ++ if (res->retry_time > now) { ++ dprintf("%s: name resolution failed, " ++ "will retry in %d seconds\n", ++ res->name, res->retry_time - now); ++ return 0; ++ } ++ goto retry; ++} ++ ++/* ++ * This function clears the resolver's internal state ++ * when syslogd received a SIGHUP ++ */ ++void ++init_resolver(void) ++{ ++ struct res_name *res; ++ ++ for (res = resolve; res; res = res->next) { ++ res->address.ss_family = AF_UNSPEC; ++ res->retries = RESOLVER_RETRIES; ++ res->retry_time = 0; ++ } ++} ++ ++ ++/* ++ * Collect result from sub-process ++ */ ++int ++do_result(struct res_name *res) ++{ ++ struct sockaddr_storage addr; ++ struct pollfd _poll; ++ long wait; ++ int n; ++ ++ if (res->pipe < 0) ++ return 0; ++ ++ /* See if we should wait for the subprocess to come ++ * up with an answer (the initial call to do_result ++ * after starting the sub-process will always wait for ++ * a few seconds to avoid losing messages) */ ++ if ((wait = res->wait_time - time(NULL)) < 0) ++ wait = 0; ++ ++ /* See if we get the resolver's result within the ++ * next "wait" seconds. If not, let it continue in the ++ * background */ ++ _poll.fd = res->pipe; ++ _poll.events = POLLIN; ++ if (poll(&_poll, 1, wait * 1000) < 1) ++ return 0; ++ ++ n = read(res->pipe, &addr, sizeof(addr)); ++ ++ /* child process has done its duty. */ ++ kill(res->process, SIGKILL); ++ close(res->pipe); ++ res->process = 0; ++ res->pipe = -1; ++ ++ if (n != sizeof(addr)) ++ return -1; ++ ++ res->address = addr; ++ if (addr.ss_family != AF_UNSPEC) ++ return 1; ++ return -1; ++} ++ ++/* ++ * Sub-process performing lookup ++ */ ++void ++do_query(int fd, int family, const char *name) ++{ ++ struct sockaddr_storage ss; ++ struct addrinfo hints, *res; ++ int r; ++ ++ memset(&hints, 0, sizeof(hints)); ++ hints.ai_socktype = SOCK_DGRAM; ++#ifdef notyet ++ /* XXX - specify AI_whatever for automatic v4-v6 mapping */ ++#else ++ hints.ai_family = (family == AF_INET)? family : AF_UNSPEC; ++#endif ++ ++ r = getaddrinfo(name, "syslog", &hints, &res); ++ if (r != 0) { ++ dprintf("failed to resolve \"%s\": %s\n", ++ name, gai_strerror(r)); ++ exit(1); ++ } ++ ++ memset(&ss, 0, sizeof(ss)); ++ ++ /* Do v4mapped v6 address (supported by recent glibcs ++ * only) */ ++ if (family == AF_INET6 && res->ai_family == AF_INET) { ++ struct sockaddr_in6 *six = (struct sockaddr_in6 *) &ss; ++ struct sockaddr_in *sin = (struct sockaddr_in *) res->ai_addr; ++ ++ six->sin6_family = AF_INET6; ++ six->sin6_port = sin->sin_port; ++ six->sin6_addr.s6_addr16[5] = 0xffff; ++ six->sin6_addr.s6_addr32[3] = sin->sin_addr.s_addr; ++ } else if (res->ai_addrlen > sizeof(ss)) { ++ dprintf("failed to resolve \"%s\": address too large\n", ++ name); ++ exit(1); ++ } else { ++ memcpy(&ss, res->ai_addr, res->ai_addrlen); ++ } ++ write(fd, &ss, sizeof(ss)); ++ exit(0); ++} +--- sysklogd-1.4.1/syslogd.c.resolve 2003-06-02 14:30:18.000000000 +0200 ++++ sysklogd-1.4.1/syslogd.c 2003-06-02 14:30:26.000000000 +0200 +@@ -633,14 +633,7 @@ + struct { + char f_hname[MAXHOSTNAMELEN+1]; + #ifdef INET6 +- union { +- struct sockaddr sa; +- struct sockaddr_in sin; +- struct sockaddr_in6 sin6; +- } f_sa; +-#define f_addr f_sa.sa +-#define f_addr4 f_sa.sin +-#define f_addr6 f_sa.sin6 ++ struct sockaddr_storage f_addr; + #else + struct sockaddr_in f_addr; + #endif +@@ -795,7 +788,7 @@ + #if defined(__GLIBC__) + #define dprintf mydprintf + #endif /* __GLIBC__ */ +-static void dprintf(char *, ...); ++void dprintf(char *, ...); + static void allocate_log(void); + void sighup_handler(); + +@@ -804,10 +797,8 @@ + #endif + #ifdef SYSLOG_INET + static int create_inet_socket(); +-#ifdef INET6 +-static void setup_inetaddr_all(); +-static const char *setup_inetaddr(struct filed *f); +-#endif ++extern int resolve_name(const char *, int, struct sockaddr_storage *); ++extern void init_resolver(void); + #endif + + int main(argc, argv) +@@ -1342,63 +1333,6 @@ + return fd; + } + +-#ifdef INET6 +- +-static void setup_inetaddr_all() +-{ +- struct filed *f; +-#ifdef SYSV +- int lognum; +- +- for (lognum = 0; lognum <= nlogs; lognum++) { +- f = &Files[lognum]; +-#else +- for (f = Files; f; f = f->f_next) { +-#endif +- if (f->f_type == F_FORW_UNKN) { +- if (setup_inetaddr(f)) { +- f->f_prevcount = INET_RETRY_MAX; +- f->f_time = time( (time_t *)0 ); +- } else { +- f->f_type = F_FORW; +- } +- } +- } +-} +- +-static const char *setup_inetaddr(struct filed *f) +-{ +- struct addrinfo hints, *res; +- int error; +- +- memset(&hints, 0, sizeof(hints)); +- hints.ai_family = family == AF_INET6 ? AF_UNSPEC : AF_INET; +- hints.ai_socktype = SOCK_DGRAM; +- error = getaddrinfo(f->f_un.f_forw.f_hname, "syslog", &hints, &res); +- if (error) { +- return gai_strerror(error); +- } +- if (res->ai_addrlen > sizeof(f->f_un.f_forw.f_sa)) { +- freeaddrinfo(res); +- return "addrlen too large"; +- } +- if (family == AF_INET6 && res->ai_family == AF_INET) { +- /* v4mapped addr */ +- f->f_un.f_forw.f_addr.sa_family = AF_INET6; +- f->f_un.f_forw.f_addr6.sin6_port = +- ((struct sockaddr_in *)res->ai_addr)->sin_port; +- f->f_un.f_forw.f_addr6.sin6_addr.s6_addr16[5] = 0xffff; +- memcpy(&f->f_un.f_forw.f_addr6.sin6_addr.s6_addr32[3], +- &((struct sockaddr_in *)res->ai_addr)->sin_addr, +- sizeof(struct in_addr)); +- } else { +- memcpy(&f->f_un.f_forw.f_addr, res->ai_addr, res->ai_addrlen); +- } +- freeaddrinfo(res); +- +- return NULL; +-} +-#endif /* end of INET6 */ + #endif + + char ** +@@ -1821,7 +1755,7 @@ + char line[MAXLINE + 1]; + time_t fwd_suspend; + #ifdef INET6 +- const char *errmsg; ++ int reserr; + #else + struct hostent *hp; + #endif +@@ -1890,38 +1824,21 @@ + */ + case F_FORW_UNKN: + dprintf(" %s\n", f->f_un.f_forw.f_hname); +- fwd_suspend = time((time_t *) 0) - f->f_time; +- if ( fwd_suspend >= INET_SUSPEND_TIME ) { +- dprintf("Forwarding suspension to unknown over, retrying\n"); +-#ifdef INET6 +- if ((errmsg = setup_inetaddr(f))) { +- dprintf("Failure: %s\n", errmsg); +-#else +- if ( (hp = gethostbyname(f->f_un.f_forw.f_hname)) == NULL ) { +- dprintf("Failure: %s\n", sys_h_errlist[h_errno]); +-#endif +- dprintf("Retries: %d\n", f->f_prevcount); +- if ( --f->f_prevcount < 0 ) { +- dprintf("Giving up.\n"); +- f->f_type = F_UNUSED; +- } +- else +- dprintf("Left retries: %d\n", f->f_prevcount); +- } +- else { +- dprintf("%s found, resuming.\n", f->f_un.f_forw.f_hname); +-#ifndef INET6 /* not */ +- memcpy((char *) &f->f_un.f_forw.f_addr.sin_addr, hp->h_addr, hp->h_length); +-#endif +- f->f_prevcount = 0; +- f->f_type = F_FORW; +- goto f_forw; +- } ++ reserr = resolve_name(f->f_un.f_forw.f_hname, ++ family, ++ &f->f_un.f_forw.f_addr); ++ if (reserr > 0) { ++ dprintf("Successfully resolved hostname \"%s\"\n", f->f_un.f_forw.f_hname); ++ f->f_type = F_FORW; ++ } else if (reserr < 0) { ++ dprintf("Giving up on hostname \"%s\"\n", f->f_un.f_forw.f_hname); ++ f->f_type = F_UNUSED; ++ break; ++ } else { ++ /* Not yet - query in progress, or suspended */ ++ break; + } +- else +- dprintf("Forwarding suspension not over, time " \ +- "left: %d\n", INET_SUSPEND_TIME - fwd_suspend); +- break; ++ /* fallthrough */ + + case F_FORW: + /* +@@ -2553,6 +2470,7 @@ + #endif + + #ifdef SYSLOG_INET ++ init_resolver(); + if (Forwarding || AcceptRemote) { + if (finet < 0) { + finet = create_inet_socket(); +@@ -2569,10 +2487,6 @@ + InetInuse = 0; + } + inetm = finet; +-#ifdef INET6 +- if (finet >= 0) +- setup_inetaddr_all(); +-#endif + #endif + + Initialized = 1; +@@ -2932,7 +2846,7 @@ + return (-1); + } + +-static void dprintf(char *fmt, ...) ++void dprintf(char *fmt, ...) + + { + va_list ap; diff --git a/sysklogd-1.4.1-fileleak.patch b/sysklogd-1.4.1-fileleak.patch new file mode 100644 index 0000000..deb236a --- /dev/null +++ b/sysklogd-1.4.1-fileleak.patch @@ -0,0 +1,18 @@ +--- ksym.c ++++ ksym.c Wed May 23 18:54:18 2001 +@@ -344,6 +344,7 @@ + if ( (sym_file = fopen(symfile, "r")) != (FILE *) 0 ) { + if (CheckMapVersion(symfile) == 1) + file = symfile; ++ fclose(sym_file); + } + if (sym_file == (FILE *) 0 || file == (char *) 0) { + sprintf (symfile, "%s", *mf); +@@ -352,6 +353,7 @@ + if ( (sym_file = fopen(symfile, "r")) != (FILE *) 0 ) { + if (CheckMapVersion(symfile) == 1) + file = symfile; ++ fclose(sym_file); + } + } + diff --git a/sysklogd-1.4.1-forw.patch b/sysklogd-1.4.1-forw.patch new file mode 100644 index 0000000..62b7e14 --- /dev/null +++ b/sysklogd-1.4.1-forw.patch @@ -0,0 +1,88 @@ +--- sysklogd.8 ++++ sysklogd.8 Wed May 23 18:59:26 2001 +@@ -29,6 +29,7 @@ + .RB [ " \-s " + .I domainlist + ] ++.RB [ " \-t " ] + .RB [ " \-v " ] + .LP + .SH DESCRIPTION +@@ -149,6 +150,11 @@ + 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 ++.B "\-t" ++Tag forwarded messages with the sending hosts name as seen by the forwarder. ++Useful for relaying syslog from DMZs through the firwall to an internal ++loghost. + .TP + .B "\-v" + Print version and exit. +--- syslogd.c ++++ syslogd.c Wed May 23 19:01:21 2001 +@@ -417,6 +417,13 @@ + * file is defined in the used libc and should not be hardcoded + * into the syslogd binary referring the system it was compiled on. + * ++ * Mon Oct 18 19:23:00 CEST 1999: Andreas Siegert ++ * Added -t flag that triggers tagging of forwarded messages with ++ * the sending hosts name as seen by the forwarder. ++ * Useful for relaying syslog from DMZs through the firwall to an ++ * internal loghost. ++ * Format is "<""hostname" ++ * + * Sun Sep 17 20:45:33 CEST 2000: Martin Schulze + * Fixed some bugs in printline() code that did not escape + * control characters '\177' through '\237' and contained a +@@ -731,6 +738,7 @@ + int MarkSeq = 0; /* mark sequence number */ + int NoFork = 0; /* don't fork - don't run in daemon mode */ + int AcceptRemote = 0; /* receive messages that come via UDP */ ++int TagForward = 0; /* afx: tag remote messages with the hostname they came from */ + char **StripDomains = NULL; /* these domains may be stripped before writing logs */ + char **LocalHosts = NULL; /* these hosts are logged with their hostname */ + int NoHops = 1; /* Can we bounce syslog messages through an +@@ -829,7 +837,7 @@ + funix[i] = -1; + } + +- while ((ch = getopt(argc, argv, "a:dhf:l:m:np:rs:v")) != EOF) ++ while ((ch = getopt(argc, argv, "a:dhf:l:m:np:rs:tv")) != EOF) + switch((char)ch) { + case 'a': + if (nfunix < MAXFUNIX) +@@ -874,6 +882,10 @@ + } + StripDomains = crunch_list(optarg); + break; ++/* afx add -t for hostname tagging */ ++ case 't': ++ TagForward = 1; ++ break; + case 'v': + printf("syslogd %s.%s\n", VERSION, PATCHLEVEL); + exit (0); +@@ -1771,8 +1783,19 @@ + dprintf("Not sending message to remote.\n"); + else { + f->f_time = now; +- (void) snprintf(line, sizeof(line), "<%d>%s\n", f->f_prevpri, \ +- (char *) iov[4].iov_base); ++/* afx: add f_prevhost,LocalHostName,MAXHOSTNAMELEN+1)) { ++ (void) snprintf(line, sizeof(line), "<%d><%s: %s\n", ++ f->f_prevpri, f->f_prevhost, ++ (char *) iov[4].iov_base); ++ } else { ++ (void) snprintf(line, sizeof(line), "<%d>%s\n", ++ f->f_prevpri, ++ (char *) iov[4].iov_base); ++ } ++/* end afx */ + l = strlen(line); + if (l > MAXLINE) + l = MAXLINE; diff --git a/sysklogd-1.4.1-klogd24.dif b/sysklogd-1.4.1-klogd24.dif new file mode 100644 index 0000000..892ac9b --- /dev/null +++ b/sysklogd-1.4.1-klogd24.dif @@ -0,0 +1,494 @@ +--- klogd.c ++++ klogd.c Tue Sep 9 14:15:47 2003 +@@ -879,7 +879,7 @@ + { + auto int sym_space; + +- unsigned long value; ++ uintptr_t value; + auto struct symbol sym; + auto char *symbol; + +@@ -904,7 +904,7 @@ + break; + } + +- delta = sprintf( sym_start, "%s+%d/%d]", ++ delta = sprintf( sym_start, "%s+%llu/%zu]", + symbol, sym.offset, sym.size ); + + space = sym_space + delta; +--- ksym.c ++++ ksym.c Tue Sep 9 14:15:47 2003 +@@ -122,7 +122,7 @@ + /* Variables static to this module. */ + struct sym_table + { +- unsigned long value; ++ uintptr_t value; + char *name; + }; + +@@ -151,7 +151,7 @@ + + /* Function prototypes. */ + static char * FindSymbolFile(void); +-static int AddSymbol(unsigned long, char*); ++static int AddSymbol(uintptr_t, char*); + static void FreeSymbols(void); + static int CheckVersion(char *); + static int CheckMapVersion(char *); +@@ -185,7 +185,7 @@ + + auto int version = 0; + +- auto unsigned long int address; ++ auto uintptr_t address; + + auto FILE *sym_file; + +@@ -237,16 +237,24 @@ + */ + while ( !feof(sym_file) ) + { +- if ( fscanf(sym_file, "%lx %c %s\n", &address, &type, sym) +- != 3 ) ++#if __WORDSIZE == 64 ++ if ( fscanf(sym_file, "%lx %c %s\n", &address, &type, sym) != 3 ) ++#else ++ if ( fscanf(sym_file, "%x %c %s\n", &address, &type, sym) != 3 ) ++#endif + { + Syslog(LOG_ERR, "Error in symbol table input (#1)."); + fclose(sym_file); + return(0); + } + if ( VERBOSE_DEBUGGING && debugging ) ++#if __WORDSIZE == 64 + fprintf(stderr, "Address: %lx, Type: %c, Symbol: %s\n", + address, type, sym); ++#else ++ fprintf(stderr, "Address: %x, Type: %c, Symbol: %s\n", ++ address, type, sym); ++#endif + + if ( AddSymbol(address, sym) == 0 ) + { +@@ -521,7 +529,7 @@ + { + int version; + FILE *sym_file; +- auto unsigned long int address; ++ auto uintptr_t address; + auto char type, + sym[512]; + +@@ -536,16 +544,24 @@ + version = 0; + while ( !feof(sym_file) && (version == 0) ) + { +- if ( fscanf(sym_file, "%lx %c %s\n", &address, \ +- &type, sym) != 3 ) ++#if __WORDSIZE == 64 ++ if ( fscanf(sym_file, "%lx %c %s\n", &address, &type, sym) != 3 ) ++#else ++ if ( fscanf(sym_file, "%x %c %s\n", &address, &type, sym) != 3 ) ++#endif + { + Syslog(LOG_ERR, "Error in symbol table input (#2)."); + fclose(sym_file); + return(0); + } + if ( VERBOSE_DEBUGGING && debugging ) ++#if __WORDSIZE == 64 + fprintf(stderr, "Address: %lx, Type: %c, " \ + "Symbol: %s\n", address, type, sym); ++#else ++ fprintf(stderr, "Address: %x, Type: %c, " \ ++ "Symbol: %s\n", address, type, sym); ++#endif + + version = CheckVersion(sym); + } +@@ -583,7 +599,7 @@ + * Purpose: This function is responsible for adding a symbol name + * and its address to the symbol table. + * +- * Arguements: (unsigned long) address, (char *) symbol ++ * Arguements: (uintptr_t) address, (char *) symbol + * + * Return: int + * +@@ -593,7 +609,7 @@ + + static int AddSymbol(address, symbol) + +- unsigned long address; ++ uintptr_t address; + + char *symbol; + +@@ -639,7 +655,7 @@ + + char * LookupSymbol(value, sym) + +- unsigned long value; ++ uintptr_t value; + + struct symbol *sym; + +@@ -739,7 +755,7 @@ + *symbol; + + char num[15]; +- auto unsigned long int value; ++ auto uintptr_t value; + + auto struct symbol sym; + +@@ -821,7 +837,7 @@ + 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); ++ elp += sprintf(elp, " (%s+%ll/%zu)", symbol, sym.offset, sym.size); + else + elp += sprintf(elp, " (%s)", symbol); + } +@@ -830,7 +846,7 @@ + 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); ++ elp += sprintf(elp, " (%s+%ll/%zu)", symbol, sym.offset, sym.size); + else + elp += sprintf(elp, " (%s)", symbol); + } +@@ -841,7 +857,7 @@ + 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); ++ elp += sprintf(elp, " (%s+%ll/%zu)", symbol, sym.offset, sym.size); + else + elp += sprintf(elp, " (%s)", symbol); + } +@@ -877,17 +893,24 @@ + strcat(elp, symbol); + elp += strlen(symbol); + if ( debugging ) +- fprintf(stderr, "Symbol: %s = %lx = %s, %x/%d\n", \ ++#if __WORDSIZE == 64 ++ fprintf(stderr, "Symbol: %s = %lx = %s, %llx/%zu\n", \ + sl+1, value, \ + (sym.size==0) ? symbol+1 : symbol, \ + sym.offset, sym.size); ++#else ++ fprintf(stderr, "Symbol: %s = %x = %s, %llx/%zu\n", \ ++ sl+1, value, \ ++ (sym.size==0) ? symbol+1 : symbol, \ ++ sym.offset, sym.size); ++#endif + + value = 2; + if ( sym.size != 0 ) + { + --value; + ++kp; +- elp += sprintf(elp, "+%x/%d", sym.offset, sym.size); ++ elp += sprintf(elp, "+%llx/%zu", sym.offset, sym.size); + } + strncat(elp, kp, value); + elp += value; +--- ksym_mod.c ++++ ksym_mod.c Tue Sep 9 16:51:08 2003 +@@ -89,43 +89,101 @@ + #include + #include + #include +-#if !defined(__GLIBC__) +-#include +-#include +-#else /* __GLIBC__ */ +-#include +-extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence)); +-extern int get_kernel_syms __P ((struct kernel_sym *__table)); +-#endif /* __GLIBC__ */ + #include + #include +-#include ++#include ++#include ++/* #include */ + + #include "klogd.h" + #include "ksyms.h" + ++/* Used by get_kernel_syms, which is obsolete. */ ++struct kernel_sym ++{ ++ uintptr_t value; ++ char name[60]; /* should have been 64-sizeof(long); oh well */ ++}; ++ ++extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence)); ++extern int get_kernel_syms __P ((struct kernel_sym *__table)); ++ ++static inline __off64_t seek64(int fd, uintptr_t address) ++{ ++ __off64_t off = (__off64_t)address; ++ __off64_t ret = (__off64_t)-1; ++ ++ if (off < 0) { ++ __off64_t rel; ++ if (lseek64(fd, LONG_MAX, SEEK_SET) != LONG_MAX && errno) ++ goto err; ++ rel = (__off64_t)(address - LONG_MAX); ++ if ((ret = lseek64(fd, rel, SEEK_CUR)) != off && errno) ++ goto err; ++ ret = -ret; /* Relative to LONG_MAX */ ++ } else ++ ret = lseek64(fd, off, SEEK_SET); ++err: ++ return ret; ++} + +-#if !defined(__GLIBC__) +-/* +- * The following bit uses some kernel/library magic to product what +- * looks like a function call to user level code. This function is +- * actually a system call in disguise. The purpose of the getsyms +- * call is to return a current copy of the in-kernel symbol table. +- */ +-#define __LIBRARY__ +-#include +-#define __NR_getsyms __NR_get_kernel_syms +-_syscall1(int, getsyms, struct kernel_sym *, syms); +-#undef __LIBRARY__ +-extern int getsyms(struct kernel_sym *); +-#else /* __GLIBC__ */ + #define getsyms get_kernel_syms +-#endif /* __GLIBC__ */ ++ ++struct module ++{ ++ size_t size_of_struct; /* == sizeof(module) */ ++ struct module *next; ++ const char *name; ++ size_t size; ++ ++ union ++ { ++ atomic_t usecount; ++ long pad; ++ } uc; /* Needs to keep its size - so says rth */ ++ ++ unsigned long flags; /* AUTOCLEAN et al */ ++ ++ unsigned nsyms; ++ unsigned ndeps; ++ ++ struct module_symbol *syms; ++ struct module_ref *deps; ++ struct module_ref *refs; ++ int (*init)(void); ++ void (*cleanup)(void); ++ const struct exception_table_entry *ex_table_start; ++ const struct exception_table_entry *ex_table_end; ++#ifdef __alpha__ ++ unsigned long gp; ++#endif ++ /* Members past this point are extensions to the basic ++ module support and are optional. Use mod_member_present() ++ to examine them. */ ++ const struct module_persist *persist_start; ++ const struct module_persist *persist_end; ++ int (*can_unload)(void); ++ int runsize; /* In modutils, not currently used */ ++ const char *kallsyms_start; /* All symbols for kernel debugging */ ++ const char *kallsyms_end; ++ const char *archdata_start; /* arch specific data for module */ ++ const char *archdata_end; ++ const char *kernel_data; /* Reserved for kernel internal use */ ++}; ++ ++struct module_info ++{ ++ uintptr_t addr; ++ size_t size; ++ unsigned long flags; ++ long usecount; ++}; ++ + + /* Variables static to this module. */ + struct sym_table + { +- unsigned long value; ++ uintptr_t value; + char *name; + }; + +@@ -136,9 +194,7 @@ + + char *name; + struct module module; +-#if LINUX_VERSION_CODE >= 0x20112 + struct module_info module_info; +-#endif + }; + + static int num_modules = 0; +@@ -155,8 +211,8 @@ + + /* Function prototypes. */ + static void FreeModules(void); +-static int AddSymbol(struct Module *mp, unsigned long, char *); +-static int AddModule(unsigned long, char *); ++static int AddSymbol(struct Module *mp, uintptr_t, char *); ++static int AddModule(uintptr_t, char *); + static int symsort(const void *, const void *); + + +@@ -344,7 +400,7 @@ + * Purpose: This function is responsible for adding a module to + * the list of currently loaded modules. + * +- * Arguements: (unsigned long) address, (char *) symbol ++ * Arguements: (uintptr_t) address, (char *) symbol + * + * address:-> The address of the module. + * +@@ -355,7 +411,7 @@ + + static int AddModule(address, symbol) + +- unsigned long address; ++ uintptr_t address; + + char *symbol; + +@@ -403,10 +459,14 @@ + Syslog(LOG_WARNING, "Error opening /dev/kmem\n"); + return(0); + } +- if ( lseek64(memfd, address, SEEK_SET) < 0 ) ++ if ( seek64(memfd, address) < 0 ) + { + Syslog(LOG_WARNING, "Error seeking in /dev/kmem\n"); ++#if __WORDSIZE == 64 ++ Syslog(LOG_WARNING, "Symbol %s, value %16lx\n", symbol, address); ++#else + Syslog(LOG_WARNING, "Symbol %s, value %08x\n", symbol, address); ++#endif + return(0); + } + if ( read(memfd, \ +@@ -450,7 +510,7 @@ + * Purpose: This function is responsible for adding a symbol name + * and its address to the symbol table. + * +- * Arguements: (struct Module *) mp, (unsigned long) address, (char *) symbol ++ * Arguements: (struct Module *) mp, (uintptr_t) address, (char *) symbol + * + * mp:-> A pointer to the module which the symbol is + * to be added to. +@@ -469,7 +529,7 @@ + + struct Module *mp; + +- unsigned long address; ++ uintptr_t address; + + char *symbol; + +@@ -508,7 +568,7 @@ + * Purpose: Find the symbol which is related to the given address from + * a kernel module. + * +- * Arguements: (long int) value, (struct symbol *) sym ++ * Arguements: (uintptr_t) value, (struct symbol *) sym + * + * value:-> The address to be located. + * +@@ -524,7 +584,7 @@ + + extern char * LookupModuleSymbol(value, sym) + +- unsigned long value; ++ uintptr_t value; + + struct symbol *sym; + +@@ -574,15 +634,9 @@ + * If it is in this range we can at least return the + * name of the module. + */ +-#if LINUX_VERSION_CODE < 0x20112 +- if ( (void *) value >= mp->module.addr && +- (void *) value <= (mp->module.addr + \ +- mp->module.size * 4096) ) +-#else + if ( value >= mp->module_info.addr && + value <= (mp->module_info.addr + \ +- mp->module.size * 4096) ) +-#endif ++ mp->module.size * getpagesize()) ) + { + /* + * A special case needs to be checked for. The above +@@ -601,13 +655,8 @@ + if ( mp->num_syms > 0 ) + { + last = &mp->sym_array[mp->num_syms - 1]; +-#if LINUX_VERSION_CODE < 0x20112 +- sym->size = (int) mp->module.addr + \ +- (mp->module.size * 4096) - value; +-#else + sym->size = (int) mp->module_info.addr + \ +- (mp->module.size * 4096) - value; +-#endif ++ (mp->module.size * getpagesize()) - value; + sym->offset = value - last->value; + return(last->name); + } +@@ -617,12 +666,8 @@ + * Return the module name and the offset of the + * faulting address in the module. + */ +- sym->size = mp->module.size * 4096; +-#if LINUX_VERSION_CODE < 0x20112 +- sym->offset = (void *) value - mp->module.addr; +-#else ++ sym->size = mp->module.size * getpagesize(); + sym->offset = value - mp->module_info.addr; +-#endif + return(mp->name); + } + } +--- ksyms.h ++++ ksyms.h Tue Sep 9 14:15:47 2003 +@@ -20,16 +20,19 @@ + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + ++#include ++#include ++ + /* Variables, structures and type definitions static to this module. */ + + struct symbol + { + char *name; +- int size; +- int offset; ++ size_t size; ++ __off64_t offset; + }; + + + /* Function prototypes. */ +-extern char * LookupSymbol(unsigned long, struct symbol *); +-extern char * LookupModuleSymbol(unsigned long int, struct symbol *); ++extern char * LookupSymbol(uintptr_t, struct symbol *); ++extern char * LookupModuleSymbol(uintptr_t, struct symbol *); diff --git a/sysklogd-1.4.1-ksym.patch b/sysklogd-1.4.1-ksym.patch new file mode 100644 index 0000000..5fec9b5 --- /dev/null +++ b/sysklogd-1.4.1-ksym.patch @@ -0,0 +1,10 @@ +--- ksym_mod.c ++++ ksym_mod.c +@@ -91,6 +91,7 @@ + #include + #include + #include ++#include + #include + #include + /* #include */ diff --git a/sysklogd-1.4.1-ksyslogsize.diff b/sysklogd-1.4.1-ksyslogsize.diff new file mode 100644 index 0000000..a0b38c3 --- /dev/null +++ b/sysklogd-1.4.1-ksyslogsize.diff @@ -0,0 +1,90 @@ +--- sysklogd-1.4.1/klogd.c 2004-07-27 13:45:33.000000000 +0200 ++++ sysklogd-1.4.1/klogd.c 2004-07-27 13:53:48.985727118 +0200 +@@ -299,8 +299,10 @@ + no_fork = 0; /* don't fork - don't run in daemon mode */ + + static char *symfile = (char *) 0, +- log_buffer[LOG_BUFFER_SIZE]; ++ *log_buffer = (char *) 0; + ++static int log_buf_size = 0; ++ + static FILE *output_file = (FILE *) 0; + + static enum LOGSRC {none, proc, kernel} logsrc; +@@ -937,8 +939,8 @@ + * which will contain old messages. Then read the kernel log + * messages into this fresh buffer. + */ +- memset(log_buffer, '\0', sizeof(log_buffer)); +- if ( (rdcnt = ksyslog(2, log_buffer, sizeof(log_buffer))) < 0 ) ++ memset(log_buffer, '\0', log_buf_size); ++ if ( (rdcnt = ksyslog(2, log_buffer, log_buf_size-1)) < 0 ) + { + if ( errno == EINTR ) + return; +@@ -962,8 +964,8 @@ + * which will contain old messages. Then read the kernel messages + * from the message pseudo-file into this fresh buffer. + */ +- memset(log_buffer, '\0', sizeof(log_buffer)); +- if ( (rdcnt = read(kmsg, log_buffer, sizeof(log_buffer)-1)) < 0 ) ++ memset(log_buffer, '\0', log_buf_size); ++ if ( (rdcnt = read(kmsg, log_buffer, log_buf_size-1)) < 0 ) + { + if ( errno == EINTR ) + return; +@@ -976,6 +978,44 @@ + return; + } + ++static void SetBufSize(void) ++ ++{ ++ auto int n, sz; ++ ++ n = ksyslog(10, NULL, 0); /* read ringbuffer size */ ++ if (n > 0) { ++ log_buf_size = n; ++ log_buffer = (char *) malloc(log_buf_size); ++ if (!log_buffer) { ++ perror("ksyslog"); ++ exit(1); ++ } ++ } ++ ++ if (!log_buf_size) { ++ sz = LOG_BUFFER_SIZE; ++ while (1) { ++ log_buffer = (char *) malloc(sz+8); ++ if (!log_buffer) { ++ perror("ksyslog"); ++ exit(1); ++ } ++ n = ksyslog(3, log_buffer, sz+8); ++ if (n < sz+8 || sz >= (1<<22)) ++ break; ++ free(log_buffer); ++ sz <<= 1; ++ } ++ log_buf_size = sz; ++ } ++ ++ if (n < 0) { ++ perror("ksyslog"); ++ exit(1); ++ } ++} ++ + + int main(argc, argv) + +@@ -1053,6 +1093,8 @@ + console_log_level = *log_level - '0'; + } + ++ /* get/probe for the kernel ring buffer size */ ++ SetBufSize(); + + #ifndef TESTING + /* diff --git a/sysklogd-1.4.1-large.patch b/sysklogd-1.4.1-large.patch new file mode 100644 index 0000000..0cb6bf4 --- /dev/null +++ b/sysklogd-1.4.1-large.patch @@ -0,0 +1,30 @@ +--- Makefile ++++ Makefile Tue May 20 13:15:53 2003 +@@ -29,7 +29,7 @@ + + # The following define determines whether the package adheres to the + # file system standard. +-FSSTND = -DFSSTND ++FSSTND = -DFSSTND -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 + + # The following define establishes ownership for the man pages. + # Avery tells me that there is a difference between Debian and +--- syslogd.c ++++ syslogd.c Tue May 20 13:12:35 2003 +@@ -992,6 +992,7 @@ + (void) signal(SIGCHLD, reapchild); + (void) signal(SIGALRM, domark); + (void) signal(SIGUSR1, Debug ? debug_switch : SIG_IGN); ++ (void) signal(SIGXFSZ, SIG_IGN); + (void) alarm(TIMERINTVL); + + /* Create a partial message table for all file descriptors. */ +@@ -1852,7 +1853,7 @@ + errno = e; + logerror(f->f_un.f_fname); + } +- } else if (f->f_flags & SYNC_FILE) ++ } else if (f->f_type == F_FILE && (f->f_flags & SYNC_FILE)) + (void) fsync(f->f_file); + break; + diff --git a/sysklogd-1.4.1-no_SO_BSDCOMPAT.diff b/sysklogd-1.4.1-no_SO_BSDCOMPAT.diff new file mode 100644 index 0000000..32f3416 --- /dev/null +++ b/sysklogd-1.4.1-no_SO_BSDCOMPAT.diff @@ -0,0 +1,18 @@ +--- syslogd.c 2003/09/29 08:49:24 1.1 ++++ syslogd.c 2003/09/29 08:50:05 +@@ -1311,6 +1311,7 @@ + close(fd); + return -1; + } ++#ifdef SO_BSDCOMPAT + /* We need to enable BSD compatibility. Otherwise an attacker + * could flood our log files by sending us tons of ICMP errors. + */ +@@ -1320,6 +1321,7 @@ + close(fd); + return -1; + } ++#endif + #ifdef INET6 + error = bind(fd, res->ai_addr, res->ai_addrlen); + freeaddrinfo(res); diff --git a/sysklogd-1.4.1-owl-crunch_list.diff b/sysklogd-1.4.1-owl-crunch_list.diff new file mode 100644 index 0000000..f0aaf00 --- /dev/null +++ b/sysklogd-1.4.1-owl-crunch_list.diff @@ -0,0 +1,87 @@ +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 19:40:10 2001 ++++ sysklogd-1.4.1/syslogd.c Sun Apr 18 01:42:21 2004 +@@ -1254,30 +1254,26 @@ + crunch_list(list) + char *list; + { +- int count, i; ++ int i, m, n; + char *p, *q; + char **result = NULL; + + p = list; + + /* strip off trailing delimiters */ +- while (p[strlen(p)-1] == LIST_DELIMITER) { +- count--; ++ while (*p && p[strlen(p)-1] == LIST_DELIMITER) + p[strlen(p)-1] = '\0'; +- } + /* cut off leading delimiters */ +- while (p[0] == LIST_DELIMITER) { +- count--; ++ while (p[0] == LIST_DELIMITER) + p++; +- } + +- /* count delimiters to calculate elements */ +- for (count=i=0; p[i]; i++) +- if (p[i] == LIST_DELIMITER) count++; ++ /* count delimiters to calculate the number of elements */ ++ for (n = i = 0; p[i]; i++) ++ if (p[i] == LIST_DELIMITER) n++; + +- if ((result = (char **)malloc(sizeof(char *) * count+2)) == NULL) { ++ if ((result = (char **)malloc(sizeof(char *) * (n + 2))) == NULL) { + printf ("Sorry, can't get enough memory, exiting.\n"); +- exit(0); ++ exit(1); + } + + /* +@@ -1285,30 +1281,28 @@ + * characters are different from any delimiters, + * so we don't have to care about this. + */ +- count = 0; +- while ((q=strchr(p, LIST_DELIMITER))) { +- result[count] = (char *) malloc((q - p + 1) * sizeof(char)); +- if (result[count] == NULL) { ++ m = 0; ++ while ((q = strchr(p, LIST_DELIMITER)) && m < n) { ++ result[m] = (char *) malloc((q - p + 1) * sizeof(char)); ++ if (result[m] == NULL) { + printf ("Sorry, can't get enough memory, exiting.\n"); +- exit(0); ++ exit(1); + } +- strncpy(result[count], p, q - p); +- result[count][q - p] = '\0'; ++ memcpy(result[m], p, q - p); ++ result[m][q - p] = '\0'; + p = q; p++; +- count++; ++ m++; + } +- if ((result[count] = \ +- (char *)malloc(sizeof(char) * strlen(p) + 1)) == NULL) { ++ if ((result[m] = strdup(p)) == NULL) { + printf ("Sorry, can't get enough memory, exiting.\n"); +- exit(0); ++ exit(1); + } +- strcpy(result[count],p); +- result[++count] = NULL; ++ result[++m] = NULL; + + #if 0 +- count=0; +- while (result[count]) +- dprintf ("#%d: %s\n", count, StripDomains[count++]); ++ m = 0; ++ while (result[m]) ++ dprintf ("#%d: %s\n", m, result[m++]); + #endif + return result; + } diff --git a/sysklogd-1.4.1-preserve_percents.patch b/sysklogd-1.4.1-preserve_percents.patch new file mode 100644 index 0000000..f0a6321 --- /dev/null +++ b/sysklogd-1.4.1-preserve_percents.patch @@ -0,0 +1,45 @@ +--- sysklogd-1.4.1rh/klogd.c.preserve_percents 2002-04-17 10:49:34.000000000 -0400 ++++ sysklogd-1.4.1rh/klogd.c 2004-12-02 15:58:17.026614000 -0500 +@@ -741,7 +741,7 @@ + switch( parse_state ) + { + case PARSING_TEXT: +- delta = copyin( line, space, ptr, len, "\n[%" ); ++ delta = copyin( line, space, ptr, len, "\n[" ); + line += delta; + ptr += delta; + space -= delta; +@@ -797,30 +797,9 @@ + parse_state = PARSING_SYMSTART; /* at < */ + break; + } +- if( *ptr == '%' ) /* dangerous printf marker */ +- { +- delta = 0; +- while (len && *ptr == '%') +- { +- *line++ = *ptr++; /* copy it in */ +- space -= 1; +- len -= 1; +- delta++; +- } +- if (delta % 2) /* odd amount of %'s */ +- { +- if (space) +- { +- *line++ = '%'; /* so simply add one */ +- space -= 1; +- } +- else +- { +- *line++ = '\0'; /* remove the last one / terminate the string */ +- } +- +- } +- } ++ /* Now that line_buff is no longer fed to *printf as format ++ * string, '%'s are no longer "dangerous". ++ */ + break; + + case PARSING_SYMSTART: diff --git a/sysklogd-1.4.1-reopen.patch b/sysklogd-1.4.1-reopen.patch new file mode 100644 index 0000000..dda2457 --- /dev/null +++ b/sysklogd-1.4.1-reopen.patch @@ -0,0 +1,40 @@ +# +# Description: reconnects to log socket if a write fails with +# ECONNREFUSED or ENOTCONN -- similar to reopen +# in syslog routines provided by glibc. +# Happens if the log socket (provided by syslog +# daemon) has been reopened. Can be triggered by +# "rcsyslog reload" while syslog-ng is used. +# See also Bugzilla Bug #27971. +# +# Author: mt@suse.de +# +--- syslog.c ++++ syslog.c 2003/08/26 11:34:34 +@@ -102,7 +102,7 @@ + register int cnt; + register char *p; + time_t now; +- int fd, saved_errno; ++ int fd, saved_errno, rc; + char tbuf[2048], fmt_cpy[1024], *stdp = (char *) 0; + + saved_errno = errno; +@@ -172,7 +172,16 @@ + } + + /* output the message to the local logger */ +- if (write(LogFile, tbuf, cnt + 1) >= 0 || !(LogStat&LOG_CONS)) ++ rc = write(LogFile, tbuf, cnt + 1); ++ if(rc == -1 && connected && (ECONNREFUSED == errno || ++ ENOTCONN == errno)) { ++ /* try to reopen and write again */ ++ closelog(); ++ openlog(LogTag, LogStat | LOG_NDELAY, LogFacility); ++ if(connected) ++ rc = write(LogFile, tbuf, cnt + 1); ++ } ++ if(rc >= 0 || !(LogStat&LOG_CONS)) + return; + + /* diff --git a/sysklogd-1.4.1-showpri.patch b/sysklogd-1.4.1-showpri.patch new file mode 100644 index 0000000..5c93125 --- /dev/null +++ b/sysklogd-1.4.1-showpri.patch @@ -0,0 +1,185 @@ +--- sysklogd.8.orig 2005-05-23 09:48:29.030220794 -0500 ++++ sysklogd.8 2005-05-23 09:48:34.564338699 -0500 +@@ -31,6 +31,7 @@ sysklogd \- Linux system logging utiliti + ] + .RB [ " \-t " ] + .RB [ " \-v " ] ++.RB [ " \-S " ] + .LP + .SH DESCRIPTION + .B Sysklogd +@@ -158,6 +159,28 @@ loghost. + .TP + .B "\-v" + Print version and exit. ++.TP ++.B "\-S" ++Insert a special code before the hostname in each message to indicate the ++message's priority and facility. Having the priority and facility encoded in ++each message allows a log analyzer program to monitor a single file ++containing all logged messages. The analyzer program can parse the ++priority/facility code for each logged message to determine if it is ++of interest. ++ ++The priority/facility code takes the form of a priority number ++followed by a letter that indicates the facility. The priority number ++can range from 0 to 7. The facility letter can range from 'A' to 'Y', ++where 'A' corresponds to facility number zero (LOG_KERN), 'B' ++corresponds to facility 1 (LOG_USER), etc. ++See /usr/include/sys/syslog.h for a list of priority and LOG_xxx codes. ++ ++Example: ++ ++ Jun 27 19:22:20 5Q:silence test[1966]: testing ++ ++The above message contains a priority/facility code of '5Q', which breaks ++down to a priority of 5 (LOG_NOTICE) and a facility of 16 (LOG_LOCAL0). + .LP + .SH SIGNALS + .B Syslogd +--- syslogd.c 2005-05-23 09:48:29.031197346 -0500 ++++ syslogd.c.orig 2005-05-23 09:48:55.354145686 -0500 +@@ -594,6 +594,9 @@ int funix[MAXFUNIX] = { -1, }; + #define SYNC_FILE 0x002 /* do fsync on file after printing */ + #define ADDDATE 0x004 /* add a date to the message */ + #define MARK 0x008 /* this message is a mark */ ++#define SHOWPRI 0x010 /* Will craft priFac before hostname */ ++ ++int showpri = 0; /* Are we showing priority in message ? Default: no */ + + /* + * This table contains plain text for h_errno errors used by the +@@ -772,7 +775,7 @@ void printchopped(const char *hname, cha + void printline(const char *hname, char *msg); + void printsys(char *msg); + void logmsg(int pri, char *msg, const char *from, int flags); +-void fprintlog(register struct filed *f, char *from, int flags, char *msg); ++void fprintlog(register struct filed *f, char *from, int flags, char *msg, ...); + void endtty(); + void wallmsg(register struct filed *f, struct iovec *iov); + void reapchild(); +@@ -861,7 +864,7 @@ int main(argc, argv) + funix[i] = -1; + } + +- while ((ch = getopt(argc, argv, "a:dhf:l:m:np:rs:tv")) != EOF) ++ while ((ch = getopt(argc, argv, "a:dhf:l:m:np:rs:tvS")) != EOF) + switch((char)ch) { + case 'a': + if (nfunix < MAXFUNIX) +@@ -913,6 +916,9 @@ int main(argc, argv) + case 'v': + printf("syslogd %s.%s\n", VERSION, PATCHLEVEL); + exit (0); ++ case 'S': ++ showpri++; ++ break; + case '?': + default: + usage(); +@@ -1151,9 +1157,9 @@ int main(argc, argv) + dprintf("UNIX socket error: %d = %s.\n", \ + errno, strerror(errno)); + logerror("recvfrom UNIX"); +- } +- } + } ++ } ++ } + #endif + + #ifdef SYSLOG_INET +@@ -1221,7 +1227,7 @@ int main(argc, argv) + + int usage() + { +- fprintf(stderr, "usage: syslogd [-drvh] [-l hostlist] [-m markinterval] [-n] [-p path]\n" \ ++ fprintf(stderr, "usage: syslogd [-drvSh] [-l hostlist] [-m markinterval] [-n] [-p path]\n" \ + " [-s domainlist] [-f conffile]\n"); + exit(1); + } +@@ -1660,7 +1666,7 @@ void logmsg(pri, msg, from, flags) + + if (f->f_file >= 0) { + untty(); +- fprintlog(f, (char *)from, flags, msg); ++ fprintlog(f, (char *)from, flags|SHOWPRI, msg, prilev, fac); + (void) close(f->f_file); + f->f_file = -1; + } +@@ -1706,13 +1712,13 @@ void logmsg(pri, msg, from, flags) + * in the future. + */ + if (now > REPEATTIME(f)) { +- fprintlog(f, (char *)from, flags, (char *)NULL); ++ fprintlog(f, (char *)from, flags|SHOWPRI, (char *)NULL, prilev, fac); + BACKOFF(f); + } + } else { + /* new line, save it */ + if (f->f_prevcount) +- fprintlog(f, (char *)from, 0, (char *)NULL); ++ fprintlog(f, (char *)from, 0|SHOWPRI, (char *)NULL, prilev, fac); + f->f_prevpri = pri; + f->f_repeatcount = 0; + (void) strncpy(f->f_lasttime, timestamp, 15); +@@ -1721,11 +1727,11 @@ void logmsg(pri, msg, from, flags) + if (msglen < MAXSVLINE) { + f->f_prevlen = msglen; + (void) strcpy(f->f_prevline, msg); +- fprintlog(f, (char *)from, flags, (char *)NULL); ++ fprintlog(f, (char *)from, flags|SHOWPRI, (char *)NULL, prilev, fac); + } else { + f->f_prevline[0] = 0; + f->f_prevlen = 0; +- fprintlog(f, (char *)from, flags, msg); ++ fprintlog(f, (char *)from, flags|SHOWPRI, msg, prilev, fac); + } + } + } +@@ -1737,11 +1743,7 @@ void logmsg(pri, msg, from, flags) + } /* balance parentheses for emacs */ + #endif + +-void fprintlog(f, from, flags, msg) +- register struct filed *f; +- char *from; +- int flags; +- char *msg; ++void fprintlog(register struct filed *f, char *from, int flags,char *msg, ...) + { + struct iovec iov[6]; + register struct iovec *v = iov; +@@ -1762,9 +1764,29 @@ void fprintlog(f, from, flags, msg) + v->iov_base = f->f_lasttime; + v->iov_len = 15; + v++; +- v->iov_base = " "; +- v->iov_len = 1; +- v++; ++ ++ if(showpri && (flags & SHOWPRI) ) { ++ va_list ap; ++ int prilev; ++ int fac; ++ char prilev_char[5]; ++ const char fac_string[LOG_NFACILITIES+1]="ABCDEFGHIJKLMNOPQRSTUVWXY"; ++ ++ va_start(ap,msg); ++ prilev=va_arg(ap,int); ++ fac=va_arg(ap,int); ++ va_end(ap); ++ sprintf(prilev_char, " %1d%c:", prilev, fac_string[fac]); ++ v->iov_base = prilev_char; ++ v->iov_len = 4; ++ v++; ++ } ++ else { ++ v->iov_base = " "; ++ v->iov_len = 1; ++ v++; ++ } ++ + v->iov_base = f->f_prevhost; + v->iov_len = strlen(v->iov_base); + v++; diff --git a/sysklogd-1.4.1-sparc.patch b/sysklogd-1.4.1-sparc.patch new file mode 100644 index 0000000..352fc5e --- /dev/null +++ b/sysklogd-1.4.1-sparc.patch @@ -0,0 +1,95 @@ +--- ksym.c ++++ ksym.c Wed May 23 18:50:36 2001 +@@ -112,6 +112,7 @@ + #include + #include + #include ++#include + #include "klogd.h" + #include "ksyms.h" + +@@ -770,6 +771,84 @@ + 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-1.4.1-unix_sockets.patch b/sysklogd-1.4.1-unix_sockets.patch new file mode 100644 index 0000000..0056a9e --- /dev/null +++ b/sysklogd-1.4.1-unix_sockets.patch @@ -0,0 +1,147 @@ +--- syslog.conf.5 ++++ syslog.conf.5 2004-09-16 13:21:07.144284248 -0700 +@@ -159,6 +159,16 @@ + .BR syslogd (8) + is started. + ++.SS Unix Socket (UDP) ++This version of ++.BR syslogd (8) ++has support for logging output to named sockets (UDP UNIX domain sockets). ++A named socket can be used as a destination for log messages by prepending ++a double at-sign symbol (``@@'') to the pathname of the socket file. This ++feature is useful for applications that need to process all logged messages. ++All they need to do is open the named socket for reading and then process ++the messages as they are received. ++ + .SS Terminal and Console + If the file you specified is a tty, special tty-handling is done, same + with +--- syslogd.c ++++ syslogd.c 2004-09-16 13:21:07.150143661 -0700 +@@ -638,6 +638,10 @@ + struct sockaddr_in f_addr; + #endif + } f_forw; /* forwarding address */ ++ struct { ++ struct sockaddr_un su_addr; /* destination address */ ++ int su_addrlen; /* address len */ ++ } f_usock; /* UNIX domain socket address */ + char f_fname[MAXFNAME]; + } f_un; + char f_prevline[MAXSVLINE]; /* last message logged */ +@@ -649,6 +653,8 @@ + int f_repeatcount; /* number of "repeated" msgs */ + int f_flags; /* store some additional flags */ + }; ++#define fus_su f_un.f_usock.su_addr ++#define fus_sal f_un.f_usock.su_addrlen + + /* + * Intervals at which we flush out "message repeated" messages, +@@ -679,10 +685,11 @@ + #define F_FORW_SUSP 7 /* suspended host forwarding */ + #define F_FORW_UNKN 8 /* unknown host forwarding */ + #define F_PIPE 9 /* named pipe */ ++#define F_USOCK 10 /* UNIX domain UDP socket */ + char *TypeNames[] = { + "UNUSED", "FILE", "TTY", "CONSOLE", + "FORW", "USERS", "WALL", "FORW(SUSPENDED)", +- "FORW(UNKNOWN)", "PIPE" ++ "FORW(UNKNOWN)", "PIPE", "USOCK" + }; + + struct filed *Files = (struct filed *) 0; +@@ -1949,6 +1956,32 @@ + (void) fsync(f->f_file); + break; + ++ case F_USOCK: ++ f->f_time = now; ++ dprintf(" %s\n", f->fus_su.sun_path[0] ? f->fus_su.sun_path : ""); ++ if (f->f_file != -1) { ++ int l; ++ char line[MAXLINE +1]; ++ ++ int chunk_len,dstbuf_size = 0; ++ for (l = 0;l < 5;l++) { ++ if( (chunk_len = iov[l].iov_len) > (sizeof(line) - dstbuf_size)) ++ chunk_len = sizeof(line) - dstbuf_size; ++ if(chunk_len > 0) { ++ memcpy(&line[dstbuf_size],iov[l].iov_base,chunk_len); ++ dstbuf_size += chunk_len; ++ } ++ } ++ if ((l = dstbuf_size) > MAXLINE) l = MAXLINE; ++ line[l] = 0; ++ if (sendto(f->f_file, line, l, MSG_DONTWAIT, ++ (struct sockaddr*) &f->fus_su, f->fus_sal) != l) { ++ dprintf("sendto error - \"%s\"\n",strerror(errno)); ++ /* sendto error must be ignored */ ++ } ++ } ++ break; ++ + case F_USERS: + case F_WALL: + f->f_time = now; +@@ -2357,6 +2390,7 @@ + case F_PIPE: + case F_TTY: + case F_CONSOLE: ++ case F_USOCK: + (void) close(f->f_file); + break; + } +@@ -2509,7 +2543,11 @@ + case F_PIPE: + case F_TTY: + case F_CONSOLE: +- printf("%s", f->f_un.f_fname); ++ case F_USOCK: ++ if(f->f_type == F_USOCK) ++ printf("%s", f->fus_su.sun_path[0] ? f->fus_su.sun_path : ""); ++ else ++ printf("%s", f->f_un.f_fname); + if (f->f_file == -1) + printf(" (unused)"); + break; +@@ -2727,8 +2765,37 @@ + switch (*p) + { + case '@': ++ if(*(++p) == '@') { ++ /* We need to set up for output to a named socket... ++ */ ++ memset((char *)&f->fus_su, 0, sizeof(f->fus_su)); ++ (void)strncpy(f->fus_su.sun_path, ++p, ++ sizeof(f->fus_su.sun_path)-1); ++ f->fus_su.sun_path[sizeof(f->fus_su.sun_path)-1] = 0; ++ dprintf ("unix socket filename: %s\n", ++ f->fus_su.sun_path); ++ f->fus_su.sun_family = AF_UNIX; ++ if( (f->f_file = socket(PF_UNIX, SOCK_DGRAM, 0)) < 0) { ++ dprintf("Can't create unix socket\n"); ++ logerror("Can't create unix socket"); ++ break; ++ } ++ f->fus_sal = strlen(f->fus_su.sun_path) + ++ sizeof(f->fus_su.sun_family); ++ f->f_type = F_USOCK; ++ ++ /* Make sure that pathname exists... ++ */ ++ if (bind(f->f_file, (struct sockaddr *)&f->fus_su, f->fus_sal) < 0 || ++ (chmod(f->fus_su.sun_path, 0666) < 0)) { ++ dprintf("Can't bind unix socket to name\n"); ++ logerror("Can't bind unix unix socket to name"); ++ break; ++ } ++ break; ++ } + #ifdef SYSLOG_INET +- (void) strcpy(f->f_un.f_forw.f_hname, ++p); ++ (void) strcpy(f->f_un.f_forw.f_hname, p); + dprintf("forwarding host: %s\n", p); /*ASP*/ + #ifdef INET6 + f->f_type = F_FORW_UNKN; diff --git a/sysklogd-1.4.1-utf8.patch b/sysklogd-1.4.1-utf8.patch new file mode 100644 index 0000000..a58417f --- /dev/null +++ b/sysklogd-1.4.1-utf8.patch @@ -0,0 +1,11 @@ +--- sysklogd-1.4.1/syslogd.c 2004-09-26 11:33:01.771437000 +0900 ++++ sysklogd-1.4.1/syslogd.c 2004-09-26 11:41:27.136610056 +0900 +@@ -1539,7 +1539,7 @@ + else if (c < 040) { + *q++ = '^'; + *q++ = c ^ 0100; +- } else if (c == 0177 || (c & 0177) < 040) { ++ } else if (c == 0177 || c >= 0376) { + *q++ = '\\'; + *q++ = '0' + ((c & 0300) >> 6); + *q++ = '0' + ((c & 0070) >> 3); diff --git a/sysklogd-1.4.1.dif b/sysklogd-1.4.1.dif new file mode 100644 index 0000000..19c407c --- /dev/null +++ b/sysklogd-1.4.1.dif @@ -0,0 +1,631 @@ +--- .pkgextract ++++ .pkgextract 2006-02-08 17:29:50.000000000 +0100 +@@ -0,0 +1,16 @@ ++patch -p0 --suffix=.dgram -s < ../sysklogd-1.4.1-dgram.patch ++patch -p0 --suffix=.sparc -s < ../sysklogd-1.4.1-sparc.patch ++patch -p0 --suffix=.forw -s < ../sysklogd-1.4.1-forw.patch ++patch -p0 --suffix=.fileleak -s < ../sysklogd-1.4.1-fileleak.patch ++patch -p0 --suffix=.ipv6 -s < ../sysklogd-ipv6.diff ++patch -p0 --suffix=.klogd24 -s < ../sysklogd-1.4.1-klogd24.dif ++patch -p0 --suffix=.large -s < ../sysklogd-1.4.1-large.patch ++patch -p1 --suffix=.dns -s < ../sysklogd-1.4.1-dns.patch ++patch -p0 --suffix=.reopen -s < ../sysklogd-1.4.1-reopen.patch ++patch -p0 --suffix=.sobsd -s < ../sysklogd-1.4.1-no_SO_BSDCOMPAT.diff ++patch -p1 --suffix=.owlcr -s < ../sysklogd-1.4.1-owl-crunch_list.diff ++patch -p1 --suffix=.klsize -s < ../sysklogd-1.4.1-ksyslogsize.diff ++patch -p0 --suffix=.usock -s < ../sysklogd-1.4.1-unix_sockets.patch ++patch -p0 --suffix=.shprio -s < ../sysklogd-1.4.1-showpri.patch ++patch -p1 --suffix=.presperc -s < ../sysklogd-1.4.1-preserve_percents.patch ++patch -p1 --suffix=.utf8 -s < ../sysklogd-1.4.1-utf8.patch +--- Makefile ++++ Makefile 2006-02-08 17:29:50.000000000 +0100 +@@ -1,14 +1,17 @@ + # Makefile for syslogd and klogd daemons. + ++# For newer Kernel we have 16k buffer size ++LOG_BUFFER_SIZE = -DLOG_BUFFER_SIZE=16384 ++ + CC= gcc +-#CFLAGS= -g -DSYSV -Wall ++#CFLAGS= -g -DSYSV -Wall $(LOG_BUFFER_SIZE) + #LDFLAGS= -g +-CFLAGS= $(RPM_OPT_FLAGS) -DINET6 -O3 -DSYSV -fomit-frame-pointer -Wall -fno-strength-reduce +-LDFLAGS= -s ++CFLAGS= $(RPM_OPT_FLAGS) -D_GNU_SOURCE -DINET6 -DSYSV -Wall -pipe $(LOG_BUFFER_SIZE) -funroll-loops -fpie ++LDFLAGS= -pie + + # Look where your install program is. + INSTALL = /usr/bin/install +-BINDIR = /usr/sbin ++BINDIR = /sbin + MANDIR = /usr/man + + # There is one report that under an all ELF system there may be a need to +@@ -25,7 +28,7 @@ + + # Define the following to impart start-up delay in klogd. This is + # useful if klogd is started simultaneously or in close-proximity to syslogd. +-# KLOGD_START_DELAY = -DKLOGD_DELAY=5 ++KLOGD_START_DELAY = -DKLOGD_DELAY=5 + + # The following define determines whether the package adheres to the + # file system standard. +@@ -112,11 +115,12 @@ + 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} syslogd ${DESTDIR}${BINDIR}/syslogd ++ ${INSTALL} klogd ${DESTDIR}${BINDIR}/klogd ++ ${INSTALL} -m 644 sample.conf ${DESTDIR}/etc/syslog.conf + + install_man: +- ${INSTALL} -o ${MAN_OWNER} -g ${MAN_OWNER} -m 644 sysklogd.8 ${MANDIR}/man8/sysklogd.8 +- ${INSTALL} -o ${MAN_OWNER} -g ${MAN_OWNER} -m 644 syslogd.8 ${MANDIR}/man8/syslogd.8 +- ${INSTALL} -o ${MAN_OWNER} -g ${MAN_OWNER} -m 644 syslog.conf.5 ${MANDIR}/man5/syslog.conf.5 +- ${INSTALL} -o ${MAN_OWNER} -g ${MAN_OWNER} -m 644 klogd.8 ${MANDIR}/man8/klogd.8 ++ ${INSTALL} -m 644 sysklogd.8 ${DESTDIR}${MANDIR}/man8/sysklogd.8 ++ ${INSTALL} -m 644 syslogd.8 ${DESTDIR}${MANDIR}/man8/syslogd.8 ++ ${INSTALL} -m 644 syslog.conf.5 ${DESTDIR}${MANDIR}/man5/syslog.conf.5 ++ ${INSTALL} -m 644 klogd.8 ${DESTDIR}${MANDIR}/man8/klogd.8 +--- klogd.c ++++ klogd.c 2006-02-08 17:38:21.000000000 +0100 +@@ -275,15 +275,29 @@ + #define ksyslog klogctl + #endif + +-#define LOG_BUFFER_SIZE 4096 ++#ifndef _PATH_KLOG ++# define _PATH_KLOG "/proc/kmsg" ++#endif ++ ++#ifndef LOG_BUFFER_SIZE ++# define LOG_BUFFER_SIZE 4096 ++#endif + #define LOG_LINE_LENGTH 1000 + + #ifndef TESTING +-#if defined(FSSTND) ++# if defined(FSSTND) + static char *PidFile = _PATH_VARRUN "klogd.pid"; +-#else ++# else + static char *PidFile = "/etc/klogd.pid"; ++# endif + #endif ++ ++#if defined(__USE_FORTIFY_LEVEL) ++# undef syslog ++# undef vsyslog ++# undef openlog ++# undef closelog ++# undef setlogmask + #endif + + static int kmsg, +@@ -295,6 +309,8 @@ + + static int use_syscall = 0, + one_shot = 0, ++ ring_buf = 0, ++ ring_buf_clear = 0, + symbol_lookup = 1, + no_fork = 0; /* don't fork - don't run in daemon mode */ + +@@ -868,8 +884,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; +@@ -910,7 +925,7 @@ + static void LogKernelLine(void) + + { +- auto int rdcnt; ++ auto int rdcnt, lvl; + + /* + * Zero-fill the log buffer. This should cure a multitude of +@@ -919,6 +934,11 @@ + * messages into this fresh buffer. + */ + memset(log_buffer, '\0', log_buf_size); ++ lvl = 2; ++ if (one_shot) { ++ if (ring_buf) lvl = 3; ++ if (ring_buf_clear) lvl = 4; ++ } + if ( (rdcnt = ksyslog(2, log_buffer, log_buf_size-1)) < 0 ) + { + if ( errno == EINTR ) +@@ -1010,10 +1030,15 @@ + *output = (char *) 0; + + #ifndef TESTING +- chdir ("/"); ++ if (chdir("/") < 0) { ++ fprintf(stderr, ++ "klogd: Can not change to root directory: %s\n", ++ strerror(errno)); ++ exit(1); ++ } + #endif + /* Parse the command-line. */ +- while ((ch = getopt(argc, argv, "c:df:iIk:nopsvx2")) != EOF) ++ while ((ch = getopt(argc, argv, "c:df:iIk:nopsvx2rR")) != EOF) + switch((char)ch) + { + case '2': /* Print lines with symbols twice. */ +@@ -1044,6 +1069,14 @@ + case 'o': /* One-shot mode. */ + one_shot = 1; + break; ++ case 'r': /* One-shot mode. */ ++ one_shot = 1; ++ ring_buf = 1; ++ break; ++ case 'R': /* One-shot mode. */ ++ one_shot = 1; ++ ring_buf_clear = 1; ++ break; + case 'p': + SetParanoiaLevel(1); /* Load symbols on oops. */ + break; +@@ -1164,8 +1197,11 @@ + if ( one_shot ) + { + if (symbol_lookup) { +- InitKsyms(symfile); +- InitMsyms(); ++ /* Both functions return 1 at success and 0 otherwise */ ++ symbol_lookup = InitKsyms(symfile); ++ symbol_lookup |= InitMsyms(); ++ if (!symbol_lookup) ++ Syslog(LOG_WARNING, "Cannot build symbol table - disabling symbol lookups"); + } + if ( (logsrc = GetKernelLogSrc()) == kernel ) + LogKernelLine(); +@@ -1180,8 +1216,11 @@ + #endif + logsrc = GetKernelLogSrc(); + if (symbol_lookup) { +- InitKsyms(symfile); +- InitMsyms(); ++ /* Both functions return 1 at success and 0 otherwise */ ++ symbol_lookup = InitKsyms(symfile); ++ symbol_lookup |= InitMsyms(); ++ if (!symbol_lookup) ++ Syslog(LOG_WARNING, "Cannot build symbol table - disabling symbol lookups"); + } + + /* The main loop. */ +--- pidfile.c ++++ pidfile.c 2006-02-08 17:29:50.000000000 +0100 +@@ -41,11 +41,11 @@ + int read_pid (char *pidfile) + { + FILE *f; +- int pid; ++ int pid = 0; + + if (!(f=fopen(pidfile,"r"))) + return 0; +- fscanf(f,"%d", &pid); ++ (void)fscanf(f,"%d", &pid); + fclose(f); + return pid; + } +@@ -85,7 +85,7 @@ + { + FILE *f; + int fd; +- int pid; ++ int pid = 0; + + if ( ((fd = open(pidfile, O_RDWR|O_CREAT, 0644)) == -1) + || ((f = fdopen(fd, "r+")) == NULL) ) { +@@ -94,7 +94,7 @@ + } + + if (flock(fd, LOCK_EX|LOCK_NB) == -1) { +- fscanf(f, "%d", &pid); ++ (void)fscanf(f, "%d", &pid); + fclose(f); + printf("Can't lock, lock is held by pid %d.\n", pid); + return 0; +--- resolve.c ++++ resolve.c 2006-02-08 17:29:50.000000000 +0100 +@@ -13,6 +13,7 @@ + #include + #include + #include ++#include + + #if defined(__GLIBC__) + #define dprintf mydprintf +@@ -208,7 +209,7 @@ + { + struct sockaddr_storage ss; + struct addrinfo hints, *res; +- int r; ++ int r, c; + + memset(&hints, 0, sizeof(hints)); + hints.ai_socktype = SOCK_DGRAM; +@@ -244,6 +245,20 @@ + } else { + memcpy(&ss, res->ai_addr, res->ai_addrlen); + } +- write(fd, &ss, sizeof(ss)); +- exit(0); ++ ++ c = 100; ++ do { ++ if ((r = write(fd, &ss, sizeof(ss))) < 0) { ++ if ((errno != EAGAIN) && (errno != EINTR)) { ++ dprintf("failed to write: %s\n", strerror(errno)); ++ exit(1); ++ } ++ usleep(50000); ++ } ++ } while ((r < 0) && (c-- > 0)); ++ ++ if (r >= 0) ++ exit(0); ++ dprintf("failed to write: %s\n", strerror(errno)); ++ exit(1); + } +--- sample-s390.conf ++++ sample-s390.conf 2006-02-08 17:29:50.000000000 +0100 +@@ -0,0 +1,60 @@ ++# /etc/syslog.conf - Configuration file for syslogd(8) ++# ++# For info about the format of this file, see "man syslog.conf". ++# ++ ++# ++# ++# print most on /dev/console and on the xconsole pipe ++# ++kern.*;*.warning;news.emerg;mail.alert;authpriv.none /dev/console ++kern.*;*.warning;news.err;mail.err;authpriv.none |/dev/xconsole ++*.emerg * ++ ++# enable this, if you want that root is informed ++# immediately, e.g. of logins ++#*.alert root ++ ++ ++# ++# all email-messages in one file ++# ++mail.* -/var/log/mail ++mail.info -/var/log/mail.info ++mail.warning -/var/log/mail.warn ++mail.err /var/log/mail.err ++ ++# ++# all news-messages ++# ++# these files are rotated and examined by "news.daily" ++news.crit -/var/log/news/news.crit ++news.err -/var/log/news/news.err ++news.notice -/var/log/news/news.notice ++# enable this, if you want to keep all news messages ++# in one file ++#news.* -/var/log/news.all ++ ++# ++# Warnings in one file ++# ++*.=warning;*.=err -/var/log/warn ++*.crit /var/log/warn ++ ++# ++# save the rest in one file ++# ++*.*;mail.none;news.none -/var/log/messages ++ ++# ++# enable this, if you want to keep all messages ++# in one file ++#*.* -/var/log/allmessages ++ ++# ++# Some foreign boot scripts require local7 ++# ++local0,local1.* -/var/log/localmessages ++local2,local3.* -/var/log/localmessages ++local4,local5.* -/var/log/localmessages ++local6,local7.* -/var/log/localmessages +--- sample.conf ++++ sample.conf 2006-02-08 17:29:50.000000000 +0100 +@@ -0,0 +1,60 @@ ++# /etc/syslog.conf - Configuration file for syslogd(8) ++# ++# For info about the format of this file, see "man syslog.conf". ++# ++ ++# ++# ++# print most on tty10 and on the xconsole pipe ++# ++kern.warning;*.err;authpriv.none /dev/tty10 ++kern.warning;*.err;authpriv.none |/dev/xconsole ++*.emerg * ++ ++# enable this, if you want that root is informed ++# immediately, e.g. of logins ++#*.alert root ++ ++ ++# ++# all email-messages in one file ++# ++mail.* -/var/log/mail ++mail.info -/var/log/mail.info ++mail.warning -/var/log/mail.warn ++mail.err /var/log/mail.err ++ ++# ++# all news-messages ++# ++# these files are rotated and examined by "news.daily" ++news.crit -/var/log/news/news.crit ++news.err -/var/log/news/news.err ++news.notice -/var/log/news/news.notice ++# enable this, if you want to keep all news messages ++# in one file ++#news.* -/var/log/news.all ++ ++# ++# Warnings in one file ++# ++*.=warning;*.=err -/var/log/warn ++*.crit /var/log/warn ++ ++# ++# save the rest in one file ++# ++*.*;mail.none;news.none -/var/log/messages ++ ++# ++# enable this, if you want to keep all messages ++# in one file ++#*.* -/var/log/allmessages ++ ++# ++# Some foreign boot scripts require local7 ++# ++local0,local1.* -/var/log/localmessages ++local2,local3.* -/var/log/localmessages ++local4,local5.* -/var/log/localmessages ++local6,local7.* -/var/log/localmessages +--- syslog.c ++++ syslog.c 2006-02-08 17:29:50.000000000 +0100 +@@ -70,7 +70,20 @@ + #include + #include + +-#define _PATH_LOGNAME "/dev/log" ++#ifdef _PATH_LOG ++# define _PATH_LOGNAME _PATH_LOG ++#endif ++#ifndef _PATH_LOGNAME ++# define _PATH_LOGNAME "/dev/log" ++#endif ++ ++#if defined(__USE_FORTIFY_LEVEL) ++# undef syslog ++# undef vsyslog ++# undef openlog ++# undef closelog ++# undef setlogmask ++#endif + + static int LogFile = -1; /* fd for log */ + static int connected; /* have done connect */ +--- syslogd.c ++++ syslogd.c 2006-02-08 17:29:50.000000000 +0100 +@@ -466,6 +466,7 @@ + #include + #endif + #include ++#include + #include + #include + #include +@@ -579,7 +580,11 @@ + # define UNAMESZ 8 /* length of a login name */ + #endif + #define MAXUNAMES 20 /* maximum number of user names */ +-#define MAXFNAME 200 /* max file pathname length */ ++#ifdef _POSIX_PATH_MAX ++# define MAXFNAME _POSIX_PATH_MAX ++#else ++# define MAXFNAME 200 /* max file pathname length */ ++#endif + + #define INTERNAL_NOPRI 0x10 /* the "no priority" priority */ + #define TABLE_NOPRI 0 /* Value to indicate no priority in f_pmask */ +@@ -659,8 +664,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; \ +@@ -771,7 +776,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); +@@ -816,7 +821,7 @@ + int len, num_fds; + #else /* __GLIBC__ */ + #ifndef TESTING +- size_t len; ++ socklen_t len; + #endif + int num_fds; + #endif /* __GLIBC__ */ +@@ -857,7 +862,12 @@ + int maxfds; + + #ifndef TESTING +- chdir ("/"); ++ if (chdir("/") < 0) { ++ fprintf(stderr, ++ "syslogd: Can not change to root directory: %s\n", ++ strerror(errno)); ++ exit(1); ++ } + #endif + for (i = 1; i < MAXFUNIX; i++) { + funixn[i] = ""; +@@ -1029,13 +1039,15 @@ + *p = tolower(*p); + + (void) signal(SIGTERM, die); ++ (void) siginterrupt(SIGTERM,1); /* Make recvfrom() be able to receive EINTR */ + (void) signal(SIGINT, Debug ? die : SIG_IGN); + (void) signal(SIGQUIT, Debug ? die : SIG_IGN); + (void) signal(SIGCHLD, reapchild); +- (void) signal(SIGALRM, domark); + (void) signal(SIGUSR1, Debug ? debug_switch : SIG_IGN); + (void) signal(SIGXFSZ, SIG_IGN); ++ (void) signal(SIGALRM, domark); + (void) alarm(TIMERINTVL); ++ (void) siginterrupt(SIGALRM,1); /* Make recvfrom() be able to receive EINTR */ + + /* Create a partial message table for all file descriptors. */ + num_fds = getdtablesize(); +@@ -1193,7 +1205,7 @@ + * -Joey + */ + printchopped(from, line, \ +- i + 2, finet); ++ (size_t)(i + 2), finet); + } else if (i < 0 && errno != EINTR) { + dprintf("INET socket error: %d = %s.\n", \ + errno, strerror(errno)); +@@ -1212,7 +1224,7 @@ + parts[fileno(stdin)] = (char *) 0; + i = read(fileno(stdin), line, MAXLINE); + if (i > 0) { +- printchopped(LocalHostName, line, i+1, fileno(stdin)); ++ printchopped(LocalHostName, line, (size_t)(i+1), fileno(stdin)); + } else if (i < 0) { + if (errno != EINTR) { + logerror("stdin"); +@@ -1257,8 +1269,9 @@ + close(fd); + #ifndef SYSV + die(0); +-#endif ++#else + return -1; ++#endif + } + return fd; + } +@@ -1435,7 +1448,7 @@ + void printchopped(hname, msg, len, fd) + const char *hname; + char *msg; +- int len; ++ size_t len; + int fd; + { + auto int ptlngth; +@@ -1535,6 +1548,8 @@ + while ((c = *p++) && q < &line[sizeof(line) - 4]) { + if (c == '\n') + *q++ = ' '; ++ else if (c == '\t') ++ *q++ = c; + else if (c < 040) { + *q++ = '^'; + *q++ = c ^ 0100; +@@ -1702,7 +1717,7 @@ + !strcmp(from, f->f_prevhost)) { + (void) strncpy(f->f_lasttime, timestamp, 15); + f->f_prevcount++; +- dprintf("msg repeated %d times, %ld sec of %d.\n", ++ dprintf("msg repeated %d times, %ld sec of %ld.\n", + f->f_prevcount, now - f->f_time, + repeatinterval[f->f_repeatcount]); + /* +@@ -2031,13 +2046,7 @@ + register struct filed *f; + struct iovec *iov; + { +- char p[6 + UNAMESZ]; +- register int i; +- int ttyf, len; + static int reenter = 0; +- struct utmp ut; +- struct utmp *uptr; +- char greetings[200]; + + if (reenter++) + return; +@@ -2051,9 +2060,18 @@ + * and doing notty(). + */ + if (fork() == 0) { ++ char p[6 + UNAMESZ]; ++ register int i; ++ int ttyf; ++ static int len = 0; ++ struct utmp ut; ++ struct utmp *uptr; ++ static char greetings[200]; ++ + (void) signal(SIGTERM, SIG_DFL); + (void) alarm(0); + (void) signal(SIGALRM, endtty); ++ (void) siginterrupt(SIGALRM,1); /* Make recvfrom() be able to receive EINTR */ + #ifndef SYSV + (void) signal(SIGTTOU, SIG_IGN); + (void) sigsetmask(0); +@@ -2069,7 +2087,7 @@ + /* is this slot used? */ + if (ut.ut_name[0] == '\0') + continue; +- if (ut.ut_type == LOGIN_PROCESS) ++ if (ut.ut_type != USER_PROCESS) + continue; + if (!(strcmp (ut.ut_name,"LOGIN"))) /* paranoia */ + continue; +@@ -2249,7 +2267,7 @@ + for (f = Files; f; f = f->f_next) { + #endif + if (f->f_prevcount && now >= REPEATTIME(f)) { +- dprintf("flush %s: repeated %d times, %d sec.\n", ++ dprintf("flush %s: repeated %d times, %ld sec.\n", + TypeNames[f->f_type], f->f_prevcount, + repeatinterval[f->f_repeatcount]); + fprintlog(f, LocalHostName, 0, (char *)NULL); +@@ -2259,6 +2277,7 @@ + } + (void) signal(SIGALRM, domark); + (void) alarm(TIMERINTVL); ++ (void) siginterrupt(SIGALRM,1); /* Make recvfrom() be able to receive EINTR */ + } + + void debug_switch() diff --git a/sysklogd-1.4.1.tar.bz2 b/sysklogd-1.4.1.tar.bz2 new file mode 100644 index 0000000..d41b5ae --- /dev/null +++ b/sysklogd-1.4.1.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e62600f2c93b9da14ef7c27c7cf1b8a546284295904e2554388bb6af836cfb50 +size 68572 diff --git a/sysklogd-ipv6.diff b/sysklogd-ipv6.diff new file mode 100644 index 0000000..df35d52 --- /dev/null +++ b/sysklogd-ipv6.diff @@ -0,0 +1,520 @@ +--- CHANGES Sun Mar 11 20:35:51 2001 ++++ CHANGES Fri Aug 2 11:28:10 2002 +@@ -1,3 +1,7 @@ ++Version 1.4.1-usagi (2001/03/21) ++ - syslogd IPv6 support ++ (based on patch from Hiroyuki YAMAMORI ) ++ + Version 1.4.1 + + . klogd will set the console log level only if `-c' is given on the +--- Makefile Fri Aug 2 12:11:24 2002 ++++ Makefile Fri Aug 2 11:58:42 2002 +@@ -6,7 +6,7 @@ + CC= gcc + #CFLAGS= -g -DSYSV -Wall + #LDFLAGS= -g +-CFLAGS= $(RPM_OPT_FLAGS) -O3 -DSYSV -fomit-frame-pointer -Wall -fno-strength-reduce ++CFLAGS= $(RPM_OPT_FLAGS) -DINET6 -O3 -DSYSV -fomit-frame-pointer -Wall -fno-strength-reduce + LDFLAGS= -s + + # Look where your install program is. +--- syslogd.c Fri Aug 2 12:11:25 2002 ++++ syslogd.c Fri Aug 2 12:00:16 2002 +@@ -604,6 +604,7 @@ + * This table contains plain text for h_errno errors used by the + * net subsystem. + */ ++#ifndef INET6 /* not */ + const char *sys_h_errlist[] = { + "No problem", /* NETDB_SUCCESS */ + "Authoritative answer: host not found", /* HOST_NOT_FOUND */ +@@ -612,6 +613,7 @@ + "Valid name, no data record of requested type", /* NO_DATA */ + "no address, look for MX record" /* NO_ADDRESS */ + }; ++#endif + + /* + * This structure represents the files that will have log +@@ -630,7 +632,18 @@ + char f_uname[MAXUNAMES][UNAMESZ+1]; + struct { + char f_hname[MAXHOSTNAMELEN+1]; ++#ifdef INET6 ++ union { ++ struct sockaddr sa; ++ struct sockaddr_in sin; ++ struct sockaddr_in6 sin6; ++ } f_sa; ++#define f_addr f_sa.sa ++#define f_addr4 f_sa.sin ++#define f_addr6 f_sa.sin6 ++#else + struct sockaddr_in f_addr; ++#endif + } f_forw; /* forwarding address */ + char f_fname[MAXFNAME]; + } f_un; +@@ -737,7 +750,11 @@ + char *LocalDomain; /* our local domain name */ + int InetInuse = 0; /* non-zero if INET sockets are being used */ + int finet = -1; /* Internet datagram socket */ ++#ifdef INET6 ++sa_family_t family; /* socket address family */ ++#else + int LogPort; /* port number for INET connections */ ++#endif + int Initialized = 0; /* set when we have initialized ourselves */ + int MarkInterval = 20 * 60; /* interval between marks in seconds */ + int MarkSeq = 0; /* mark sequence number */ +@@ -764,10 +781,10 @@ + void endtty(); + void wallmsg(register struct filed *f, struct iovec *iov); + void reapchild(); +-const char *cvthname(struct sockaddr_in *f); ++const char *cvthname(struct sockaddr *f); + void domark(); + void debug_switch(); +-void logerror(char *type); ++void logerror(const char *type); + void die(int sig); + #ifndef TESTING + void doexit(int sig); +@@ -787,6 +804,10 @@ + #endif + #ifdef SYSLOG_INET + static int create_inet_socket(); ++#ifdef INET6 ++static void setup_inetaddr_all(); ++static const char *setup_inetaddr(struct filed *f); ++#endif + #endif + + int main(argc, argv) +@@ -821,7 +842,12 @@ + #ifndef TESTING + int fd; + #ifdef SYSLOG_INET ++#ifdef INET6 ++ struct sockaddr_storage frominet; ++ char hbuf[INET6_ADDRSTRLEN]; ++#else + struct sockaddr_in frominet; ++#endif + char *from; + #endif + pid_t ppid = getpid(); +@@ -1142,11 +1168,21 @@ + memset(line, '\0', sizeof(line)); + i = recvfrom(finet, line, MAXLINE - 2, 0, \ + (struct sockaddr *) &frominet, &len); ++#ifdef INET6 ++ if (getnameinfo((struct sockaddr *)&frominet, len, ++ hbuf, sizeof(hbuf), NULL, 0, ++ NI_NUMERICHOST)) { ++ strcpy(hbuf, "???"); ++ } ++ dprintf("Message from inetd socket: #%d, host: %s\n", ++ inetm, hbuf); ++#else + dprintf("Message from inetd socket: #%d, host: %s\n", + inetm, inet_ntoa(frominet.sin_addr)); ++#endif + if (i > 0) { + line[i] = line[i+1] = '\0'; +- from = (char *)cvthname(&frominet); ++ from = (char *)cvthname((struct sockaddr*)&frominet); + /* + * Here we could check if the host is permitted + * to send us syslog messages. We just have to +@@ -1233,17 +1269,50 @@ + static int create_inet_socket() + { + int fd, on = 1; ++#ifdef INET6 ++ struct addrinfo hints, *res; ++ int error; ++#else + struct sockaddr_in sin; ++#endif + ++#ifdef INET6 ++ fd = socket(AF_INET6, SOCK_DGRAM, 0); ++ if (fd >= 0) { ++ family = AF_INET6; ++ } else { ++ family = AF_INET; ++ dprintf("cannot create INET6 socket.\n"); ++ fd = socket(AF_INET, SOCK_DGRAM, 0); ++ } ++#else + fd = socket(AF_INET, SOCK_DGRAM, 0); ++#endif + if (fd < 0) { + logerror("syslog: Unknown protocol, suspending inet service."); + return fd; + } + ++#ifdef NO_BIND_AT_FORWARD_ONLY ++ if (AcceptRemote == 0) ++ return fd; ++#endif ++#ifdef INET6 ++ memset(&hints, 0, sizeof(hints)); ++ hints.ai_flags = AI_PASSIVE; ++ hints.ai_family = family; ++ hints.ai_socktype = SOCK_DGRAM; ++ error = getaddrinfo(NULL, "syslog", &hints, &res); ++ if (error) { ++ logerror(gai_strerror(error)); ++ close(fd); ++ return -1; ++ } ++#else + memset(&sin, 0, sizeof(sin)); + sin.sin_family = AF_INET; + sin.sin_port = LogPort; ++#endif + if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, \ + (char *) &on, sizeof(on)) < 0 ) { + logerror("setsockopt(REUSEADDR), suspending inet"); +@@ -1259,13 +1328,77 @@ + close(fd); + return -1; + } ++#ifdef INET6 ++ error = bind(fd, res->ai_addr, res->ai_addrlen); ++ freeaddrinfo(res); ++ if (error < 0) { ++#else + if (bind(fd, (struct sockaddr *) &sin, sizeof(sin)) < 0) { ++#endif + logerror("bind, suspending inet"); + close(fd); + return -1; + } + return fd; + } ++ ++#ifdef INET6 ++ ++static void setup_inetaddr_all() ++{ ++ struct filed *f; ++#ifdef SYSV ++ int lognum; ++ ++ for (lognum = 0; lognum <= nlogs; lognum++) { ++ f = &Files[lognum]; ++#else ++ for (f = Files; f; f = f->f_next) { ++#endif ++ if (f->f_type == F_FORW_UNKN) { ++ if (setup_inetaddr(f)) { ++ f->f_prevcount = INET_RETRY_MAX; ++ f->f_time = time( (time_t *)0 ); ++ } else { ++ f->f_type = F_FORW; ++ } ++ } ++ } ++} ++ ++static const char *setup_inetaddr(struct filed *f) ++{ ++ struct addrinfo hints, *res; ++ int error; ++ ++ memset(&hints, 0, sizeof(hints)); ++ hints.ai_family = family == AF_INET6 ? AF_UNSPEC : AF_INET; ++ hints.ai_socktype = SOCK_DGRAM; ++ error = getaddrinfo(f->f_un.f_forw.f_hname, "syslog", &hints, &res); ++ if (error) { ++ return gai_strerror(error); ++ } ++ if (res->ai_addrlen > sizeof(f->f_un.f_forw.f_sa)) { ++ freeaddrinfo(res); ++ return "addrlen too large"; ++ } ++ if (family == AF_INET6 && res->ai_family == AF_INET) { ++ /* v4mapped addr */ ++ f->f_un.f_forw.f_addr.sa_family = AF_INET6; ++ f->f_un.f_forw.f_addr6.sin6_port = ++ ((struct sockaddr_in *)res->ai_addr)->sin_port; ++ f->f_un.f_forw.f_addr6.sin6_addr.s6_addr16[5] = 0xffff; ++ memcpy(&f->f_un.f_forw.f_addr6.sin6_addr.s6_addr32[3], ++ &((struct sockaddr_in *)res->ai_addr)->sin_addr, ++ sizeof(struct in_addr)); ++ } else { ++ memcpy(&f->f_un.f_forw.f_addr, res->ai_addr, res->ai_addrlen); ++ } ++ freeaddrinfo(res); ++ ++ return NULL; ++} ++#endif /* end of INET6 */ + #endif + + char ** +@@ -1687,8 +1820,12 @@ + register int l; + char line[MAXLINE + 1]; + time_t fwd_suspend; ++#ifdef INET6 ++ const char *errmsg; ++#else + struct hostent *hp; + #endif ++#endif + + dprintf("Called fprintlog, "); + +@@ -1742,22 +1879,27 @@ + fwd_suspend); + } + break; +- ++ + /* + * The trick is to wait some time, then retry to get the + * address. If that fails retry x times and then give up. + * + * You'll run into this problem mostly if the name server you + * need for resolving the address is on the same machine, but +- * is started after syslogd. ++ * is started after syslogd. + */ + case F_FORW_UNKN: + dprintf(" %s\n", f->f_un.f_forw.f_hname); + fwd_suspend = time((time_t *) 0) - f->f_time; + if ( fwd_suspend >= INET_SUSPEND_TIME ) { + dprintf("Forwarding suspension to unknown over, retrying\n"); ++#ifdef INET6 ++ if ((errmsg = setup_inetaddr(f))) { ++ dprintf("Failure: %s\n", errmsg); ++#else + if ( (hp = gethostbyname(f->f_un.f_forw.f_hname)) == NULL ) { + dprintf("Failure: %s\n", sys_h_errlist[h_errno]); ++#endif + dprintf("Retries: %d\n", f->f_prevcount); + if ( --f->f_prevcount < 0 ) { + dprintf("Giving up.\n"); +@@ -1768,7 +1910,9 @@ + } + else { + dprintf("%s found, resuming.\n", f->f_un.f_forw.f_hname); ++#ifndef INET6 /* not */ + memcpy((char *) &f->f_un.f_forw.f_addr.sin_addr, hp->h_addr, hp->h_length); ++#endif + f->f_prevcount = 0; + f->f_type = F_FORW; + goto f_forw; +@@ -1791,27 +1935,31 @@ + dprintf("Not sending message to remote.\n"); + else { + f->f_time = now; +-/* afx: add f_prevhost,LocalHostName,MAXHOSTNAMELEN+1)) { +- (void) snprintf(line, sizeof(line), "<%d><%s: %s\n", +- f->f_prevpri, f->f_prevhost, ++ (void) snprintf(line, sizeof(line), "<%d><%s: %s\n", ++ f->f_prevpri, f->f_prevhost, + (char *) iov[4].iov_base); + } else { + (void) snprintf(line, sizeof(line), "<%d>%s\n", +- f->f_prevpri, ++ f->f_prevpri, + (char *) iov[4].iov_base); + } +-/* end afx */ ++/* end afx */ + l = strlen(line); + if (l > MAXLINE) + l = MAXLINE; + if (sendto(finet, line, l, 0, \ + (struct sockaddr *) &f->f_un.f_forw.f_addr, +- sizeof(f->f_un.f_forw.f_addr)) != l) { ++#ifdef INET6 ++ family == AF_INET6 ? ++ sizeof(struct sockaddr_in6) : ++#endif ++ sizeof(struct sockaddr_in)) != l) { + int e = errno; +- dprintf("INET sendto error: %d = %s.\n", ++ dprintf("INET sendto error: %d = %s.\n", + e, strerror(e)); + f->f_type = F_FORW_SUSP; + errno = e; +@@ -2035,28 +2183,53 @@ + /* + * Return a printable representation of a host address. + */ +-const char *cvthname(f) +- struct sockaddr_in *f; ++const char *cvthname(struct sockaddr *f) + { ++#ifdef INET6 ++ static char hname[NI_MAXHOST]; ++ int error; ++#else + struct hostent *hp; ++ char *hname; ++#endif + register char *p; + int count; + +- if (f->sin_family != AF_INET) { ++#ifdef INET6 ++ if (((struct sockaddr *)f)->sa_family == AF_INET6 && ++ IN6_IS_ADDR_V4MAPPED(&((struct sockaddr_in6 *)f)->sin6_addr)) { ++ ((struct sockaddr *)f)->sa_family = AF_INET; ++ ((struct sockaddr_in *)f)->sin_addr.s_addr = ++ ((struct sockaddr_in6 *)f)->sin6_addr.s6_addr32[3]; ++ } ++ error = getnameinfo((struct sockaddr *)f, ++ ((struct sockaddr *)f)->sa_family == AF_INET6 ? ++ sizeof(struct sockaddr_in6) ++ : sizeof(struct sockaddr_in), ++ hname, sizeof(hname), NULL, 0, 0); ++ if (error) { ++ dprintf("Malformed from address %s\n", gai_strerror(error)); ++ return ("???"); ++ } ++#else ++ if (((struct sockaddr_in *)f)->sin_family != AF_INET) { + dprintf("Malformed from address.\n"); + return ("???"); + } +- hp = gethostbyaddr((char *) &f->sin_addr, sizeof(struct in_addr), \ +- f->sin_family); ++ hp = gethostbyaddr((char *) &(((struct sockaddr_in *)&f)->sin_addr), ++ sizeof(struct in_addr), ++ ((struct sockaddr_in *)f)->sin_family); + if (hp == 0) { + dprintf("Host name for your address (%s) unknown.\n", +- inet_ntoa(f->sin_addr)); +- return (inet_ntoa(f->sin_addr)); ++ inet_ntoa(((struct sockaddr_in *)f)->sin_addr)); ++ return (inet_ntoa(((struct sockaddr_in *)f)->sin_addr)); + } ++ hname = hp->h_name; ++#endif + /* + * Convert to lower case, just like LocalDomain above + */ +- for (p = (char *)hp->h_name; *p ; p++) ++ for (p = hname; *p ; p++) + if (isupper(*p)) + *p = tolower(*p); + +@@ -2064,17 +2237,17 @@ + * Notice that the string still contains the fqdn, but your + * hostname and domain are separated by a '\0'. + */ +- if ((p = strchr(hp->h_name, '.'))) { ++ if ((p = strchr(hname, '.'))) { + if (strcmp(p + 1, LocalDomain) == 0) { + *p = '\0'; +- return (hp->h_name); ++ return (hname); + } else { + if (StripDomains) { + count=0; + while (StripDomains[count]) { + if (strcmp(p + 1, StripDomains[count]) == 0) { + *p = '\0'; +- return (hp->h_name); ++ return (hname); + } + count++; + } +@@ -2082,9 +2255,9 @@ + if (LocalHosts) { + count=0; + while (LocalHosts[count]) { +- if (!strcmp(hp->h_name, LocalHosts[count])) { ++ if (!strcmp(hname, LocalHosts[count])) { + *p = '\0'; +- return (hp->h_name); ++ return (hname); + } + count++; + } +@@ -2092,7 +2265,7 @@ + } + } + +- return (hp->h_name); ++ return (hname); + } + + void domark() +@@ -2142,7 +2315,7 @@ + * Print syslogd errors some place. + */ + void logerror(type) +- char *type; ++ const char *type; + { + char buf[100]; + +@@ -2236,6 +2409,7 @@ + #else + char cline[BUFSIZ]; + #endif ++#ifndef INET6 /* not */ + struct servent *sp; + + sp = getservbyname("syslog", "udp"); +@@ -2246,6 +2420,7 @@ + return; + } + LogPort = sp->s_port; ++#endif + + /* + * Close all open log files and free log descriptor array. +@@ -2394,6 +2569,10 @@ + InetInuse = 0; + } + inetm = finet; ++#ifdef INET6 ++ if (finet >= 0) ++ setup_inetaddr_all(); ++#endif + #endif + + Initialized = 1; +@@ -2481,7 +2660,7 @@ + int singlpri = 0; + int ignorepri = 0; + int syncfile; +-#ifdef SYSLOG_INET ++#if defined(SYSLOG_INET) && !defined(INET6) + struct hostent *hp; + #endif + char buf[MAXLINE]; +@@ -2640,6 +2819,9 @@ + #ifdef SYSLOG_INET + (void) strcpy(f->f_un.f_forw.f_hname, ++p); + dprintf("forwarding host: %s\n", p); /*ASP*/ ++#ifdef INET6 ++ f->f_type = F_FORW_UNKN; ++#else + if ( (hp = gethostbyname(p)) == NULL ) { + f->f_type = F_FORW_UNKN; + f->f_prevcount = INET_RETRY_MAX; +@@ -2654,6 +2836,7 @@ + f->f_un.f_forw.f_addr.sin_port = LogPort; + if ( f->f_type == F_FORW ) + memcpy((char *) &f->f_un.f_forw.f_addr.sin_addr, hp->h_addr, hp->h_length); ++#endif + /* + * Otherwise the host might be unknown due to an + * inaccessible nameserver (perhaps on the same + diff --git a/syslog.xml b/syslog.xml new file mode 100644 index 0000000..aef8d24 --- /dev/null +++ b/syslog.xml @@ -0,0 +1,88 @@ + + + + + + + Syslog Serivce + + + + Syslog daemon Service + + + + + /sbin/rcsyslog start + + + /sbin/rcsyslog restart + + + /sbin/rcsyslog stop + + + /sbin/rcsyslog status + + + + syslog-ng + /sbin/syslog-ng + + + + + network + + + + diff --git a/syslogd.changes b/syslogd.changes new file mode 100644 index 0000000..241ac5a --- /dev/null +++ b/syslogd.changes @@ -0,0 +1,698 @@ +------------------------------------------------------------------- +Mon Dec 11 14:04:50 CET 2006 - mskibbe@suse.de + +- add service xml file + +------------------------------------------------------------------- +Wed Nov 15 14:19:14 CET 2006 - werner@suse.de + +- Require rcnetwork due rcsyslog script does it (bug #214297) + +------------------------------------------------------------------- +Wed Sep 13 13:10:09 CEST 2006 - mt@suse.de + +- Feature #300891: Remove SuSEconfig dependency of syslog-ng + * Adopted /etc/init.d/syslog script to append additional + sockets using -a options for syslog-ng as well. + +------------------------------------------------------------------- +Thu Aug 24 12:00:13 CEST 2006 - werner@suse.de + +- Just use to to the same + +------------------------------------------------------------------- +Fri Aug 18 15:12:58 CEST 2006 - aj@suse.de + +- Fix build. + +------------------------------------------------------------------- +Tue Jul 11 16:37:58 CEST 2006 - werner@suse.de + +- Enable run-time switch from syslogd to syslog-ng (bug #166933) + +------------------------------------------------------------------- +Mon May 22 20:52:39 CEST 2006 - schwab@suse.de + +- Don't strip binaries. + +------------------------------------------------------------------- +Wed Feb 15 13:49:55 CET 2006 - mt@suse.de + +- Added log rotation for /var/log/news/news.* files + +------------------------------------------------------------------- +Wed Feb 8 18:24:12 CET 2006 - werner@suse.de + +- Prevent directly the fortified cpp macros of the system syslog + function and revert the skip of _FORTIFY_SOURCE. + +------------------------------------------------------------------- +Wed Feb 8 15:08:35 CET 2006 - werner@suse.de + +- Skip _FORTIFY_SOURCE for klogd/syslogd to be able to use + our own functions without any filter (bug #147363) + +------------------------------------------------------------------- +Wed Jan 25 21:30:59 CET 2006 - mls@suse.de + +- converted neededforbuild to BuildRequires + +------------------------------------------------------------------- +Tue Dec 20 16:55:25 CET 2005 - ro@suse.de + +- remove explicit requires for devs + +------------------------------------------------------------------- +Wed Oct 5 11:09:44 CEST 2005 - werner@suse.de + +- Enable 64 bit file interface + +------------------------------------------------------------------- +Thu Sep 29 03:15:27 CEST 2005 - dmueller@suse.de + +- add norootforbuild + +------------------------------------------------------------------- +Tue Sep 20 14:56:54 CEST 2005 - werner@suse.de + +- Avoid broken function implementation by fortified header + +------------------------------------------------------------------- +Mon Jul 25 17:49:56 CEST 2005 - mt@suse.de + +- Bug #94743: Added note to the logrotate.syslog file about + changing log file permissions in case syslog-ng is used. + +------------------------------------------------------------------- +Fri Jun 17 14:15:40 CEST 2005 - werner@suse.de + +- Use -fpie/-pie + +------------------------------------------------------------------- +Tue May 24 11:36:47 CEST 2005 - werner@suse.de + +- Fix of the priority and facility patch: do not pass SHOWPRI flag + if no no facility and priority values are used (bug #85453). + +------------------------------------------------------------------- +Tue Apr 19 09:05:38 CEST 2005 - aj@suse.de + +- Fix messages. + +------------------------------------------------------------------- +Wed Mar 9 11:43:50 CET 2005 - ro@suse.de + +- added split-provides for klogd + +------------------------------------------------------------------- +Tue Mar 8 18:25:27 CET 2005 - mt@suse.de + +- Bug #71264: added stop_on_removal/restart_on_removal to + the spec file, fixed try-restart action in the init script + +------------------------------------------------------------------- +Mon Mar 7 18:04:40 CET 2005 - mt@suse.de + +- Bug #71085: removed syslog requirement from klogd sub-package + +------------------------------------------------------------------- +Fri Feb 11 18:41:03 CET 2005 - mt@suse.de + +- fixed rpm post-install script to switch SYSLOG_DAEMON to + ourself if it is set to a daemon that is not installed + (happens if we replace a syslog-ng installed before) +- fixed init scripts to not to report failures on stop + +------------------------------------------------------------------- +Fri Feb 11 15:53:41 CET 2005 - ro@suse.de + +- split off klogd package +- provide "syslog" + +------------------------------------------------------------------- +Thu Jan 27 12:56:45 CET 2005 - werner@suse.de + +- Add UTF8 compatibility (bug #49980) +- Make early syslog more smooth for e.g. rcsyslog restart + +------------------------------------------------------------------- +Tue Jan 25 01:56:57 CET 2005 - ro@suse.de + +- change klogd params from "-2" to "-x" by default + +------------------------------------------------------------------- +Thu Jan 20 17:23:55 CET 2005 - coolo@suse.de + +- only skip syslog start when booting into init 5 + +------------------------------------------------------------------- +Mon Jan 10 18:00:20 CET 2005 - coolo@suse.de + +- add an early syslog that is started before network and checks + for hostnames in syslog.conf + +------------------------------------------------------------------- +Thu Dec 16 17:10:39 CET 2004 - werner@suse.de + +- Add preserve percents patch to fix bug #49228 +- Be sure that recvfrom() is awaken by SIGALRM and SIGTERM + +------------------------------------------------------------------- +Tue Nov 16 15:10:08 CET 2004 - werner@suse.de + +- Quieten the build + +------------------------------------------------------------------- +Fri Oct 15 15:39:51 CEST 2004 - werner@suse.de + +- Add two patches from sgi (bug #46783) + * Add logging on UNIX sockets + * Add priority and facility marks in the log messages + +------------------------------------------------------------------- +Thu Aug 19 17:50:32 CEST 2004 - od@suse.de + +- removed creation of unused /dev/:[0-5]; GetDevices of + xorg-x11.rpm uses /dev/tty0 to find the virtual terminal of a + local X-server (#43931) + +------------------------------------------------------------------- +Thu Jul 29 17:28:36 CEST 2004 - od@suse.de + +- klogd now reads log buffer size from kernel. Falls back to + probing as in dmesg (#39761). + +------------------------------------------------------------------- +Tue May 18 14:21:16 CEST 2004 - werner@suse.de + +- Correct last change + +------------------------------------------------------------------- +Mon May 17 13:46:04 CEST 2004 - werner@suse.de + +- No more symbol and EIP translation for 2.6 kernels (#40651) + +------------------------------------------------------------------- +Mon Apr 19 13:59:14 CEST 2004 - werner@suse.de + +- Fix syslogd argument list handling (fix from Solar Designer) + +------------------------------------------------------------------- +Wed Mar 24 18:14:30 CET 2004 - werner@suse.de + +- Be prepared for udev (bug #36671) + +------------------------------------------------------------------- +Thu Jan 29 13:06:38 CET 2004 - werner@suse.de + +- Enable sample-s390.conf also for s390x (aka zSeries?, bug #34153) + +------------------------------------------------------------------- +Mon Sep 29 10:57:24 CEST 2003 - kukuk@suse.de + +- Use SO_BSDCOMPAT only if defined + +------------------------------------------------------------------- +Tue Sep 16 17:13:40 CEST 2003 - werner@suse.de + +- Clean last klogd24.dif + +------------------------------------------------------------------- +Tue Sep 9 18:54:37 CEST 2003 - werner@suse.de + +- Is there a 128bit lseek around? Use some workarounds to get lseek + working above LONG_MAX on x86_64 on /dev/kmem (kernel bug?) + +------------------------------------------------------------------- +Mon Sep 8 21:30:54 CEST 2003 - werner@suse.de + +- Use special seek routine for signless addresses, fixes + crash on i386. + +------------------------------------------------------------------- +Wed Sep 3 12:21:06 CEST 2003 - werner@suse.de + +- Change symbol addresses to __off64_t and sizes to size_t (#28639) + +------------------------------------------------------------------- +Tue Aug 26 15:36:25 CEST 2003 - mt@suse.de + +- bug #28949: added new 'Config' meta data to sysconfig file +- bug #27971: reconnect to log socket if a write fails with + ECONNREFUSED or ENOTCONN, e.g. if the log socket has been + reopened by "rcsyslog reload" while syslog-ng is used. + new patch file: sysklogd-1.4.1-reopen.patch + +------------------------------------------------------------------- +Fri Aug 15 15:26:15 CEST 2003 - kukuk@suse.de + +- Add devs to PreReq and don't create xconsole device itself + +------------------------------------------------------------------- +Thu Aug 7 12:56:48 CEST 2003 - werner@suse.de + +- Change permissions of mail log files (bug #28561) + +------------------------------------------------------------------- +Mon Jul 28 14:55:54 CEST 2003 - werner@suse.de + +- Fix trivial bug #27072: use warning instead of warn + +------------------------------------------------------------------- +Fri Jul 25 09:44:36 CEST 2003 - schwab@suse.de + +- Fix uses of chown in %post script. + +------------------------------------------------------------------- +Fri Jul 18 17:49:30 CEST 2003 - werner@suse.de + +- Add DNS timeout patch from Olaf Kirch + +------------------------------------------------------------------- +Tue May 20 15:43:49 CEST 2003 - werner@suse.de + +- Use large file support, gnore signal SIGXFSZ (bug #26960) + +------------------------------------------------------------------- +Wed May 14 14:35:38 CEST 2003 - kukuk@suse.de + +- Fix klogd to build independend of installed kernel headers. klogd + still does not work with 2.5.xx correct. + +------------------------------------------------------------------- +Wed Apr 16 10:59:07 CEST 2003 - coolo@suse.de + +- fixing s390 build + +------------------------------------------------------------------- +Wed Apr 16 09:36:28 CEST 2003 - coolo@suse.de + +- use BuildRoot + +------------------------------------------------------------------- +Mon Feb 24 18:06:09 CET 2003 - schwab@suse.de + +- Add workaround for use of kernel headers. + +------------------------------------------------------------------- +Fri Jan 31 12:37:46 CET 2003 - werner@suse.de + +- Add some code for supporting syslog-ng +- Split off boot script and sysconfig file from patch + +------------------------------------------------------------------- +Wed Jan 8 13:13:46 CET 2003 - werner@suse.de + +- bug #22695: add missed meta data within sysconfig file +- bug #22551: do not let read any user /var/log/messages + +------------------------------------------------------------------- +Wed Dec 11 15:39:58 CET 2002 - werner@suse.de + +- New log files for sorting priorities of mail messages (# 22394) + +------------------------------------------------------------------- +Tue Nov 5 14:12:02 CET 2002 - ro@suse.de + +- fillup/sysconfig.syslog: set kernel loglevel to 7 on s390/s390x + +------------------------------------------------------------------- +Mon Oct 14 11:22:53 CEST 2002 - ro@suse.de + +- moved logrotate config for syslog's files to this package +- changed create to 640 for /var/log/mail (#20816) + +------------------------------------------------------------------- +Mon Oct 7 15:21:57 CEST 2002 - olh@suse.de + +- honor the increased LOG_BUF_LEN in kernel/printk.c (#19888) + LOG_BUFFER_SIZE=131072 + +------------------------------------------------------------------- +Tue Sep 10 09:18:32 CEST 2002 - olh@suse.de + +- provides syslog for hotplug + +------------------------------------------------------------------- +Wed Aug 28 05:52:53 CEST 2002 - nashif@suse.de + +- fixed PreReq to use macros + +------------------------------------------------------------------- +Fri Aug 23 15:02:41 CEST 2002 - werner@suse.de + +- Enable the `-2' of klogd option for clean and untraced oops. + +------------------------------------------------------------------- +Fri Aug 16 14:16:53 CEST 2002 - werner@suse.de + +- Add PreReq (bug #18004) +- Change order of main and ipv6 patch + +------------------------------------------------------------------- +Fri Aug 2 13:08:40 CEST 2002 - kukuk@suse.de + +- Add patch to enable IPv6 support (based on the USAGI version + plus some fixes for IPv4 only). + +------------------------------------------------------------------- +Wed Jul 17 17:52:03 CEST 2002 - poeml@suse.de + +- run with additional sockets from SYSLOGD_ADDITIONAL_SOCKET_* that + other packages can fill up into /etc/sysconfig/syslog + +------------------------------------------------------------------- +Mon Mar 4 18:12:58 CET 2002 - zoz@suse.de + +- Change Required from $network to network + +------------------------------------------------------------------- +Mon Mar 4 10:51:59 CET 2002 - ro@suse.de + +- postinstall-script: disable perl-hack (-p for fillup_and_insserv) +- no extra insserv call + +------------------------------------------------------------------- +Thu Feb 14 16:29:42 CET 2002 - werner@suse.de + +- Fix the bug fix + +------------------------------------------------------------------- +Thu Feb 14 14:24:53 CET 2002 - werner@suse.de + +- Fix bug #12747: move to fillup_and_insserv and sysconfig scheme + +------------------------------------------------------------------- +Wed Sep 19 23:32:38 CEST 2001 - ro@suse.de + +- fixed typo in rc_script SYSLOGD_PARAM -> SYSLOGD_PARAMS (#10950) + +------------------------------------------------------------------- +Thu Aug 30 14:13:03 CEST 2001 - werner@suse.de + +- Fix bug #9096 +- Make TAB a printable character + +------------------------------------------------------------------- +Fri Jun 15 18:17:19 CEST 2001 - schwab@suse.de + +- Don't define __KERNEL__. + +------------------------------------------------------------------- +Tue May 29 13:41:43 CEST 2001 - werner@suse.de + +- Update to version 1.4.1 +- Porting our patches to this version + +------------------------------------------------------------------- +Fri Apr 27 16:35:07 MEST 2001 - mt@suse.de + +- added syslog-ng hook in init script + +------------------------------------------------------------------- +Tue Apr 17 13:54:31 CEST 2001 - werner@suse.de + +- Avoid zero bytes from kernel messages + +------------------------------------------------------------------- +Thu Jan 11 13:01:54 CET 2001 - werner@suse.de + +- Correct deep or relative symlink rcsyslog + +------------------------------------------------------------------- +Thu Jan 11 12:29:39 CET 2001 - werner@suse.de + +- Move syslogd and klogd to /sbin +- Change Required from $remote_fs to $network + +------------------------------------------------------------------- +Thu Dec 7 15:09:21 CET 2000 - werner@suse.de + +- Change boot.log to localmessages and add local0 upto local7 + +------------------------------------------------------------------- +Mon Dec 4 01:15:13 CET 2000 - ro@suse.de + +- added var/log/boot.log + +------------------------------------------------------------------- +Tue Nov 28 18:08:50 CET 2000 - ro@suse.de + +- fixed startscript + +------------------------------------------------------------------- +Mon Nov 13 10:01:09 CET 2000 - ro@suse.de + +- fixed to compile on 2.4 kernel header + +------------------------------------------------------------------- +Tue Oct 17 23:28:08 GMT 2000 - bk@suse.de + +- add sample-s390.conf for s390. + +------------------------------------------------------------------- +Thu Sep 14 12:42:23 CEST 2000 - werner@suse.de + +- Fix format handling within Syslog() + +------------------------------------------------------------------- +Wed Sep 13 19:11:56 CEST 2000 - werner@suse.de + +- Fix the two printline bugs in syslogd.c + +------------------------------------------------------------------- +Tue Sep 12 20:00:25 CEST 2000 - werner@suse.de + +- Fix missed format + +------------------------------------------------------------------- +Wed May 24 18:59:09 CEST 2000 - schwab@suse.de + +- Fix resource leak. + +------------------------------------------------------------------- +Tue Feb 29 16:25:48 CET 2000 - schwab@suse.de + +- Fix type of last arg to recvfrom +- Add group tag. + +------------------------------------------------------------------- +Sun Feb 27 16:06:31 CET 2000 - kukuk@suse.de + +- Move /usr/man -> /usr/share/man + +------------------------------------------------------------------- +Fri Feb 11 22:47:05 CET 2000 - werner@suse.de + +- The pid file is /var/run/syslogd.pid not /var/run/syslogd.conf + +------------------------------------------------------------------- +Wed Nov 17 17:33:11 MET 1999 - kukuk@suse.de + +- Add fix to syslogd for SIGHUP race condition + +------------------------------------------------------------------- +Thu Nov 4 18:06:17 CET 1999 - werner@suse.de + +- next typo fix in comment in /etc/syslogd.conf + +------------------------------------------------------------------- +Thu Nov 4 14:49:18 CET 1999 - bs@suse.de + +- typo fix in comment in /etc/syslogd.conf + +------------------------------------------------------------------- +Tue Oct 26 15:44:21 MEST 1999 - mge@suse.de + +- (sysklogd-1.3-forw.patch) Andreas Siegert + Added -t flag that triggers tagging of forwarded messages with + the sending hosts name as seen by the forwarder. Useful for + relaying syslog from DMZs through the firwall to an internal + loghost. Format is "<""hostname" + +------------------------------------------------------------------- +Fri Oct 8 19:33:39 CEST 1999 - werner@suse.de + +- New version 1.3.33 + +------------------------------------------------------------------- +Fri Oct 1 00:04:39 CEST 1999 - werner@suse.de + +- Udatet version of nodos patch + +------------------------------------------------------------------- +Fri Sep 24 20:25:12 CEST 1999 - werner@suse.de + +- Disable *.alert message on root tty's + +------------------------------------------------------------------- +Mon Sep 13 17:23:57 CEST 1999 - bs@suse.de + +- ran old prepare_spec on spec file to switch to new prepare_spec. + +------------------------------------------------------------------- +Fri Sep 10 12:38:54 CEST 1999 - ro@suse.de + +- fixed nodos patch + +------------------------------------------------------------------ +Mon Sep 6 23:59:48 CEST 1999 - werner@suse.de + +- Avoid possible crash if no kernel symbols are available. + +------------------------------------------------------------------ +Fri Sep 3 23:47:54 CEST 1999 - werner@suse.de + +- Update to new version 1.3.32 +- Add sparc patch +- Add security patch (DOS) +- Make it work with alpha (time_t and size_t) +- wallmsg() only for user processes marked in utmp +- The last character of al kernel log is ascii null +- Lock fd of the socket to the syslogd + +------------------------------------------------------------------ +Thu Sep 2 20:56:28 CEST 1999 - werner@suse.de + +- Use RPM_OPT_FLAGS +- Use a pipe to redirect console message to xconsole +- Make reading of ring buffer an (undocumented) option (-r + reading, -R reading and clearing, both one shot) + +------------------------------------------------------------------ +Tue Aug 31 22:07:43 CEST 1999 - werner@suse.de + +- Use 16k buffer because newer kernels do have such a big log +- Avoid trouble due longjmp and fork with a few variables + +------------------------------------------------------------------ +Tue Aug 31 18:37:38 CEST 1999 - werner@suse.de + +- Use sysctl argument 3 (Read up to the last 4k of messages in the + ring buffer) instead of 2 (Read from the log) if one shot method + for klogd is used. + +------------------------------------------------------------------- +Sat Aug 21 14:36:16 CEST 1999 - garloff@suse.de + +- syslog.conf: Only write *.crit synchronously + +------------------------------------------------------------------- +Fri Jan 8 12:15:35 MET 1999 - florian@suse.de + +- /var/log/news should be owned by news.news + +------------------------------------------------------------------- +Thu Jan 7 11:54:34 MET 1999 - bs@suse.de + +- fixed comment in syslog.conf + +------------------------------------------------------------------- +Mon Dec 14 23:02:34 MET 1998 - ro@suse.de + +- removed noreplace from syslogd.conf: necessary change for news-logs + +------------------------------------------------------------------- +Fri Dec 11 15:41:32 MET 1998 - ro@suse.de + +- split up news logs + +------------------------------------------------------------------- +Wed Dec 9 15:40:56 MET 1998 - ro@suse.de + +- changed syslog.conf to back to suse-defaults + +------------------------------------------------------------------- +Tue Dec 8 18:06:02 MET 1998 - ro@suse.de + +- updated init script and added link rcsyslog + +------------------------------------------------------------------- +Mon Dec 7 10:29:41 MET 1998 - ro@suse.de + +- update to 1.3-30 +- syslog.conf marked as config(noreplace) + +------------------------------------------------------------------- +Fri Dec 4 19:38:07 MET 1998 - ro@suse.de + +- bootscript: silently restart if already running on "start" + +------------------------------------------------------------------- +Wed Dec 2 21:36:47 MET 1998 - werner@suse.de + +- New boot script syslog + +------------------------------------------------------------------- +Mon Jun 22 16:07:39 MEST 1998 - ro@suse.de + +- used patches from trevor@jpj.net to build for glibc: + - renamed syslogd's dprintf to syslog_dprintf + - don't declare sys_errlist + - use sys/time.h instead of linux/time.h + +------------------------------------------------------------------- +Tue Mar 10 15:54:17 MET 1998 - ro@suse.de + +- react if KERNEL_LOGLEVEL="" +- added SYSLOGD_PARAMS + +------------------------------------------------------------------- +Tue Mar 10 13:17:56 MET 1998 - ro@suse.de + +- added KERNEL_LOGLEVEL to fillup for rc.config and rcfile + +------------------------------------------------------------------- +Fri Feb 27 14:45:49 MET 1998 - florian@suse.de + +- removed duplicate entry for news messages in syslog.conf + +------------------------------------------------------------------- +Wed Oct 22 16:54:10 MEST 1997 - ro@suse.de + +- removed doinst.sh from specfile-filelist + + +---------------------------------------------------------------------------- +Sun Jun 1 17:06:19 CEST 1997 - bs@suse.de + +- don't include log files under var/log but touch them in doinst.sh + +---------------------------------------------------------------------------- +Thu May 29 14:13:25 CEST 1997 - bs@suse.de + +- cleared var/log/warn + + +---------------------------------------------------------------------------- +Wed Apr 30 15:57:14 CEST 1997 - florian@suse.de + + +- add lots of fixes from debian and other places + +- new /etc/syslog.conf: mail/news messages are in separate files + + +---------------------------------------------------------------------------- +Wed Apr 30 11:51:45 CEST 1997 - bs@suse.de + +added & when starting syslogd. + + +---------------------------------------------------------------------------- +Sat Nov 16 13:50:50 CET 1996 - bs@suse.de + + +runlevel value changed to S09 and K35 + +---------------------------------------------------------------------------- +Thu Oct 17 16:05:09 CEST 1996 - florian@suse.de + + +- klogd liest jetzt wieder die System.map ein. + +- Neue Option "-x", mit der man das Lesen der System.map + abschalten kann. + +- Start- und Stop-Scripte sind jetzt im Paket und nicht mehr in + aaa_base.tgz. diff --git a/syslogd.spec b/syslogd.spec new file mode 100644 index 0000000..6d3cac8 --- /dev/null +++ b/syslogd.spec @@ -0,0 +1,526 @@ +# +# spec file for package syslogd (Version 1.4.1) +# +# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany. +# This file and all modifications and additions to the pristine +# package are under the same license as the package itself. +# +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + +Name: syslogd +License: GNU General Public License (GPL) +Group: System/Daemons +PreReq: klogd +Provides: syslog +Autoreqprov: on +Version: 1.4.1 +Release: 585 +Summary: The Syslog daemon +Source: sysklogd-1.4.1.tar.bz2 +Source1: logrotate.syslog +Source2: sysconfig.syslog +Source3: rc.syslog +Source4: rc.earlysyslog +Source5: syslog.xml +Patch0: sysklogd-1.4.1.dif +Patch1: sysklogd-1.4.1-dgram.patch +Patch2: sysklogd-1.4.1-sparc.patch +Patch3: sysklogd-1.4.1-forw.patch +Patch4: sysklogd-1.4.1-fileleak.patch +Patch5: sysklogd-ipv6.diff +Patch6: sysklogd-1.4.1-klogd24.dif +Patch7: sysklogd-1.4.1-large.patch +Patch8: sysklogd-1.4.1-dns.patch +Patch9: sysklogd-1.4.1-reopen.patch +Patch10: sysklogd-1.4.1-no_SO_BSDCOMPAT.diff +Patch11: sysklogd-1.4.1-owl-crunch_list.diff +Patch12: sysklogd-1.4.1-ksyslogsize.diff +Patch13: sysklogd-1.4.1-unix_sockets.patch +Patch14: sysklogd-1.4.1-showpri.patch +Patch15: sysklogd-1.4.1-preserve_percents.patch +Patch16: sysklogd-1.4.1-utf8.patch +Patch17: sysklogd-1.4.1-ksym.patch +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +The syslogd daemon is the general system logging daemon, which is +responsible for handling requests for syslog services. + +This version of syslogd is similar to the standard Berkeley product, +but with a number of compatible extensions. + + + +Authors: +-------- + Dr. Greg Wettstein + Stephen Tweedie + Juha Virtanen + Shane Alderton + +%package -n klogd +PreReq: %insserv_prereq %fillup_prereq +Provides: sysklogd +Provides: syslogd:/sbin/klogd +Requires: /etc/init.d/network +Summary: The kernel log daemon +Group: System/Daemons + +%description -n klogd +The klogd daemon 'listens' to kernel log messages, prioritizes them, +and routes them to either output files or to syslog daemon. + +This version of klogd will optionally translate kernel addresses to +their symbolic equivalents if provided with a system map. + + + +Authors: +-------- + Dr. Greg Wettstein + Stephen Tweedie + Juha Virtanen + Shane Alderton + +%prep +%setup -n sysklogd-1.4.1 +%patch1 -p0 -b .dgram +%patch2 -p0 -b .sparc +%patch3 -p0 -b .forw +%patch4 -p0 -b .fileleak +%patch5 -p0 -b .ipv6 +%patch6 -p0 -b .klogd24 +%patch7 -p0 -b .large +%patch8 -p1 -b .dns +%patch9 -p0 -b .reopen +%patch10 -p0 -b .sobsd +%patch11 -p1 -b .owlcr +%patch12 -p1 -b .klsize +%patch13 -p0 -b .usock +%patch14 -p0 -b .shprio +%patch15 -p1 -b .presperc +%patch16 -p1 -b .utf8 +%patch17 -p0 -b .ksym +%patch0 -p0 +%ifarch s390 s390x +mv sample-s390.conf sample.conf +%endif + +%build + # honor the increased LOG_BUF_LEN in kernel/printk.c + make LOG_BUFFER_SIZE=-DLOG_BUFFER_SIZE=131072 + +%install + mkdir -p $RPM_BUILD_ROOT/{sbin,etc} + mkdir -p $RPM_BUILD_ROOT/etc/init.d + mkdir -p $RPM_BUILD_ROOT/etc/logrotate.d + mkdir -p $RPM_BUILD_ROOT/%{_mandir}/man{5,8} + mkdir -p $RPM_BUILD_ROOT/var/adm/fillup-templates + make install MANDIR=%{_mandir} DESTDIR=$RPM_BUILD_ROOT + ln -sf ../etc/init.d/syslog $RPM_BUILD_ROOT/sbin/rcsyslog + install -m 644 %{SOURCE1} $RPM_BUILD_ROOT/etc/logrotate.d/syslog + install -m 644 %{SOURCE2} $RPM_BUILD_ROOT/var/adm/fillup-templates + install -m 754 %{SOURCE3} $RPM_BUILD_ROOT/etc/init.d/syslog + install -m 754 %{SOURCE4} $RPM_BUILD_ROOT/etc/init.d/earlysyslog + install -d $RPM_BUILD_ROOT/etc/omc/srvinfo.d/ + install -m 600 %{SOURCE5} $RPM_BUILD_ROOT/etc/omc/srvinfo.d/ +%ifarch s390 s390x + sed 's/^KERNEL_LOGLEVEL=1/KERNEL_LOGLEVEL=7/' %{SOURCE2} \ + > $RPM_BUILD_ROOT/var/adm/fillup-templates/sysconfig.syslog +%endif + +%post +# +# add syslog variables provided by klogd if needed +# +%{fillup_and_insserv -npy syslog syslog} +%{fillup_and_insserv -npY syslog earlysyslog} +# +# check if daemon configured in SYSLOG_DAEMON is +# installed and switch to ourself if it's missed +# +source etc/sysconfig/syslog +replace_syslog=no +if test "$SYSLOG_DAEMON" != "syslogd" ; then + if test -z "$SYSLOG_DAEMON" || \ + test ! -x sbin/${SYSLOG_DAEMON} ; then + replace_syslog=yes + fi +fi +if test "$replace_syslog" == "yes" ; then + sed -i -e 's/^SYSLOG_DAEMON=.*/SYSLOG_DAEMON="syslogd"/g' \ + etc/sysconfig/syslog +fi +# +# create dirs, touch log default files +# +mkdir -p var/log +touch var/log/messages; chmod 640 var/log/messages +touch var/log/boot.log; chmod 640 var/log/boot.log +touch var/log/mail; chmod 640 var/log/mail +touch var/log/mail.info; chmod 640 var/log/mail.info +touch var/log/mail.warn; chmod 640 var/log/mail.warn +touch var/log/mail.err; chmod 640 var/log/mail.err +test -f var/log/news && mv var/log/news var/log/news.bak +mkdir -p -m 0750 var/log/news +chown news:news var/log/news +touch var/log/news/news.crit; chmod 640 var/log/news/news.crit +chown news:news var/log/news/news.crit +touch var/log/news/news.err; chmod 640 var/log/news/news.err +chown news:news var/log/news/news.err +touch var/log/news/news.notice; chmod 640 var/log/news/news.notice +chown news:news var/log/news/news.notice + +%preun +%stop_on_removal syslog + +%postun +%restart_on_update syslog +%{insserv_cleanup} + +%preun -n klogd +%stop_on_removal syslog + +%postun -n klogd +%restart_on_update syslog +%{insserv_cleanup} + +%files +%defattr(-,root,root) +%config %verify(not mode) /etc/syslog.conf +%doc %{_mandir}/man5/syslog.conf.5.gz +%doc %{_mandir}/man8/syslogd.8.gz +/sbin/syslogd +%dir /etc/omc/ +%dir /etc/omc/srvinfo.d/ +/etc/omc/srvinfo.d/syslog.xml + +%files -n klogd +%defattr(-,root,root) +/var/adm/fillup-templates/sysconfig.syslog +%config(noreplace) /etc/logrotate.d/syslog +%config /etc/init.d/syslog +%config /etc/init.d/earlysyslog +%doc %{_mandir}/man8/klogd.8.gz +%doc %{_mandir}/man8/sysklogd.8.gz +/sbin/rcsyslog +/sbin/klogd + +%changelog -n syslogd +* Mon Dec 11 2006 - mskibbe@suse.de +- add service xml file +* Wed Nov 15 2006 - werner@suse.de +- Require rcnetwork due rcsyslog script does it (bug #214297) +* Wed Sep 13 2006 - mt@suse.de +- Feature #300891: Remove SuSEconfig dependency of syslog-ng + * Adopted /etc/init.d/syslog script to append additional + sockets using -a options for syslog-ng as well. +* Thu Aug 24 2006 - werner@suse.de +- Just use to to the same +* Fri Aug 18 2006 - aj@suse.de +- Fix build. +* Tue Jul 11 2006 - werner@suse.de +- Enable run-time switch from syslogd to syslog-ng (bug #166933) +* Mon May 22 2006 - schwab@suse.de +- Don't strip binaries. +* Wed Feb 15 2006 - mt@suse.de +- Added log rotation for /var/log/news/news.* files +* Wed Feb 08 2006 - werner@suse.de +- Prevent directly the fortified cpp macros of the system syslog + function and revert the skip of _FORTIFY_SOURCE. +* Wed Feb 08 2006 - werner@suse.de +- Skip _FORTIFY_SOURCE for klogd/syslogd to be able to use + our own functions without any filter (bug #147363) +* Wed Jan 25 2006 - mls@suse.de +- converted neededforbuild to BuildRequires +* Tue Dec 20 2005 - ro@suse.de +- remove explicit requires for devs +* Wed Oct 05 2005 - werner@suse.de +- Enable 64 bit file interface +* Thu Sep 29 2005 - dmueller@suse.de +- add norootforbuild +* Tue Sep 20 2005 - werner@suse.de +- Avoid broken function implementation by fortified header +* Mon Jul 25 2005 - mt@suse.de +- Bug #94743: Added note to the logrotate.syslog file about + changing log file permissions in case syslog-ng is used. +* Fri Jun 17 2005 - werner@suse.de +- Use -fpie/-pie +* Tue May 24 2005 - werner@suse.de +- Fix of the priority and facility patch: do not pass SHOWPRI flag + if no no facility and priority values are used (bug #85453). +* Tue Apr 19 2005 - aj@suse.de +- Fix messages. +* Wed Mar 09 2005 - ro@suse.de +- added split-provides for klogd +* Tue Mar 08 2005 - mt@suse.de +- Bug #71264: added stop_on_removal/restart_on_removal to + the spec file, fixed try-restart action in the init script +* Mon Mar 07 2005 - mt@suse.de +- Bug #71085: removed syslog requirement from klogd sub-package +* Fri Feb 11 2005 - mt@suse.de +- fixed rpm post-install script to switch SYSLOG_DAEMON to + ourself if it is set to a daemon that is not installed + (happens if we replace a syslog-ng installed before) +- fixed init scripts to not to report failures on stop +* Fri Feb 11 2005 - ro@suse.de +- split off klogd package +- provide "syslog" +* Thu Jan 27 2005 - werner@suse.de +- Add UTF8 compatibility (bug #49980) +- Make early syslog more smooth for e.g. rcsyslog restart +* Tue Jan 25 2005 - ro@suse.de +- change klogd params from "-2" to "-x" by default +* Thu Jan 20 2005 - coolo@suse.de +- only skip syslog start when booting into init 5 +* Mon Jan 10 2005 - coolo@suse.de +- add an early syslog that is started before network and checks + for hostnames in syslog.conf +* Thu Dec 16 2004 - werner@suse.de +- Add preserve percents patch to fix bug #49228 +- Be sure that recvfrom() is awaken by SIGALRM and SIGTERM +* Tue Nov 16 2004 - werner@suse.de +- Quieten the build +* Fri Oct 15 2004 - werner@suse.de +- Add two patches from sgi (bug #46783) + * Add logging on UNIX sockets + * Add priority and facility marks in the log messages +* Thu Aug 19 2004 - od@suse.de +- removed creation of unused /dev/:[0-5]; GetDevices of + xorg-x11.rpm uses /dev/tty0 to find the virtual terminal of a + local X-server (#43931) +* Thu Jul 29 2004 - od@suse.de +- klogd now reads log buffer size from kernel. Falls back to + probing as in dmesg (#39761). +* Tue May 18 2004 - werner@suse.de +- Correct last change +* Mon May 17 2004 - werner@suse.de +- No more symbol and EIP translation for 2.6 kernels (#40651) +* Mon Apr 19 2004 - werner@suse.de +- Fix syslogd argument list handling (fix from Solar Designer) +* Wed Mar 24 2004 - werner@suse.de +- Be prepared for udev (bug #36671) +* Thu Jan 29 2004 - werner@suse.de +- Enable sample-s390.conf also for s390x (aka zSeries?, bug #34153) +* Mon Sep 29 2003 - kukuk@suse.de +- Use SO_BSDCOMPAT only if defined +* Tue Sep 16 2003 - werner@suse.de +- Clean last klogd24.dif +* Tue Sep 09 2003 - werner@suse.de +- Is there a 128bit lseek around? Use some workarounds to get lseek + working above LONG_MAX on x86_64 on /dev/kmem (kernel bug?) +* Mon Sep 08 2003 - werner@suse.de +- Use special seek routine for signless addresses, fixes + crash on i386. +* Wed Sep 03 2003 - werner@suse.de +- Change symbol addresses to __off64_t and sizes to size_t (#28639) +* Tue Aug 26 2003 - mt@suse.de +- bug #28949: added new 'Config' meta data to sysconfig file +- bug #27971: reconnect to log socket if a write fails with + ECONNREFUSED or ENOTCONN, e.g. if the log socket has been + reopened by "rcsyslog reload" while syslog-ng is used. + new patch file: sysklogd-1.4.1-reopen.patch +* Fri Aug 15 2003 - kukuk@suse.de +- Add devs to PreReq and don't create xconsole device itself +* Thu Aug 07 2003 - werner@suse.de +- Change permissions of mail log files (bug #28561) +* Mon Jul 28 2003 - werner@suse.de +- Fix trivial bug #27072: use warning instead of warn +* Fri Jul 25 2003 - schwab@suse.de +- Fix uses of chown in %%post script. +* Fri Jul 18 2003 - werner@suse.de +- Add DNS timeout patch from Olaf Kirch +* Tue May 20 2003 - werner@suse.de +- Use large file support, gnore signal SIGXFSZ (bug #26960) +* Wed May 14 2003 - kukuk@suse.de +- Fix klogd to build independend of installed kernel headers. klogd + still does not work with 2.5.xx correct. +* Wed Apr 16 2003 - coolo@suse.de +- fixing s390 build +* Wed Apr 16 2003 - coolo@suse.de +- use BuildRoot +* Mon Feb 24 2003 - schwab@suse.de +- Add workaround for use of kernel headers. +* Fri Jan 31 2003 - werner@suse.de +- Add some code for supporting syslog-ng +- Split off boot script and sysconfig file from patch +* Wed Jan 08 2003 - werner@suse.de +- bug #22695: add missed meta data within sysconfig file +- bug #22551: do not let read any user /var/log/messages +* Wed Dec 11 2002 - werner@suse.de +- New log files for sorting priorities of mail messages (# 22394) +* Tue Nov 05 2002 - ro@suse.de +- fillup/sysconfig.syslog: set kernel loglevel to 7 on s390/s390x +* Mon Oct 14 2002 - ro@suse.de +- moved logrotate config for syslog's files to this package +- changed create to 640 for /var/log/mail (#20816) +* Mon Oct 07 2002 - olh@suse.de +- honor the increased LOG_BUF_LEN in kernel/printk.c (#19888) + LOG_BUFFER_SIZE=131072 +* Tue Sep 10 2002 - olh@suse.de +- provides syslog for hotplug +* Wed Aug 28 2002 - nashif@suse.de +- fixed PreReq to use macros +* Fri Aug 23 2002 - werner@suse.de +- Enable the `-2' of klogd option for clean and untraced oops. +* Fri Aug 16 2002 - werner@suse.de +- Add PreReq (bug #18004) +- Change order of main and ipv6 patch +* Fri Aug 02 2002 - kukuk@suse.de +- Add patch to enable IPv6 support (based on the USAGI version + plus some fixes for IPv4 only). +* Wed Jul 17 2002 - poeml@suse.de +- run with additional sockets from SYSLOGD_ADDITIONAL_SOCKET_* that + other packages can fill up into /etc/sysconfig/syslog +* Mon Mar 04 2002 - zoz@suse.de +- Change Required from $network to network +* Mon Mar 04 2002 - ro@suse.de +- postinstall-script: disable perl-hack (-p for fillup_and_insserv) +- no extra insserv call +* Thu Feb 14 2002 - werner@suse.de +- Fix the bug fix +* Thu Feb 14 2002 - werner@suse.de +- Fix bug #12747: move to fillup_and_insserv and sysconfig scheme +* Wed Sep 19 2001 - ro@suse.de +- fixed typo in rc_script SYSLOGD_PARAM -> SYSLOGD_PARAMS (#10950) +* Thu Aug 30 2001 - werner@suse.de +- Fix bug #9096 +- Make TAB a printable character +* Fri Jun 15 2001 - schwab@suse.de +- Don't define __KERNEL__. +* Tue May 29 2001 - werner@suse.de +- Update to version 1.4.1 +- Porting our patches to this version +* Fri Apr 27 2001 - mt@suse.de +- added syslog-ng hook in init script +* Tue Apr 17 2001 - werner@suse.de +- Avoid zero bytes from kernel messages +* Thu Jan 11 2001 - werner@suse.de +- Correct deep or relative symlink rcsyslog +* Thu Jan 11 2001 - werner@suse.de +- Move syslogd and klogd to /sbin +- Change Required from $remote_fs to $network +* Thu Dec 07 2000 - werner@suse.de +- Change boot.log to localmessages and add local0 upto local7 +* Mon Dec 04 2000 - ro@suse.de +- added var/log/boot.log +* Tue Nov 28 2000 - ro@suse.de +- fixed startscript +* Mon Nov 13 2000 - ro@suse.de +- fixed to compile on 2.4 kernel header +* Tue Oct 17 2000 - bk@suse.de +- add sample-s390.conf for s390. +* Thu Sep 14 2000 - werner@suse.de +- Fix format handling within Syslog() +* Wed Sep 13 2000 - werner@suse.de +- Fix the two printline bugs in syslogd.c +* Tue Sep 12 2000 - werner@suse.de +- Fix missed format +* Wed May 24 2000 - schwab@suse.de +- Fix resource leak. +* Tue Feb 29 2000 - schwab@suse.de +- Fix type of last arg to recvfrom +- Add group tag. +* Sun Feb 27 2000 - kukuk@suse.de +- Move /usr/man -> /usr/share/man +* Fri Feb 11 2000 - werner@suse.de +- The pid file is /var/run/syslogd.pid not /var/run/syslogd.conf +* Wed Nov 17 1999 - kukuk@suse.de +- Add fix to syslogd for SIGHUP race condition +* Thu Nov 04 1999 - werner@suse.de +- next typo fix in comment in /etc/syslogd.conf +* Thu Nov 04 1999 - bs@suse.de +- typo fix in comment in /etc/syslogd.conf +* Tue Oct 26 1999 - mge@suse.de +- (sysklogd-1.3-forw.patch) Andreas Siegert + Added -t flag that triggers tagging of forwarded messages with + the sending hosts name as seen by the forwarder. Useful for + relaying syslog from DMZs through the firwall to an internal + loghost. Format is "<""hostname" +* Fri Oct 08 1999 - werner@suse.de +- New version 1.3.33 +* Fri Oct 01 1999 - werner@suse.de +- Udatet version of nodos patch +* Fri Sep 24 1999 - werner@suse.de +- Disable *.alert message on root tty's +* Mon Sep 13 1999 - bs@suse.de +- ran old prepare_spec on spec file to switch to new prepare_spec. +* Fri Sep 10 1999 - ro@suse.de +- fixed nodos patch +* Mon Sep 06 1999 - werner@suse.de +- Avoid possible crash if no kernel symbols are available. +* Fri Sep 03 1999 - werner@suse.de +- Update to new version 1.3.32 +- Add sparc patch +- Add security patch (DOS) +- Make it work with alpha (time_t and size_t) +- wallmsg() only for user processes marked in utmp +- The last character of al kernel log is ascii null +- Lock fd of the socket to the syslogd +* Thu Sep 02 1999 - werner@suse.de +- Use RPM_OPT_FLAGS +- Use a pipe to redirect console message to xconsole +- Make reading of ring buffer an (undocumented) option (-r + reading, -R reading and clearing, both one shot) +* Tue Aug 31 1999 - werner@suse.de +- Use 16k buffer because newer kernels do have such a big log +- Avoid trouble due longjmp and fork with a few variables +* Tue Aug 31 1999 - werner@suse.de +- Use sysctl argument 3 (Read up to the last 4k of messages in the + ring buffer) instead of 2 (Read from the log) if one shot method + for klogd is used. +* Sat Aug 21 1999 - garloff@suse.de +- syslog.conf: Only write *.crit synchronously +* Fri Jan 08 1999 - florian@suse.de +- /var/log/news should be owned by news.news +* Thu Jan 07 1999 - bs@suse.de +- fixed comment in syslog.conf +* Mon Dec 14 1998 - ro@suse.de +- removed noreplace from syslogd.conf: necessary change for news-logs +* Fri Dec 11 1998 - ro@suse.de +- split up news logs +* Wed Dec 09 1998 - ro@suse.de +- changed syslog.conf to back to suse-defaults +* Tue Dec 08 1998 - ro@suse.de +- updated init script and added link rcsyslog +* Mon Dec 07 1998 - ro@suse.de +- update to 1.3-30 +- syslog.conf marked as config(noreplace) +* Fri Dec 04 1998 - ro@suse.de +- bootscript: silently restart if already running on "start" +* Wed Dec 02 1998 - werner@suse.de +- New boot script syslog +* Mon Jun 22 1998 - ro@suse.de +- used patches from trevor@jpj.net to build for glibc: + - renamed syslogd's dprintf to syslog_dprintf + - don't declare sys_errlist + - use sys/time.h instead of linux/time.h +* Tue Mar 10 1998 - ro@suse.de +- react if KERNEL_LOGLEVEL="" +- added SYSLOGD_PARAMS +* Tue Mar 10 1998 - ro@suse.de +- added KERNEL_LOGLEVEL to fillup for rc.config and rcfile +* Fri Feb 27 1998 - florian@suse.de +- removed duplicate entry for news messages in syslog.conf +* Wed Oct 22 1997 - ro@suse.de +- removed doinst.sh from specfile-filelist +* Sun Jun 01 1997 - bs@suse.de +- don't include log files under var/log but touch them in doinst.sh +* Thu May 29 1997 - bs@suse.de +- cleared var/log/warn +* Wed Apr 30 1997 - florian@suse.de +- add lots of fixes from debian and other places +- new /etc/syslog.conf: mail/news messages are in separate files +* Wed Apr 30 1997 - bs@suse.de + added & when starting syslogd. +* Thu Jan 02 1997 - bs@suse.de + runlevel value changed to S09 and K35 +* Thu Jan 02 1997 - florian@suse.de +- klogd liest jetzt wieder die System.map ein. +- Neue Option "-x", mit der man das Lesen der System.map + abschalten kann. +- Start- und Stop-Scripte sind jetzt im Paket und nicht mehr in + aaa_base.tgz.