From 023e2003dfc86b081bf023923e3e112cde91c1f6 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 6 Nov 2006 22:16:10 +0000 Subject: [PATCH] * Install into $out/sbin, not $out/usr/sbin. svn path=/nixpkgs/trunk/; revision=6962 --- pkgs/os-specific/linux/sysklogd/builder.sh | 8 +- .../sysklogd/sysklogd-1.4.1-cvs-20050525.diff | 900 ------------------ 2 files changed, 5 insertions(+), 903 deletions(-) delete mode 100644 pkgs/os-specific/linux/sysklogd/sysklogd-1.4.1-cvs-20050525.diff diff --git a/pkgs/os-specific/linux/sysklogd/builder.sh b/pkgs/os-specific/linux/sysklogd/builder.sh index d7635547b686..9f2b8d9282c8 100644 --- a/pkgs/os-specific/linux/sysklogd/builder.sh +++ b/pkgs/os-specific/linux/sysklogd/builder.sh @@ -3,8 +3,10 @@ source $stdenv/setup prefix=$out export prefix -ensureDir "$out/usr/share/man/man8/" -ensureDir "$out/usr/share/man/man5/" -ensureDir "$out/usr/sbin" +installFlags="BINDIR=$out/sbin MANDIR=$out/share/man" + +ensureDir "$out/share/man/man8/" +ensureDir "$out/share/man/man5/" +ensureDir "$out/sbin" genericBuild diff --git a/pkgs/os-specific/linux/sysklogd/sysklogd-1.4.1-cvs-20050525.diff b/pkgs/os-specific/linux/sysklogd/sysklogd-1.4.1-cvs-20050525.diff deleted file mode 100644 index d09f41e49b47..000000000000 --- a/pkgs/os-specific/linux/sysklogd/sysklogd-1.4.1-cvs-20050525.diff +++ /dev/null @@ -1,900 +0,0 @@ -diff -ruN sysklogd-1.4.1/CHANGES sysklogd-1.4.1.new/CHANGES ---- sysklogd-1.4.1/CHANGES 2001-03-11 20:35:51.000000000 +0100 -+++ sysklogd-1.4.1.new/CHANGES 2005-09-06 16:49:12.000000000 +0200 -@@ -1,3 +1,42 @@ -+Version 1.4.2 -+ -+ . Dmitry V. Levin -+ - Close file descriptor in FindSymbolFile() in ksym.c in order not to -+ leak file descriptors. -+ . Solar Designer -+ - improve crunch_list() -+ - Prevent potential buffer overflow in reading messages from the -+ kernel log ringbuffer. -+ - Ensure that "len" is not placed in a register, and that the -+ endtty() signal handler is not installed too early which could -+ cause a segmentation fault or worse. -+ . Steve Grubb -+ - fix memory calculation in crunch_list() -+ . Martin Schulze -+ - klogd will reconnect to the logger (mostly syslogd) after it went -+ away -+ - On heavily loaded system syslog will not spit out error messages -+ anymore when recvfrom() results in EAGAIN -+ - Makefile improvements -+ - Local copy of module.h -+ - Improved sysklogd.8 -+ - Always log with syslogd's timezone and locale -+ - Remove trailing newline when forwarding messages -+ . Jon Burgess -+ - Moved the installation of the signal handler up a little bit so it -+ guaranteed to be available when the child is forked, hence, fixing a -+ race condition. This used to create problems with UML and fast -+ machines. -+ . Greg Trounson -+ - Improved README.linux -+ . Ulf Härnhammar -+ - Bondary check for fscanf() in InitKsyms() and CheckMapVersion() -+ . Colin Phipps -+ - Don't block on the network socket in case of package los -+ . Dirk Mueller -+ - Don't crash when filesize limit is reached (e.g. without LFS) -+ -+ - Version 1.4.1 - - . klogd will set the console log level only if `-c' is given on the -@@ -30,3 +69,9 @@ - . Olaf Kirch - - Remove Unix Domain Sockets and switch to Datagram Unix Sockets - . Several bugfixes and improvements, please refer to the .c files -+ -+ -+Local variables: -+mode: indented-text -+fill-column: 72 -+End: -diff -ruN sysklogd-1.4.1/klogd.8 sysklogd-1.4.1.new/klogd.8 ---- sysklogd-1.4.1/klogd.8 2001-03-11 20:35:51.000000000 +0100 -+++ sysklogd-1.4.1.new/klogd.8 2005-09-06 16:49:12.000000000 +0200 -@@ -3,8 +3,9 @@ - .\" Sun Jul 30 01:35:55 MET: Martin Schulze: Updates - .\" Sun Nov 19 23:22:21 MET: Martin Schulze: Updates - .\" Mon Aug 19 09:42:08 CDT 1996: Dr. G.W. Wettstein: Updates -+.\" Fri Mar 11 17:11:46 CET 2005: Martin Schulze: sysctl updates - .\" --.TH KLOGD 8 "21 August, 1999" "Version 1.4" "Linux System Administration" -+.TH KLOGD 8 "11 March 2005" "Version 1.4" "Linux System Administration" - .SH NAME - klogd \- Kernel Log Daemon - .LP -@@ -38,6 +39,12 @@ - .TP - .BI "\-c " n - Sets the default log level of console messages to \fIn\fR. -+This should nowardays be configured with the -+.BR sysctl (8) -+program, e.g. via -+.BI "sysctl kernel.printk=" n -+or via -+.IR /etc/sysctl.conf . - .TP - .B "\-d" - Enable debugging mode. This will generate \fBLOTS\fR of output to -@@ -321,7 +328,7 @@ - .B klogd - to reload the module symbol information whenever a protection fault - is detected. Caution should be used before invoking the program in --\'paranoid\' mode. The stability of the kernel and the operating -+\&'paranoid\&' mode. The stability of the kernel and the operating - environment is always under question when a protection fault occurs. - Since the klogd daemon must execute system calls in order to read the - module symbol information there is the possibility that the system may -diff -ruN sysklogd-1.4.1/klogd.c sysklogd-1.4.1.new/klogd.c ---- sysklogd-1.4.1/klogd.c 2001-03-11 20:40:10.000000000 +0100 -+++ sysklogd-1.4.1.new/klogd.c 2005-09-06 16:49:12.000000000 +0200 -@@ -243,6 +243,9 @@ - * people have submitted patches: Troels Walsted Hansen - * , Wolfgang Oertl - * and Thomas Roessler. -+ * Thu Apr 29 15:24:07 2004: Solar Designer -+ * Prevent potential buffer overflow in reading messages from the -+ * kernel log rinbuffer. - */ - - -@@ -938,7 +941,7 @@ - * messages into this fresh buffer. - */ - memset(log_buffer, '\0', sizeof(log_buffer)); -- if ( (rdcnt = ksyslog(2, log_buffer, sizeof(log_buffer))) < 0 ) -+ if ( (rdcnt = ksyslog(2, log_buffer, sizeof(log_buffer)-1)) < 0 ) - { - if ( errno == EINTR ) - return; -diff -ruN sysklogd-1.4.1/ksym.c sysklogd-1.4.1.new/ksym.c ---- sysklogd-1.4.1/ksym.c 2000-09-12 23:53:31.000000000 +0200 -+++ sysklogd-1.4.1.new/ksym.c 2005-09-06 16:49:12.000000000 +0200 -@@ -105,6 +105,15 @@ - * - * Tue Sep 12 23:48:12 CEST 2000: Martin Schulze - * Close symbol file in InitKsyms() when an error occurred. -+ * -+ * Thu Apr 29 18:07:16 CEST 2004: Dmitry Levin -+ * Close file descriptor in FindSymbolFile() in order not to leak -+ * file descriptors. -+ * -+ * Fri Jul 16 08:32:49 CEST 2004: Ulf Härnhammar -+ * Added boundary check for fscanf() in InitKsyms() and -+ * CheckMapVersion() to prevent an unintended crash when reading -+ * an incorrect System.map. - */ - - -@@ -236,7 +245,7 @@ - */ - while ( !feof(sym_file) ) - { -- if ( fscanf(sym_file, "%lx %c %s\n", &address, &type, sym) -+ if ( fscanf(sym_file, "%lx %c %511s\n", &address, &type, sym) - != 3 ) - { - Syslog(LOG_ERR, "Error in symbol table input (#1)."); -@@ -344,6 +353,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 +362,7 @@ - if ( (sym_file = fopen(symfile, "r")) != (FILE *) 0 ) { - if (CheckMapVersion(symfile) == 1) - file = symfile; -+ fclose (sym_file); - } - } - -@@ -533,7 +544,7 @@ - version = 0; - while ( !feof(sym_file) && (version == 0) ) - { -- if ( fscanf(sym_file, "%lx %c %s\n", &address, \ -+ if ( fscanf(sym_file, "%lx %c %511s\n", &address, \ - &type, sym) != 3 ) - { - Syslog(LOG_ERR, "Error in symbol table input (#2)."); -@@ -899,3 +910,11 @@ - return; - } - #endif -+ -+/* -+ * Local variables: -+ * c-indent-level: 8 -+ * c-basic-offset: 8 -+ * tab-width: 8 -+ * End: -+ */ -diff -ruN sysklogd-1.4.1/ksym_mod.c sysklogd-1.4.1.new/ksym_mod.c ---- sysklogd-1.4.1/ksym_mod.c 2000-09-12 23:15:28.000000000 +0200 -+++ sysklogd-1.4.1.new/ksym_mod.c 2005-09-06 16:49:12.000000000 +0200 -@@ -78,6 +78,11 @@ - * - * Tue Sep 12 23:11:13 CEST 2000: Martin Schulze - * Changed llseek() to lseek64() in order to skip a libc warning. -+ * -+ * Wed Mar 31 17:35:01 CEST 2004: Martin Schulze -+ * Removed references to since it doesn't work -+ * anymore with its recent content from Linux 2.4/2.6, created -+ * module.h locally instead. - */ - - -@@ -89,11 +94,12 @@ - #include - #include - #include -+#include "module.h" - #if !defined(__GLIBC__) - #include --#include -+#include - #else /* __GLIBC__ */ --#include -+#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__ */ -@@ -107,7 +113,7 @@ - - #if !defined(__GLIBC__) - /* -- * The following bit uses some kernel/library magic to product what -+ * The following bit uses some kernel/library magic to produce 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. -diff -ruN sysklogd-1.4.1/Makefile sysklogd-1.4.1.new/Makefile ---- sysklogd-1.4.1/Makefile 1998-10-12 22:25:15.000000000 +0200 -+++ sysklogd-1.4.1.new/Makefile 2005-09-06 16:49:12.000000000 +0200 -@@ -4,12 +4,15 @@ - #CFLAGS= -g -DSYSV -Wall - #LDFLAGS= -g - CFLAGS= $(RPM_OPT_FLAGS) -O3 -DSYSV -fomit-frame-pointer -Wall -fno-strength-reduce -+# -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE - LDFLAGS= -s - - # Look where your install program is. - INSTALL = /usr/bin/install --BINDIR = /usr/sbin --MANDIR = /usr/man -+ -+# Destination paths, set prefix=/opt if required -+BINDIR = $(prefix)/usr/sbin -+MANDIR = $(prefix)/usr/share/man - - # There is one report that under an all ELF system there may be a need to - # explicilty link with libresolv.a. If linking syslogd fails you may wish -@@ -34,8 +37,9 @@ - # The following define establishes ownership for the man pages. - # Avery tells me that there is a difference between Debian and - # Slackware. Rather than choose sides I am leaving it up to the user. --MAN_OWNER = root --# MAN_OWNER = man -+MAN_USER = root -+MAN_GROUP = root -+MAN_PERMS = 644 - - # The following define establishes the name of the pid file for the - # syslogd daemon. The library include file (paths.h) defines the -@@ -116,7 +120,7 @@ - ${INSTALL} -m 500 -s klogd ${BINDIR}/klogd - - 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} -o ${MAN_USER} -g ${MAN_GROUP} -m ${MAN_PERMS} sysklogd.8 ${MANDIR}/man8/sysklogd.8 -+ ${INSTALL} -o ${MAN_USER} -g ${MAN_GROUP} -m ${MAN_PERMS} syslogd.8 ${MANDIR}/man8/syslogd.8 -+ ${INSTALL} -o ${MAN_USER} -g ${MAN_GROUP} -m ${MAN_PERMS} syslog.conf.5 ${MANDIR}/man5/syslog.conf.5 -+ ${INSTALL} -o ${MAN_USER} -g ${MAN_GROUP} -m ${MAN_PERMS} klogd.8 ${MANDIR}/man8/klogd.8 -diff -ruN sysklogd-1.4.1/module.h sysklogd-1.4.1.new/module.h ---- sysklogd-1.4.1/module.h 1970-01-01 01:00:00.000000000 +0100 -+++ sysklogd-1.4.1.new/module.h 2005-09-06 16:49:12.000000000 +0200 -@@ -0,0 +1,90 @@ -+/* -+ module.h - Miscellaneous module definitions -+ Copyright (c) 1996 Richard Henderson -+ Copyright (c) 2004 Martin Schulze -+ -+ This file is part of the sysklogd package. -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+*/ -+ -+/* ChangeLog: -+ * -+ * Wed Mar 31 17:35:01 CEST 2004: Martin Schulze -+ * Created local copy of module.h based on the content of Linux -+ * 2.2 since doesn't work anymore with its -+ * recent content from Linux 2.4/2.6. -+ */ -+ -+#include -+ -+#define MODULE_NAME_LEN 60 -+ -+struct kernel_sym -+{ -+ unsigned long value; -+ char name[MODULE_NAME_LEN]; -+}; -+ -+ -+struct list_head { -+ struct list_head *next, *prev; -+}; -+ -+ -+struct module_info -+{ -+ unsigned long addr; -+ unsigned long size; -+ unsigned long flags; -+ long usecount; -+}; -+ -+ -+struct module -+{ -+ unsigned long size_of_struct; /* == sizeof(module) */ -+ struct module *next; -+ const char *name; -+ unsigned long size; -+ -+ union -+ { -+ int 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_opt_member() -+ to examine them. */ -+ const struct module_persist *persist_start; -+ const struct module_persist *persist_end; -+ int (*can_unload)(void); -+}; -diff -ruN sysklogd-1.4.1/pidfile.c sysklogd-1.4.1.new/pidfile.c ---- sysklogd-1.4.1/pidfile.c 1998-02-10 23:37:12.000000000 +0100 -+++ sysklogd-1.4.1.new/pidfile.c 2005-09-06 16:49:12.000000000 +0200 -@@ -87,7 +87,7 @@ - int fd; - int pid; - -- if ( ((fd = open(pidfile, O_RDWR|O_CREAT, 0644)) == -1) -+ if ( ((fd = open(pidfile, O_RDWR|O_CREAT|O_TRUNC, 0644)) == -1) - || ((f = fdopen(fd, "r+")) == NULL) ) { - fprintf(stderr, "Can't open or create %s.\n", pidfile); - return 0; -diff -ruN sysklogd-1.4.1/README.1st sysklogd-1.4.1.new/README.1st ---- sysklogd-1.4.1/README.1st 1997-06-02 19:21:39.000000000 +0200 -+++ sysklogd-1.4.1.new/README.1st 2005-09-06 16:49:12.000000000 +0200 -@@ -1,5 +1,5 @@ --Very important information before using version 1.3 ----------------------------------------------------- -+Important information -+--------------------- - - The included version of syslogd behaves in a slightly different manner - to the one in former releases. Please review the following important -@@ -63,3 +63,10 @@ - these scripts should remove all old .pid files found in /var/run. - This will insure that klogd and syslogd start properly even if prior - executions have been terminated harshly. -+ -+* Large file support, i.e. support to write to log files that are -+ larger than 2 GB is not part of syslogd, but a matter of the Glibc -+ emitting different system calls to the kernel interface. To support -+ large files you'll have to compile syslogd with the compiler defines -+ -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE so that glibc adjusts the -+ system calls. -diff -ruN sysklogd-1.4.1/README.linux sysklogd-1.4.1.new/README.linux ---- sysklogd-1.4.1/README.linux 1999-01-19 01:09:12.000000000 +0100 -+++ sysklogd-1.4.1.new/README.linux 2005-09-06 16:49:12.000000000 +0200 -@@ -40,12 +40,17 @@ - a useful addition to the software gene pool. - - There is a mailing list covering this package and syslog in general. --The lists address is sysklogd@Infodrom.North.DE . To subscribe send a --mail to Majordomo@Infodrom.North.DE with a line "subscribe sysklogd" -+The lists address is infodrom-sysklogd@lists.infodrom.org . To subscribe send a -+mail to majordomo@lists.infodrom.org with a line "subscribe infodrom-sysklogd" - in the message body. - --New versions of this package will be available at Joey's ftp server. --ftp://ftp.infodrom.north.de/pub/people/joey/sysklogd/ -+A second mailing list exists as infodrom-sysklogd-cvs@lists.infodrom.org. Only -+CVS messages and diffs are distributed there. Whenever new code is added to -+sysklogd, CVS generates a mail from these changes which will be sent to -+this list. Discussions will take place on the first list. -+ -+The latest version of this software can be found at: -+http://www.infodrom.org/projects/sysklogd/download.php3 - - Best regards, - -@@ -67,6 +72,6 @@ - - Martin Schulze - Infodrom Oldenburg --joey@linux.de -+joey@infodrom.org - --And a host of bug reporters whose contributions cannot be underestimated. -+And a number of bug reporters whose contributions cannot be underestimated. -diff -ruN sysklogd-1.4.1/sysklogd.8 sysklogd-1.4.1.new/sysklogd.8 ---- sysklogd-1.4.1/sysklogd.8 2001-03-11 20:35:51.000000000 +0100 -+++ sysklogd-1.4.1.new/sysklogd.8 2005-09-06 16:49:12.000000000 +0200 -@@ -84,7 +84,7 @@ - .B MAXFUNIX - within the syslogd.c source file. An example for a chroot() daemon is - described by the people from OpenBSD at --http://www.psionic.com/papers/dns.html. -+. - .TP - .B "\-d" - Turns on debug mode. Using this the daemon will not proceed a -@@ -117,7 +117,8 @@ - between two \fI-- MARK --\fR lines is 20 minutes. This can be changed - with this option. Setting the - .I interval --to zero turns it off entirely. -+to zero turns it off entirely. Depending on other log messages -+generated these lines may not be written consecutively. - .TP - .B "\-n" - Avoid auto-backgrounding. This is needed especially if the -@@ -364,8 +365,10 @@ - - To avoid this in further times no messages that were received from a - remote host are sent out to another (or the same) remote host --anymore. If there are scenarios where this doesn't make sense, please --drop me (Joey) a line. -+anymore. If you experience are setup in which this doesn't make -+sense, please use the -+.B \-h -+commandline switch. - - If the remote host is located in the same domain as the host, - .B syslogd -diff -ruN sysklogd-1.4.1/syslog.c sysklogd-1.4.1.new/syslog.c ---- sysklogd-1.4.1/syslog.c 2001-03-11 20:35:51.000000000 +0100 -+++ sysklogd-1.4.1.new/syslog.c 2005-09-06 16:49:12.000000000 +0200 -@@ -47,6 +47,9 @@ - * Sun Mar 11 20:23:44 CET 2001: Martin Schulze - * Use SOCK_DGRAM for loggin, renables it to work. - * -+ * Wed Aug 27 17:48:16 CEST 2003: Martin Schulze -+ * Improved patch by Michael Pomraning to -+ * reconnect klogd to the logger after it went away. - */ - - #include -@@ -98,6 +101,7 @@ - register char *p; - time_t now; - int fd, saved_errno; -+ int result; - char tbuf[2048], fmt_cpy[1024], *stdp = (char *) 0; - - saved_errno = errno; -@@ -167,7 +171,16 @@ - } - - /* output the message to the local logger */ -- if (write(LogFile, tbuf, cnt + 1) >= 0 || !(LogStat&LOG_CONS)) -+ result = write(LogFile, tbuf, cnt + 1); -+ -+ if (result == -1 -+ && (errno == ECONNRESET || errno == ENOTCONN || errno == ECONNREFUSED)) { -+ closelog(); -+ openlog(LogTag, LogStat | LOG_NDELAY, LogFacility); -+ result = write(LogFile, tbuf, cnt + 1); -+ } -+ -+ if (result >= 0 || !(LogStat&LOG_CONS)) - return; - - /* -diff -ruN sysklogd-1.4.1/syslog.conf.5 sysklogd-1.4.1.new/syslog.conf.5 ---- sysklogd-1.4.1/syslog.conf.5 1999-08-21 12:49:14.000000000 +0200 -+++ sysklogd-1.4.1.new/syslog.conf.5 2005-09-06 16:49:12.000000000 +0200 -@@ -64,7 +64,7 @@ - The - .I facility - is one of the following keywords: --.BR auth ", " authpriv ", " cron ", " daemon ", " kern ", " lpr ", " -+.BR auth ", " authpriv ", " cron ", " daemon ", " ftp ", " kern ", " lpr ", " - .BR mail ", " mark ", " news ", " security " (same as " auth "), " - .BR syslog ", " user ", " uucp " and " local0 " through " local7 . - The keyword -@@ -121,12 +121,21 @@ - - This - .BR syslogd (8) --has a syntax extension to the original BSD source, that makes its use -+has a syntax extension to the original BSD source, which makes its use - more intuitively. You may precede every priority with an equation sign --(``='') to specify only this single priority and not any of the --above. You may also (both is valid, too) precede the priority with an --exclamation mark (``!'') to ignore all that priorities, either exact --this one or this and any higher priority. If you use both extensions -+(``='') to specify that -+.B syslogd -+should only refer to this single priority and not this priority and -+all higher priorities. -+ -+You may also precide the priority with an exclamation mark (``!'') if -+you want -+.B syslogd -+to ignore this priority and all higher priorities. -+You may even use both, the exclamation mark and the equation sign if -+you want -+.B syslogd -+to ignore only this single priority. If you use both extensions - than the exclamation mark must occur before the equation sign, just - use it intuitively. - -@@ -300,7 +309,7 @@ - .B syslogd - log all messages that come with either the - .BR info " or the " notice --facility into the file -+priority into the file - .IR /var/log/messages , - except for all messages that use the - .B mail -diff -ruN sysklogd-1.4.1/syslogd.c sysklogd-1.4.1.new/syslogd.c ---- sysklogd-1.4.1/syslogd.c 2001-03-11 20:40:10.000000000 +0100 -+++ sysklogd-1.4.1.new/syslogd.c 2005-09-06 16:49:12.000000000 +0200 -@@ -441,6 +441,39 @@ - * Don't return a closed fd if `-a' is called with a wrong path. - * Thanks to Bill Nottingham for providing - * a patch. -+ * Thu Apr 13 05:08:10 CEST 2001: Jon Burgess -+ * Moved the installation of the signal handler up a little bit -+ * so it guaranteed to be available when the child is forked, -+ * hence, fixing a race condition. This used to create problems -+ * with UML and fast machines. -+ * -+ * Sat Apr 17 18:03:05 CEST 2004: Steve Grubb -+ * Correct memory allocation for for commandline arguments in -+ * crunch_list(). -+ * -+ * Thu Apr 29 12:38:39 CEST 2004: Solar Designer -+ * Applied Openwall paranoia patches to improve crunch_list(). -+ * -+ * Tue May 4 16:47:30 CEST 2004: Solar Designer -+ * Ensure that "len" is not placed in a register, and that the -+ * endtty() signal handler is not installed too early which could -+ * cause a segmentation fault or worse. -+ * -+ * Tue May 4 16:52:01 CEST 2004: Solar Designer -+ * Adjust the size of a variable to prevent a buffer overflow -+ * should _PATH_DEV ever contain something different than "/dev/". -+ * -+ * Tue Nov 2 20:28:23 CET 2004: Colin Phipps -+ * Don't block on the network socket, in case a packet gets lost -+ * between select and recv. -+ * -+ * Sun Nov 7 12:28:47 CET 2004: Martin Schulze -+ * Discard any timestamp information found in received syslog -+ * messages. This will affect local messages sent from a -+ * different timezone. -+ * -+ * Sun Nov 7 13:47:00 CET 2004: Martin Schulze -+ * Remove trailing newline when forwarding messages. - */ - - -@@ -890,11 +923,11 @@ - dprintf("Checking pidfile.\n"); - if (!check_pid(PidFile)) - { -+ signal (SIGTERM, doexit); - if (fork()) { - /* - * Parent process - */ -- signal (SIGTERM, doexit); - sleep(300); - /* - * Not reached unless something major went wrong. 5 -@@ -992,6 +1025,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. */ -@@ -1141,13 +1175,13 @@ - */ - printchopped(from, line, \ - i + 2, finet); -- } else if (i < 0 && errno != EINTR) { -+ } else if (i < 0 && errno != EINTR && errno != EAGAIN) { - dprintf("INET socket error: %d = %s.\n", \ - errno, strerror(errno)); - logerror("recvfrom inet"); - /* should be harmless now that we set - * BSDCOMPAT on the socket */ -- sleep(10); -+ sleep(1); - } - } - #endif -@@ -1216,6 +1250,7 @@ - { - int fd, on = 1; - struct sockaddr_in sin; -+ int sockflags; - - fd = socket(AF_INET, SOCK_DGRAM, 0); - if (fd < 0) { -@@ -1241,6 +1276,24 @@ - close(fd); - return -1; - } -+ /* We must not block on the network socket, in case a packet -+ * gets lost between select and recv, otherise the process -+ * will stall until the timeout, and other processes trying to -+ * log will also stall. -+ */ -+ if ((sockflags = fcntl(fd, F_GETFL)) != -1) { -+ sockflags |= O_NONBLOCK; -+ /* -+ * SETFL could fail too, so get it caught by the subsequent -+ * error check. -+ */ -+ sockflags = fcntl(fd, F_SETFL, sockflags); -+ } -+ if (sockflags == -1) { -+ logerror("fcntl(O_NONBLOCK), suspending inet"); -+ close(fd); -+ return -1; -+ } - if (bind(fd, (struct sockaddr *) &sin, sizeof(sin)) < 0) { - logerror("bind, suspending inet"); - close(fd); -@@ -1254,30 +1307,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 +1334,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; - } -@@ -1539,30 +1586,48 @@ - int fac, prilev, lognum; - int msglen; - char *timestamp; -+#ifdef __gnu_linux__ -+ sigset_t mask; -+#else -+#ifndef SYSV -+ sigset_t omask; -+#endif -+#endif - - dprintf("logmsg: %s, flags %x, from %s, msg %s\n", textpri(pri), flags, from, msg); - -+#ifdef __gnu_linux__ -+ sigemptyset(&mask); -+ sigaddset(&mask, SIGHUP); -+ sigaddset(&mask, SIGALRM); -+ sigprocmask(SIG_BLOCK, &mask, NULL); -+#else - #ifndef SYSV - omask = sigblock(sigmask(SIGHUP)|sigmask(SIGALRM)); - #endif -+#endif - - /* - * Check to see if msg looks non-standard. -+ * -+ * A message looks like -+ * Nov 17 11:42:33 CRON[ -+ * 01234567890123456 -+ * ^ ^ ^ ^ ^ -+ * -+ * Remote messages are not accompanied by a timestamp. -+ * Local messages are accompanied by a timestamp (program's timezone) - */ - msglen = strlen(msg); -- if (msglen < 16 || msg[3] != ' ' || msg[6] != ' ' || -- msg[9] != ':' || msg[12] != ':' || msg[15] != ' ') -- flags |= ADDDATE; -- -- (void) time(&now); -- if (flags & ADDDATE) -- timestamp = ctime(&now) + 4; -- else { -- timestamp = msg; -+ if (!(msglen < 16 || msg[3] != ' ' || msg[6] != ' ' || -+ msg[9] != ':' || msg[12] != ':' || msg[15] != ' ')) { - msg += 16; - msglen -= 16; - } - -+ (void) time(&now); -+ timestamp = ctime(&now) + 4; -+ - /* extract facility and priority level */ - if (flags & MARK) - fac = LOG_NFACILITIES; -@@ -1581,9 +1646,13 @@ - (void) close(f->f_file); - f->f_file = -1; - } -+#ifdef __gnu_linux__ -+ sigprocmask(SIG_UNBLOCK, &mask, NULL); -+#else - #ifndef SYSV - (void) sigsetmask(omask); - #endif -+#endif - return; - } - #ifdef SYSV -@@ -1646,9 +1715,13 @@ - } - } - } -+#ifdef __gnu_linux__ -+ sigprocmask(SIG_UNBLOCK, &mask, NULL); -+#else - #ifndef SYSV - (void) sigsetmask(omask); - #endif -+#endif - } - #if FALSE - } /* balance parentheses for emacs */ -@@ -1771,7 +1844,7 @@ - dprintf("Not sending message to remote.\n"); - else { - f->f_time = now; -- (void) snprintf(line, sizeof(line), "<%d>%s\n", f->f_prevpri, \ -+ (void) snprintf(line, sizeof(line), "<%d>%s", f->f_prevpri, \ - (char *) iov[4].iov_base); - l = strlen(line); - if (l > MAXLINE) -@@ -1815,7 +1888,7 @@ - v->iov_len = 1; - } - again: -- /* f->f_file == -1 is an indicator that the we couldn't -+ /* f->f_file == -1 is an indicator that we couldn't - open the file at startup. */ - if (f->f_file == -1) - break; -@@ -1852,7 +1925,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; - -@@ -1891,7 +1964,7 @@ - register struct filed *f; - struct iovec *iov; - { -- char p[6 + UNAMESZ]; -+ char p[sizeof (_PATH_DEV) + UNAMESZ]; - register int i; - int ttyf, len; - static int reenter = 0; -@@ -1899,6 +1972,8 @@ - struct utmp *uptr; - char greetings[200]; - -+ (void) &len; -+ - if (reenter++) - return; - -@@ -1913,7 +1988,6 @@ - if (fork() == 0) { - (void) signal(SIGTERM, SIG_DFL); - (void) alarm(0); -- (void) signal(SIGALRM, endtty); - #ifndef SYSV - (void) signal(SIGTTOU, SIG_IGN); - (void) sigsetmask(0); -@@ -1929,7 +2003,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; -@@ -1959,6 +2033,7 @@ - iov[1].iov_len = 0; - } - if (setjmp(ttybuf) == 0) { -+ (void) signal(SIGALRM, endtty); - (void) alarm(15); - /* open the terminal */ - ttyf = open(p, O_WRONLY|O_NOCTTY);