sysklogd: upgraded to 1.5
svn path=/nixpkgs/branches/stdenv-updates/; revision=9819
This commit is contained in:
parent
6e7217a2da
commit
b2149510df
|
@ -3,7 +3,8 @@ source $stdenv/setup
|
|||
prefix=$out
|
||||
export prefix
|
||||
|
||||
installFlags="BINDIR=$out/sbin MANDIR=$out/share/man"
|
||||
installFlags="BINDIR=$out/sbin MANDIR=$out/share/man INSTALL=install"
|
||||
patchPhase="sed -e 's@-o \${MAN_USER} -g \${MAN_GROUP} -m \${MAN_PERMS} @@' -i Makefile"
|
||||
|
||||
ensureDir "$out/share/man/man8/"
|
||||
ensureDir "$out/share/man/man5/"
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
{stdenv, fetchurl}:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "sysklogd-1.4.1";
|
||||
name = "sysklogd-1.5";
|
||||
builder = ./builder.sh;
|
||||
src = fetchurl {
|
||||
url = http://www.infodrom.org/projects/sysklogd/download/sysklogd-1.4.1.tar.gz;
|
||||
md5 = "d214aa40beabf7bdb0c9b3c64432c774";
|
||||
url = http://www.infodrom.org/projects/sysklogd/download/sysklogd-1.5.tar.gz;
|
||||
sha256 = "0wxpkrznqwz4dy11k90s2sqszwp7d4mlc0ag8288wa193plvhsb1";
|
||||
};
|
||||
patches = [./sysklogd-1.4.1-cvs-20050525-local.diff ./sysklogd-1.4.1-asm.patch];
|
||||
}
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
diff -ruN sysklogd-1.4.1/module.h sysklogd-1.4.1.new/module.h
|
||||
--- sysklogd-1.4.1/module.h 2005-09-28 15:53:58.000000000 +0200
|
||||
+++ sysklogd-1.4.1.new/module.h 2005-09-28 15:54:56.000000000 +0200
|
||||
@@ -28,7 +28,7 @@
|
||||
* recent content from Linux 2.4/2.6.
|
||||
*/
|
||||
|
||||
-#include <asm/atomic.h>
|
||||
+/* #include <asm/atomic.h> */
|
||||
|
||||
#define MODULE_NAME_LEN 60
|
||||
|
|
@ -1,901 +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 2006-03-14 16:22:13.000000000 +0100
|
||||
@@ -1,3 +1,42 @@
|
||||
+Version 1.4.2
|
||||
+
|
||||
+ . Dmitry V. Levin <ldv@altlinux.org>
|
||||
+ - Close file descriptor in FindSymbolFile() in ksym.c in order not to
|
||||
+ leak file descriptors.
|
||||
+ . Solar Designer <solar@openwall.com>
|
||||
+ - 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 <linux_4ever@yahoo.com>
|
||||
+ - fix memory calculation in crunch_list()
|
||||
+ . Martin Schulze <joey@infodrom.org>
|
||||
+ - 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 <Jon_Burgess@eur.3com.com>
|
||||
+ - 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 <gregt@maths.otago.ac.nz>
|
||||
+ - Improved README.linux
|
||||
+ . Ulf Härnhammar <Ulf.Harnhammar.9485@student.uu.se>
|
||||
+ - Bondary check for fscanf() in InitKsyms() and CheckMapVersion()
|
||||
+ . Colin Phipps <cph@cph.demon.co.uk>
|
||||
+ - Don't block on the network socket in case of package los
|
||||
+ . Dirk Mueller <mueller@kde.org>
|
||||
+ - 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 <okir@caldera.de>
|
||||
- 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 2006-03-14 16:22:13.000000000 +0100
|
||||
@@ -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 2006-03-14 16:22:13.000000000 +0100
|
||||
@@ -243,6 +243,9 @@
|
||||
* people have submitted patches: Troels Walsted Hansen
|
||||
* <troels@thule.no>, Wolfgang Oertl <Wolfgang.Oertl@uibk.ac.at>
|
||||
* and Thomas Roessler.
|
||||
+ * Thu Apr 29 15:24:07 2004: Solar Designer <solar@openwall.com>
|
||||
+ * 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 2006-03-14 16:22:13.000000000 +0100
|
||||
@@ -105,6 +105,15 @@
|
||||
*
|
||||
* Tue Sep 12 23:48:12 CEST 2000: Martin Schulze <joey@infodrom.ffis.de>
|
||||
* Close symbol file in InitKsyms() when an error occurred.
|
||||
+ *
|
||||
+ * Thu Apr 29 18:07:16 CEST 2004: Dmitry Levin <ldv@altlinux.org>
|
||||
+ * Close file descriptor in FindSymbolFile() in order not to leak
|
||||
+ * file descriptors.
|
||||
+ *
|
||||
+ * Fri Jul 16 08:32:49 CEST 2004: Ulf Härnhammar <Ulf.Harnhammar.9485@student.uu.se>
|
||||
+ * 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 2006-03-14 16:22:13.000000000 +0100
|
||||
@@ -78,6 +78,11 @@
|
||||
*
|
||||
* Tue Sep 12 23:11:13 CEST 2000: Martin Schulze <joey@infodrom.ffis.de>
|
||||
* Changed llseek() to lseek64() in order to skip a libc warning.
|
||||
+ *
|
||||
+ * Wed Mar 31 17:35:01 CEST 2004: Martin Schulze <joey@infodrom.org>
|
||||
+ * Removed references to <linux/module.h> 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 <errno.h>
|
||||
#include <sys/fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
+#include "module.h"
|
||||
#if !defined(__GLIBC__)
|
||||
#include <linux/time.h>
|
||||
-#include <linux/module.h>
|
||||
+#include <linux/linkage.h>
|
||||
#else /* __GLIBC__ */
|
||||
-#include <linux/module.h>
|
||||
+#include <linux/linkage.h>
|
||||
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 2006-03-14 16:22:41.000000000 +0100
|
||||
@@ -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
|
||||
+INSTALL = install
|
||||
+
|
||||
+# 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} -m ${MAN_PERMS} sysklogd.8 ${MANDIR}/man8/sysklogd.8
|
||||
+ ${INSTALL} -m ${MAN_PERMS} syslogd.8 ${MANDIR}/man8/syslogd.8
|
||||
+ ${INSTALL} -m ${MAN_PERMS} syslog.conf.5 ${MANDIR}/man5/syslog.conf.5
|
||||
+ ${INSTALL} -m ${MAN_PERMS} klogd.8 ${MANDIR}/man8/klogd.8
|
||||
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 2006-03-14 16:22:13.000000000 +0100
|
||||
@@ -0,0 +1,90 @@
|
||||
+/*
|
||||
+ module.h - Miscellaneous module definitions
|
||||
+ Copyright (c) 1996 Richard Henderson <rth@tamu.edu>
|
||||
+ Copyright (c) 2004 Martin Schulze <joey@infodrom.org>
|
||||
+
|
||||
+ 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 <joey@infodrom.org>
|
||||
+ * Created local copy of module.h based on the content of Linux
|
||||
+ * 2.2 since <linux/module.h> doesn't work anymore with its
|
||||
+ * recent content from Linux 2.4/2.6.
|
||||
+ */
|
||||
+
|
||||
+#include <asm/atomic.h>
|
||||
+
|
||||
+#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 2006-03-14 16:22:13.000000000 +0100
|
||||
@@ -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 2006-03-14 16:22:13.000000000 +0100
|
||||
@@ -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 2006-03-14 16:22:13.000000000 +0100
|
||||
@@ -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 2006-03-14 16:22:13.000000000 +0100
|
||||
@@ -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.
|
||||
+<http://www.guides.sk/psionic/dns/>.
|
||||
.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 2006-03-14 16:22:13.000000000 +0100
|
||||
@@ -47,6 +47,9 @@
|
||||
* Sun Mar 11 20:23:44 CET 2001: Martin Schulze <joey@infodrom.ffis.de>
|
||||
* Use SOCK_DGRAM for loggin, renables it to work.
|
||||
*
|
||||
+ * Wed Aug 27 17:48:16 CEST 2003: Martin Schulze <joey@Infodrom.org>
|
||||
+ * Improved patch by Michael Pomraning <mjp@securepipe.com> to
|
||||
+ * reconnect klogd to the logger after it went away.
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
@@ -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 2006-03-14 16:22:13.000000000 +0100
|
||||
@@ -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 2006-03-14 16:22:13.000000000 +0100
|
||||
@@ -441,6 +441,39 @@
|
||||
* Don't return a closed fd if `-a' is called with a wrong path.
|
||||
* Thanks to Bill Nottingham <notting@redhat.com> for providing
|
||||
* a patch.
|
||||
+ * Thu Apr 13 05:08:10 CEST 2001: Jon Burgess <Jon_Burgess@eur.3com.com>
|
||||
+ * 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 <linux_4ever@yahoo.com>
|
||||
+ * Correct memory allocation for for commandline arguments in
|
||||
+ * crunch_list().
|
||||
+ *
|
||||
+ * Thu Apr 29 12:38:39 CEST 2004: Solar Designer <solar@openwall.com>
|
||||
+ * Applied Openwall paranoia patches to improve crunch_list().
|
||||
+ *
|
||||
+ * Tue May 4 16:47:30 CEST 2004: Solar Designer <solar@openwall.com>
|
||||
+ * 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 <solar@openwall.com>
|
||||
+ * 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 <cph@cph.demon.co.uk>
|
||||
+ * 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 <joey@infodrom.org>
|
||||
+ * 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 <joey@infodrom.org>
|
||||
+ * 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);
|
Loading…
Reference in a new issue