| [69cde8d] | 1 | Submitted By: Robert Connolly <robert at linuxfromscratch dot org> (ashes) | 
|---|
|  | 2 | Date: 2005-01-23 | 
|---|
|  | 3 | Initial Package Version: 1.4.1 | 
|---|
|  | 4 | Upstream Status: Not submitted | 
|---|
|  | 5 | Origin: http://www.infodrom.org/projects/sysklogd/cvs.php3 | 
|---|
|  | 6 | Description: This patch is a cvs snapshot update as of 20050123. | 
|---|
|  | 7 | Minus the debain and CVS directories. See the CHANGES. | 
|---|
|  | 8 |  | 
|---|
|  | 9 | diff -Naur sysklogd-1.4.1/CHANGES sysklogd-20050123/CHANGES | 
|---|
|  | 10 | --- sysklogd-1.4.1/CHANGES      2001-03-11 14:35:51.000000000 -0500 | 
|---|
|  | 11 | +++ sysklogd-20050123/CHANGES   2005-01-15 14:14:21.000000000 -0500 | 
|---|
|  | 12 | @@ -1,3 +1,42 @@ | 
|---|
|  | 13 | +Version 1.4.2 | 
|---|
|  | 14 | + | 
|---|
|  | 15 | + . Dmitry V. Levin <ldv@altlinux.org> | 
|---|
|  | 16 | +   - Close file descriptor in FindSymbolFile() in ksym.c in order not to | 
|---|
|  | 17 | +     leak file descriptors. | 
|---|
|  | 18 | + . Solar Designer <solar@openwall.com> | 
|---|
|  | 19 | +   - improve crunch_list() | 
|---|
|  | 20 | +   - Prevent potential buffer overflow in reading messages from the | 
|---|
|  | 21 | +     kernel log ringbuffer. | 
|---|
|  | 22 | +   - Ensure that "len" is not placed in a register, and that the | 
|---|
|  | 23 | +     endtty() signal handler is not installed too early which could | 
|---|
|  | 24 | +     cause a segmentation fault or worse. | 
|---|
|  | 25 | + . Steve Grubb <linux_4ever@yahoo.com> | 
|---|
|  | 26 | +   - fix memory calculation in crunch_list() | 
|---|
|  | 27 | + . Martin Schulze <joey@infodrom.org> | 
|---|
|  | 28 | +   - klogd will reconnect to the logger (mostly syslogd) after it went | 
|---|
|  | 29 | +     away | 
|---|
|  | 30 | +   - On heavily loaded system syslog will not spit out error messages | 
|---|
|  | 31 | +     anymore when recvfrom() results in EAGAIN | 
|---|
|  | 32 | +   - Makefile improvements | 
|---|
|  | 33 | +   - Local copy of module.h | 
|---|
|  | 34 | +   - Improved sysklogd.8 | 
|---|
|  | 35 | +   - Always log with syslogd's timezone and locale | 
|---|
|  | 36 | +   - Remove trailing newline when forwarding messages | 
|---|
|  | 37 | + . Jon Burgess <Jon_Burgess@eur.3com.com> | 
|---|
|  | 38 | +   - Moved the installation of the signal handler up a little bit so it | 
|---|
|  | 39 | +     guaranteed to be available when the child is forked, hence, fixing a | 
|---|
|  | 40 | +     race condition.  This used to create problems with UML and fast | 
|---|
|  | 41 | +     machines. | 
|---|
|  | 42 | + . Greg Trounson <gregt@maths.otago.ac.nz> | 
|---|
|  | 43 | +   - Improved README.linux | 
|---|
|  | 44 | + . Ulf Härnhammar <Ulf.Harnhammar.9485@student.uu.se> | 
|---|
|  | 45 | +   - Bondary check for fscanf() in InitKsyms() and CheckMapVersion() | 
|---|
|  | 46 | + . Colin Phipps <cph@cph.demon.co.uk> | 
|---|
|  | 47 | +   - Don't block on the network socket in case of package los | 
|---|
|  | 48 | + . Dirk Mueller <mueller@kde.org> | 
|---|
|  | 49 | +   - Don't crash when filesize limit is reached (e.g. without LFS) | 
|---|
|  | 50 | + | 
|---|
|  | 51 | + | 
|---|
|  | 52 | Version 1.4.1 | 
|---|
|  | 53 |  | 
|---|
|  | 54 | . klogd will set the console log level only if `-c' is given on the | 
|---|
|  | 55 | @@ -30,3 +69,9 @@ | 
|---|
|  | 56 | . Olaf Kirch <okir@caldera.de> | 
|---|
|  | 57 | - Remove Unix Domain Sockets and switch to Datagram Unix Sockets | 
|---|
|  | 58 | . Several bugfixes and improvements, please refer to the .c files | 
|---|
|  | 59 | + | 
|---|
|  | 60 | + | 
|---|
|  | 61 | +Local variables: | 
|---|
|  | 62 | +mode: indented-text | 
|---|
|  | 63 | +fill-column: 72 | 
|---|
|  | 64 | +End: | 
|---|
|  | 65 | diff -Naur sysklogd-1.4.1/klogd.8 sysklogd-20050123/klogd.8 | 
|---|
|  | 66 | --- sysklogd-1.4.1/klogd.8      2001-03-11 14:35:51.000000000 -0500 | 
|---|
|  | 67 | +++ sysklogd-20050123/klogd.8   2001-03-11 18:00:51.000000000 -0500 | 
|---|
|  | 68 | @@ -321,7 +321,7 @@ | 
|---|
|  | 69 | .B klogd | 
|---|
|  | 70 | to reload the module symbol information whenever a protection fault | 
|---|
|  | 71 | is detected.  Caution should be used before invoking the program in | 
|---|
|  | 72 | -\'paranoid\' mode.  The stability of the kernel and the operating | 
|---|
|  | 73 | +\&'paranoid\&' mode.  The stability of the kernel and the operating | 
|---|
|  | 74 | environment is always under question when a protection fault occurs. | 
|---|
|  | 75 | Since the klogd daemon must execute system calls in order to read the | 
|---|
|  | 76 | module symbol information there is the possibility that the system may | 
|---|
|  | 77 | diff -Naur sysklogd-1.4.1/klogd.c sysklogd-20050123/klogd.c | 
|---|
|  | 78 | --- sysklogd-1.4.1/klogd.c      2001-03-11 14:40:10.000000000 -0500 | 
|---|
|  | 79 | +++ sysklogd-20050123/klogd.c   2004-04-29 09:29:03.000000000 -0400 | 
|---|
|  | 80 | @@ -243,6 +243,9 @@ | 
|---|
|  | 81 | *     people have submitted patches: Troels Walsted Hansen | 
|---|
|  | 82 | *     <troels@thule.no>, Wolfgang Oertl <Wolfgang.Oertl@uibk.ac.at> | 
|---|
|  | 83 | *     and Thomas Roessler. | 
|---|
|  | 84 | + * Thu Apr 29 15:24:07 2004: Solar Designer <solar@openwall.com> | 
|---|
|  | 85 | + *     Prevent potential buffer overflow in reading messages from the | 
|---|
|  | 86 | + *     kernel log rinbuffer. | 
|---|
|  | 87 | */ | 
|---|
|  | 88 |  | 
|---|
|  | 89 |  | 
|---|
|  | 90 | @@ -938,7 +941,7 @@ | 
|---|
|  | 91 | * messages into this fresh buffer. | 
|---|
|  | 92 | */ | 
|---|
|  | 93 | memset(log_buffer, '\0', sizeof(log_buffer)); | 
|---|
|  | 94 | -       if ( (rdcnt = ksyslog(2, log_buffer, sizeof(log_buffer))) < 0 ) | 
|---|
|  | 95 | +       if ( (rdcnt = ksyslog(2, log_buffer, sizeof(log_buffer)-1)) < 0 ) | 
|---|
|  | 96 | { | 
|---|
|  | 97 | if ( errno == EINTR ) | 
|---|
|  | 98 | return; | 
|---|
|  | 99 | diff -Naur sysklogd-1.4.1/ksym.c sysklogd-20050123/ksym.c | 
|---|
|  | 100 | --- sysklogd-1.4.1/ksym.c       2000-09-12 17:53:31.000000000 -0400 | 
|---|
|  | 101 | +++ sysklogd-20050123/ksym.c    2004-07-16 02:48:27.000000000 -0400 | 
|---|
|  | 102 | @@ -105,6 +105,15 @@ | 
|---|
|  | 103 | * | 
|---|
|  | 104 | * Tue Sep 12 23:48:12 CEST 2000: Martin Schulze <joey@infodrom.ffis.de> | 
|---|
|  | 105 | *     Close symbol file in InitKsyms() when an error occurred. | 
|---|
|  | 106 | + * | 
|---|
|  | 107 | + * Thu Apr 29 18:07:16 CEST 2004: Dmitry Levin <ldv@altlinux.org> | 
|---|
|  | 108 | + *     Close file descriptor in FindSymbolFile() in order not to leak | 
|---|
|  | 109 | + *     file descriptors. | 
|---|
|  | 110 | + * | 
|---|
|  | 111 | + * Fri Jul 16 08:32:49 CEST 2004: Ulf Härnhammar <Ulf.Harnhammar.9485@student.uu.se> | 
|---|
|  | 112 | + *     Added boundary check for fscanf() in InitKsyms() and | 
|---|
|  | 113 | + *     CheckMapVersion() to prevent an unintended crash when reading | 
|---|
|  | 114 | + *     an incorrect System.map. | 
|---|
|  | 115 | */ | 
|---|
|  | 116 |  | 
|---|
|  | 117 |  | 
|---|
|  | 118 | @@ -236,7 +245,7 @@ | 
|---|
|  | 119 | */ | 
|---|
|  | 120 | while ( !feof(sym_file) ) | 
|---|
|  | 121 | { | 
|---|
|  | 122 | -               if ( fscanf(sym_file, "%lx %c %s\n", &address, &type, sym) | 
|---|
|  | 123 | +               if ( fscanf(sym_file, "%lx %c %511s\n", &address, &type, sym) | 
|---|
|  | 124 | != 3 ) | 
|---|
|  | 125 | { | 
|---|
|  | 126 | Syslog(LOG_ERR, "Error in symbol table input (#1)."); | 
|---|
|  | 127 | @@ -344,6 +353,7 @@ | 
|---|
|  | 128 | if ( (sym_file = fopen(symfile, "r")) != (FILE *) 0 ) { | 
|---|
|  | 129 | if (CheckMapVersion(symfile) == 1) | 
|---|
|  | 130 | file = symfile; | 
|---|
|  | 131 | +                       fclose (sym_file); | 
|---|
|  | 132 | } | 
|---|
|  | 133 | if (sym_file == (FILE *) 0 || file == (char *) 0) { | 
|---|
|  | 134 | sprintf (symfile, "%s", *mf); | 
|---|
|  | 135 | @@ -352,6 +362,7 @@ | 
|---|
|  | 136 | if ( (sym_file = fopen(symfile, "r")) != (FILE *) 0 ) { | 
|---|
|  | 137 | if (CheckMapVersion(symfile) == 1) | 
|---|
|  | 138 | file = symfile; | 
|---|
|  | 139 | +                               fclose (sym_file); | 
|---|
|  | 140 | } | 
|---|
|  | 141 | } | 
|---|
|  | 142 |  | 
|---|
|  | 143 | @@ -533,7 +544,7 @@ | 
|---|
|  | 144 | version = 0; | 
|---|
|  | 145 | while ( !feof(sym_file) && (version == 0) ) | 
|---|
|  | 146 | { | 
|---|
|  | 147 | -                       if ( fscanf(sym_file, "%lx %c %s\n", &address, \ | 
|---|
|  | 148 | +                       if ( fscanf(sym_file, "%lx %c %511s\n", &address, \ | 
|---|
|  | 149 | &type, sym) != 3 ) | 
|---|
|  | 150 | { | 
|---|
|  | 151 | Syslog(LOG_ERR, "Error in symbol table input (#2)."); | 
|---|
|  | 152 | @@ -899,3 +910,11 @@ | 
|---|
|  | 153 | return; | 
|---|
|  | 154 | } | 
|---|
|  | 155 | #endif | 
|---|
|  | 156 | + | 
|---|
|  | 157 | +/* | 
|---|
|  | 158 | + * Local variables: | 
|---|
|  | 159 | + *  c-indent-level: 8 | 
|---|
|  | 160 | + *  c-basic-offset: 8 | 
|---|
|  | 161 | + *  tab-width: 8 | 
|---|
|  | 162 | + * End: | 
|---|
|  | 163 | + */ | 
|---|
|  | 164 | diff -Naur sysklogd-1.4.1/ksym_mod.c sysklogd-20050123/ksym_mod.c | 
|---|
|  | 165 | --- sysklogd-1.4.1/ksym_mod.c   2000-09-12 17:15:28.000000000 -0400 | 
|---|
|  | 166 | +++ sysklogd-20050123/ksym_mod.c        2004-03-31 10:47:08.000000000 -0500 | 
|---|
|  | 167 | @@ -78,6 +78,11 @@ | 
|---|
|  | 168 | * | 
|---|
|  | 169 | * Tue Sep 12 23:11:13 CEST 2000: Martin Schulze <joey@infodrom.ffis.de> | 
|---|
|  | 170 | *     Changed llseek() to lseek64() in order to skip a libc warning. | 
|---|
|  | 171 | + * | 
|---|
|  | 172 | + * Wed Mar 31 17:35:01 CEST 2004: Martin Schulze <joey@infodrom.org> | 
|---|
|  | 173 | + *     Removed references to <linux/module.h> since it doesn't work | 
|---|
|  | 174 | + *     anymore with its recent content from Linux 2.4/2.6, created | 
|---|
|  | 175 | + *     module.h locally instead. | 
|---|
|  | 176 | */ | 
|---|
|  | 177 |  | 
|---|
|  | 178 |  | 
|---|
|  | 179 | @@ -89,11 +94,12 @@ | 
|---|
|  | 180 | #include <errno.h> | 
|---|
|  | 181 | #include <sys/fcntl.h> | 
|---|
|  | 182 | #include <sys/stat.h> | 
|---|
|  | 183 | +#include "module.h" | 
|---|
|  | 184 | #if !defined(__GLIBC__) | 
|---|
|  | 185 | #include <linux/time.h> | 
|---|
|  | 186 | -#include <linux/module.h> | 
|---|
|  | 187 | +#include <linux/linkage.h> | 
|---|
|  | 188 | #else /* __GLIBC__ */ | 
|---|
|  | 189 | -#include <linux/module.h> | 
|---|
|  | 190 | +#include <linux/linkage.h> | 
|---|
|  | 191 | extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence)); | 
|---|
|  | 192 | extern int get_kernel_syms __P ((struct kernel_sym *__table)); | 
|---|
|  | 193 | #endif /* __GLIBC__ */ | 
|---|
|  | 194 | @@ -107,7 +113,7 @@ | 
|---|
|  | 195 |  | 
|---|
|  | 196 | #if !defined(__GLIBC__) | 
|---|
|  | 197 | /* | 
|---|
|  | 198 | - * The following bit uses some kernel/library magic to product what | 
|---|
|  | 199 | + * The following bit uses some kernel/library magic to produce what | 
|---|
|  | 200 | * looks like a function call to user level code.  This function is | 
|---|
|  | 201 | * actually a system call in disguise.  The purpose of the getsyms | 
|---|
|  | 202 | * call is to return a current copy of the in-kernel symbol table. | 
|---|
|  | 203 | diff -Naur sysklogd-1.4.1/Makefile sysklogd-20050123/Makefile | 
|---|
|  | 204 | --- sysklogd-1.4.1/Makefile     1998-10-12 16:25:15.000000000 -0400 | 
|---|
|  | 205 | +++ sysklogd-20050123/Makefile  2004-04-29 07:04:03.000000000 -0400 | 
|---|
|  | 206 | @@ -4,12 +4,15 @@ | 
|---|
|  | 207 | #CFLAGS= -g -DSYSV -Wall | 
|---|
|  | 208 | #LDFLAGS= -g | 
|---|
|  | 209 | CFLAGS= $(RPM_OPT_FLAGS) -O3 -DSYSV -fomit-frame-pointer -Wall -fno-strength-reduce | 
|---|
|  | 210 | +# -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE | 
|---|
|  | 211 | LDFLAGS= -s | 
|---|
|  | 212 |  | 
|---|
|  | 213 | # Look where your install program is. | 
|---|
|  | 214 | INSTALL = /usr/bin/install | 
|---|
|  | 215 | -BINDIR = /usr/sbin | 
|---|
|  | 216 | -MANDIR = /usr/man | 
|---|
|  | 217 | + | 
|---|
|  | 218 | +# Destination paths, set prefix=/opt if required | 
|---|
|  | 219 | +BINDIR = $(prefix)/usr/sbin | 
|---|
|  | 220 | +MANDIR = $(prefix)/usr/share/man | 
|---|
|  | 221 |  | 
|---|
|  | 222 | # There is one report that under an all ELF system there may be a need to | 
|---|
|  | 223 | # explicilty link with libresolv.a.  If linking syslogd fails you may wish | 
|---|
|  | 224 | @@ -34,8 +37,9 @@ | 
|---|
|  | 225 | # The following define establishes ownership for the man pages. | 
|---|
|  | 226 | # Avery tells me that there is a difference between Debian and | 
|---|
|  | 227 | # Slackware.  Rather than choose sides I am leaving it up to the user. | 
|---|
|  | 228 | -MAN_OWNER = root | 
|---|
|  | 229 | -# MAN_OWNER = man | 
|---|
|  | 230 | +MAN_USER = root | 
|---|
|  | 231 | +MAN_GROUP = root | 
|---|
|  | 232 | +MAN_PERMS = 644 | 
|---|
|  | 233 |  | 
|---|
|  | 234 | # The following define establishes the name of the pid file for the | 
|---|
|  | 235 | # syslogd daemon.  The library include file (paths.h) defines the | 
|---|
|  | 236 | @@ -116,7 +120,7 @@ | 
|---|
|  | 237 | ${INSTALL} -m 500 -s klogd ${BINDIR}/klogd | 
|---|
|  | 238 |  | 
|---|
|  | 239 | install_man: | 
|---|
|  | 240 | -       ${INSTALL} -o ${MAN_OWNER} -g ${MAN_OWNER} -m 644 sysklogd.8 ${MANDIR}/man8/sysklogd.8 | 
|---|
|  | 241 | -       ${INSTALL} -o ${MAN_OWNER} -g ${MAN_OWNER} -m 644 syslogd.8 ${MANDIR}/man8/syslogd.8 | 
|---|
|  | 242 | -       ${INSTALL} -o ${MAN_OWNER} -g ${MAN_OWNER} -m 644 syslog.conf.5 ${MANDIR}/man5/syslog.conf.5 | 
|---|
|  | 243 | -       ${INSTALL} -o ${MAN_OWNER} -g ${MAN_OWNER} -m 644 klogd.8 ${MANDIR}/man8/klogd.8 | 
|---|
|  | 244 | +       ${INSTALL} -o ${MAN_USER} -g ${MAN_GROUP} -m ${MAN_PERMS} sysklogd.8 ${MANDIR}/man8/sysklogd.8 | 
|---|
|  | 245 | +       ${INSTALL} -o ${MAN_USER} -g ${MAN_GROUP} -m ${MAN_PERMS} syslogd.8 ${MANDIR}/man8/syslogd.8 | 
|---|
|  | 246 | +       ${INSTALL} -o ${MAN_USER} -g ${MAN_GROUP} -m ${MAN_PERMS} syslog.conf.5 ${MANDIR}/man5/syslog.conf.5 | 
|---|
|  | 247 | +       ${INSTALL} -o ${MAN_USER} -g ${MAN_GROUP} -m ${MAN_PERMS} klogd.8 ${MANDIR}/man8/klogd.8 | 
|---|
|  | 248 | diff -Naur sysklogd-1.4.1/module.h sysklogd-20050123/module.h | 
|---|
|  | 249 | --- sysklogd-1.4.1/module.h     1969-12-31 19:00:00.000000000 -0500 | 
|---|
|  | 250 | +++ sysklogd-20050123/module.h  2004-07-27 07:36:10.000000000 -0400 | 
|---|
|  | 251 | @@ -0,0 +1,90 @@ | 
|---|
|  | 252 | +/* | 
|---|
|  | 253 | +    module.h - Miscellaneous module definitions | 
|---|
|  | 254 | +    Copyright (c) 1996 Richard Henderson <rth@tamu.edu> | 
|---|
|  | 255 | +    Copyright (c) 2004 Martin Schulze <joey@infodrom.org> | 
|---|
|  | 256 | + | 
|---|
|  | 257 | +    This file is part of the sysklogd package. | 
|---|
|  | 258 | + | 
|---|
|  | 259 | +    This program is free software; you can redistribute it and/or modify | 
|---|
|  | 260 | +    it under the terms of the GNU General Public License as published by | 
|---|
|  | 261 | +    the Free Software Foundation; either version 2 of the License, or | 
|---|
|  | 262 | +    (at your option) any later version. | 
|---|
|  | 263 | + | 
|---|
|  | 264 | +    This program is distributed in the hope that it will be useful, | 
|---|
|  | 265 | +    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|---|
|  | 266 | +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|---|
|  | 267 | +    GNU General Public License for more details. | 
|---|
|  | 268 | + | 
|---|
|  | 269 | +    You should have received a copy of the GNU General Public License | 
|---|
|  | 270 | +    along with this program; if not, write to the Free Software | 
|---|
|  | 271 | +    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 
|---|
|  | 272 | +*/ | 
|---|
|  | 273 | + | 
|---|
|  | 274 | +/* ChangeLog: | 
|---|
|  | 275 | + * | 
|---|
|  | 276 | + * Wed Mar 31 17:35:01 CEST 2004: Martin Schulze <joey@infodrom.org> | 
|---|
|  | 277 | + *     Created local copy of module.h based on the content of Linux | 
|---|
|  | 278 | + *     2.2 since <linux/module.h> doesn't work anymore with its | 
|---|
|  | 279 | + *     recent content from Linux 2.4/2.6. | 
|---|
|  | 280 | + */ | 
|---|
|  | 281 | + | 
|---|
|  | 282 | +#include <asm/atomic.h> | 
|---|
|  | 283 | + | 
|---|
|  | 284 | +#define MODULE_NAME_LEN 60 | 
|---|
|  | 285 | + | 
|---|
|  | 286 | +struct kernel_sym | 
|---|
|  | 287 | +{ | 
|---|
|  | 288 | +       unsigned long value; | 
|---|
|  | 289 | +       char name[MODULE_NAME_LEN]; | 
|---|
|  | 290 | +}; | 
|---|
|  | 291 | + | 
|---|
|  | 292 | + | 
|---|
|  | 293 | +struct list_head { | 
|---|
|  | 294 | +       struct list_head *next, *prev; | 
|---|
|  | 295 | +}; | 
|---|
|  | 296 | + | 
|---|
|  | 297 | + | 
|---|
|  | 298 | +struct module_info | 
|---|
|  | 299 | +{ | 
|---|
|  | 300 | +       unsigned long addr; | 
|---|
|  | 301 | +       unsigned long size; | 
|---|
|  | 302 | +       unsigned long flags; | 
|---|
|  | 303 | +       long usecount; | 
|---|
|  | 304 | +}; | 
|---|
|  | 305 | + | 
|---|
|  | 306 | + | 
|---|
|  | 307 | +struct module | 
|---|
|  | 308 | +{ | 
|---|
|  | 309 | +       unsigned long size_of_struct;   /* == sizeof(module) */ | 
|---|
|  | 310 | +       struct module *next; | 
|---|
|  | 311 | +       const char *name; | 
|---|
|  | 312 | +       unsigned long size; | 
|---|
|  | 313 | + | 
|---|
|  | 314 | +       union | 
|---|
|  | 315 | +       { | 
|---|
|  | 316 | +               int usecount; | 
|---|
|  | 317 | +               long pad; | 
|---|
|  | 318 | +       } uc;                           /* Needs to keep its size - so says rth */ | 
|---|
|  | 319 | + | 
|---|
|  | 320 | +       unsigned long flags;            /* AUTOCLEAN et al */ | 
|---|
|  | 321 | + | 
|---|
|  | 322 | +       unsigned nsyms; | 
|---|
|  | 323 | +       unsigned ndeps; | 
|---|
|  | 324 | + | 
|---|
|  | 325 | +       struct module_symbol *syms; | 
|---|
|  | 326 | +       struct module_ref *deps; | 
|---|
|  | 327 | +       struct module_ref *refs; | 
|---|
|  | 328 | +       int (*init)(void); | 
|---|
|  | 329 | +       void (*cleanup)(void); | 
|---|
|  | 330 | +       const struct exception_table_entry *ex_table_start; | 
|---|
|  | 331 | +       const struct exception_table_entry *ex_table_end; | 
|---|
|  | 332 | +#ifdef __alpha__ | 
|---|
|  | 333 | +       unsigned long gp; | 
|---|
|  | 334 | +#endif | 
|---|
|  | 335 | +       /* Members past this point are extensions to the basic | 
|---|
|  | 336 | +          module support and are optional.  Use mod_opt_member() | 
|---|
|  | 337 | +          to examine them.  */ | 
|---|
|  | 338 | +       const struct module_persist *persist_start; | 
|---|
|  | 339 | +       const struct module_persist *persist_end; | 
|---|
|  | 340 | +       int (*can_unload)(void); | 
|---|
|  | 341 | +}; | 
|---|
|  | 342 | diff -Naur sysklogd-1.4.1/pidfile.c sysklogd-20050123/pidfile.c | 
|---|
|  | 343 | --- sysklogd-1.4.1/pidfile.c    1998-02-10 17:37:12.000000000 -0500 | 
|---|
|  | 344 | +++ sysklogd-20050123/pidfile.c 2003-09-27 22:38:18.000000000 -0400 | 
|---|
|  | 345 | @@ -87,7 +87,7 @@ | 
|---|
|  | 346 | int fd; | 
|---|
|  | 347 | int pid; | 
|---|
|  | 348 |  | 
|---|
|  | 349 | -  if ( ((fd = open(pidfile, O_RDWR|O_CREAT, 0644)) == -1) | 
|---|
|  | 350 | +  if ( ((fd = open(pidfile, O_RDWR|O_CREAT|O_TRUNC, 0644)) == -1) | 
|---|
|  | 351 | || ((f = fdopen(fd, "r+")) == NULL) ) { | 
|---|
|  | 352 | fprintf(stderr, "Can't open or create %s.\n", pidfile); | 
|---|
|  | 353 | return 0; | 
|---|
|  | 354 | diff -Naur sysklogd-1.4.1/README.1st sysklogd-20050123/README.1st | 
|---|
|  | 355 | --- sysklogd-1.4.1/README.1st   1997-06-02 13:21:39.000000000 -0400 | 
|---|
|  | 356 | +++ sysklogd-20050123/README.1st        2003-09-04 09:22:23.000000000 -0400 | 
|---|
|  | 357 | @@ -1,5 +1,5 @@ | 
|---|
|  | 358 | -Very important information before using version 1.3 | 
|---|
|  | 359 | ---------------------------------------------------- | 
|---|
|  | 360 | +Important information | 
|---|
|  | 361 | +--------------------- | 
|---|
|  | 362 |  | 
|---|
|  | 363 | The included version of syslogd behaves in a slightly different manner | 
|---|
|  | 364 | to the one in former releases.  Please review the following important | 
|---|
|  | 365 | @@ -63,3 +63,10 @@ | 
|---|
|  | 366 | these scripts should remove all old .pid files found in /var/run. | 
|---|
|  | 367 | This will insure that klogd and syslogd start properly even if prior | 
|---|
|  | 368 | executions have been terminated harshly. | 
|---|
|  | 369 | + | 
|---|
|  | 370 | +* Large file support, i.e. support to write to log files that are | 
|---|
|  | 371 | +  larger than 2 GB is not part of syslogd, but a matter of the Glibc | 
|---|
|  | 372 | +  emitting different system calls to the kernel interface.  To support | 
|---|
|  | 373 | +  large files you'll have to compile syslogd with the compiler defines | 
|---|
|  | 374 | +  -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE so that glibc adjusts the | 
|---|
|  | 375 | +  system calls. | 
|---|
|  | 376 | diff -Naur sysklogd-1.4.1/README.linux sysklogd-20050123/README.linux | 
|---|
|  | 377 | --- sysklogd-1.4.1/README.linux 1999-01-18 19:09:12.000000000 -0500 | 
|---|
|  | 378 | +++ sysklogd-20050123/README.linux      2004-07-09 13:22:29.000000000 -0400 | 
|---|
|  | 379 | @@ -40,12 +40,17 @@ | 
|---|
|  | 380 | a useful addition to the software gene pool. | 
|---|
|  | 381 |  | 
|---|
|  | 382 | There is a mailing list covering this package and syslog in general. | 
|---|
|  | 383 | -The lists address is sysklogd@Infodrom.North.DE .  To subscribe send a | 
|---|
|  | 384 | -mail to Majordomo@Infodrom.North.DE with a line "subscribe sysklogd" | 
|---|
|  | 385 | +The lists address is infodrom-sysklogd@lists.infodrom.org .  To subscribe send a | 
|---|
|  | 386 | +mail to majordomo@lists.infodrom.org with a line "subscribe infodrom-sysklogd" | 
|---|
|  | 387 | in the message body. | 
|---|
|  | 388 |  | 
|---|
|  | 389 | -New versions of this package will be available at Joey's ftp server. | 
|---|
|  | 390 | -ftp://ftp.infodrom.north.de/pub/people/joey/sysklogd/ | 
|---|
|  | 391 | +A second mailing list exists as infodrom-sysklogd-cvs@lists.infodrom.org.  Only | 
|---|
|  | 392 | +CVS messages and diffs are distributed there. Whenever new code is added to | 
|---|
|  | 393 | +sysklogd, CVS generates a mail from these changes which will be sent to | 
|---|
|  | 394 | +this list.  Discussions will take place on the first list. | 
|---|
|  | 395 | + | 
|---|
|  | 396 | +The latest version of this software can be found at: | 
|---|
|  | 397 | +http://www.infodrom.org/projects/sysklogd/download.php3 | 
|---|
|  | 398 |  | 
|---|
|  | 399 | Best regards, | 
|---|
|  | 400 |  | 
|---|
|  | 401 | @@ -67,6 +72,6 @@ | 
|---|
|  | 402 |  | 
|---|
|  | 403 | Martin Schulze | 
|---|
|  | 404 | Infodrom Oldenburg | 
|---|
|  | 405 | -joey@linux.de | 
|---|
|  | 406 | +joey@infodrom.org | 
|---|
|  | 407 |  | 
|---|
|  | 408 | -And a host of bug reporters whose contributions cannot be underestimated. | 
|---|
|  | 409 | +And a number of bug reporters whose contributions cannot be underestimated. | 
|---|
|  | 410 | diff -Naur sysklogd-1.4.1/sysklogd.8 sysklogd-20050123/sysklogd.8 | 
|---|
|  | 411 | --- sysklogd-1.4.1/sysklogd.8   2001-03-11 14:35:51.000000000 -0500 | 
|---|
|  | 412 | +++ sysklogd-20050123/sysklogd.8        2004-07-09 13:33:32.000000000 -0400 | 
|---|
|  | 413 | @@ -84,7 +84,7 @@ | 
|---|
|  | 414 | .B MAXFUNIX | 
|---|
|  | 415 | within the syslogd.c source file.  An example for a chroot() daemon is | 
|---|
|  | 416 | described by the people from OpenBSD at | 
|---|
|  | 417 | -http://www.psionic.com/papers/dns.html. | 
|---|
|  | 418 | +<http://www.guides.sk/psionic/dns/>. | 
|---|
|  | 419 | .TP | 
|---|
|  | 420 | .B "\-d" | 
|---|
|  | 421 | Turns on debug mode.  Using this the daemon will not proceed a | 
|---|
|  | 422 | @@ -117,7 +117,8 @@ | 
|---|
|  | 423 | between two \fI-- MARK --\fR lines is 20 minutes.  This can be changed | 
|---|
|  | 424 | with this option.  Setting the | 
|---|
|  | 425 | .I interval | 
|---|
|  | 426 | -to zero turns it off entirely. | 
|---|
|  | 427 | +to zero turns it off entirely.  Depending on other log messages | 
|---|
|  | 428 | +generated these lines may not be written consecutively. | 
|---|
|  | 429 | .TP | 
|---|
|  | 430 | .B "\-n" | 
|---|
|  | 431 | Avoid auto-backgrounding.  This is needed especially if the | 
|---|
|  | 432 | @@ -364,8 +365,10 @@ | 
|---|
|  | 433 |  | 
|---|
|  | 434 | To avoid this in further times no messages that were received from a | 
|---|
|  | 435 | remote host are sent out to another (or the same) remote host | 
|---|
|  | 436 | -anymore.  If there are scenarios where this doesn't make sense, please | 
|---|
|  | 437 | -drop me (Joey) a line. | 
|---|
|  | 438 | +anymore.  If you experience are setup in which this doesn't make | 
|---|
|  | 439 | +sense, please use the | 
|---|
|  | 440 | +.B \-h | 
|---|
|  | 441 | +commandline switch. | 
|---|
|  | 442 |  | 
|---|
|  | 443 | If the remote host is located in the same domain as the host, | 
|---|
|  | 444 | .B syslogd | 
|---|
|  | 445 | diff -Naur sysklogd-1.4.1/syslog.c sysklogd-20050123/syslog.c | 
|---|
|  | 446 | --- sysklogd-1.4.1/syslog.c     2001-03-11 14:35:51.000000000 -0500 | 
|---|
|  | 447 | +++ sysklogd-20050123/syslog.c  2003-08-27 11:56:01.000000000 -0400 | 
|---|
|  | 448 | @@ -47,6 +47,9 @@ | 
|---|
|  | 449 | * Sun Mar 11 20:23:44 CET 2001: Martin Schulze <joey@infodrom.ffis.de> | 
|---|
|  | 450 | *     Use SOCK_DGRAM for loggin, renables it to work. | 
|---|
|  | 451 | * | 
|---|
|  | 452 | + * Wed Aug 27 17:48:16 CEST 2003: Martin Schulze <joey@Infodrom.org> | 
|---|
|  | 453 | + *     Improved patch by Michael Pomraning <mjp@securepipe.com> to | 
|---|
|  | 454 | + *     reconnect klogd to the logger after it went away. | 
|---|
|  | 455 | */ | 
|---|
|  | 456 |  | 
|---|
|  | 457 | #include <sys/types.h> | 
|---|
|  | 458 | @@ -98,6 +101,7 @@ | 
|---|
|  | 459 | register char *p; | 
|---|
|  | 460 | time_t now; | 
|---|
|  | 461 | int fd, saved_errno; | 
|---|
|  | 462 | +       int result; | 
|---|
|  | 463 | char tbuf[2048], fmt_cpy[1024], *stdp = (char *) 0; | 
|---|
|  | 464 |  | 
|---|
|  | 465 | saved_errno = errno; | 
|---|
|  | 466 | @@ -167,7 +171,16 @@ | 
|---|
|  | 467 | } | 
|---|
|  | 468 |  | 
|---|
|  | 469 | /* output the message to the local logger */ | 
|---|
|  | 470 | -       if (write(LogFile, tbuf, cnt + 1) >= 0 || !(LogStat&LOG_CONS)) | 
|---|
|  | 471 | +       result = write(LogFile, tbuf, cnt + 1); | 
|---|
|  | 472 | + | 
|---|
|  | 473 | +       if (result == -1 | 
|---|
|  | 474 | +           && (errno == ECONNRESET || errno == ENOTCONN || errno == ECONNREFUSED)) { | 
|---|
|  | 475 | +               closelog(); | 
|---|
|  | 476 | +               openlog(LogTag, LogStat | LOG_NDELAY, LogFacility); | 
|---|
|  | 477 | +               result = write(LogFile, tbuf, cnt + 1); | 
|---|
|  | 478 | +       } | 
|---|
|  | 479 | + | 
|---|
|  | 480 | +       if (result >= 0 || !(LogStat&LOG_CONS)) | 
|---|
|  | 481 | return; | 
|---|
|  | 482 |  | 
|---|
|  | 483 | /* | 
|---|
|  | 484 | diff -Naur sysklogd-1.4.1/syslog.conf.5 sysklogd-20050123/syslog.conf.5 | 
|---|
|  | 485 | --- sysklogd-1.4.1/syslog.conf.5        1999-08-21 06:49:14.000000000 -0400 | 
|---|
|  | 486 | +++ sysklogd-20050123/syslog.conf.5     2003-05-22 15:31:20.000000000 -0400 | 
|---|
|  | 487 | @@ -64,7 +64,7 @@ | 
|---|
|  | 488 | The | 
|---|
|  | 489 | .I facility | 
|---|
|  | 490 | is one of the following keywords: | 
|---|
|  | 491 | -.BR auth ", " authpriv ", " cron ", " daemon ", " kern ", " lpr ", " | 
|---|
|  | 492 | +.BR auth ", " authpriv ", " cron ", " daemon ", " ftp ", " kern ", " lpr ", " | 
|---|
|  | 493 | .BR mail ", " mark ", " news ", " security " (same as " auth "), " | 
|---|
|  | 494 | .BR syslog ", " user ", " uucp " and " local0 " through " local7 . | 
|---|
|  | 495 | The keyword | 
|---|
|  | 496 | @@ -121,12 +121,21 @@ | 
|---|
|  | 497 |  | 
|---|
|  | 498 | This | 
|---|
|  | 499 | .BR syslogd (8) | 
|---|
|  | 500 | -has a syntax extension to the original BSD source, that makes its use | 
|---|
|  | 501 | +has a syntax extension to the original BSD source, which makes its use | 
|---|
|  | 502 | more intuitively.  You may precede every priority with an equation sign | 
|---|
|  | 503 | -(``='') to specify only this single priority and not any of the | 
|---|
|  | 504 | -above.  You may also (both is valid, too) precede the priority with an | 
|---|
|  | 505 | -exclamation mark (``!'') to ignore all that priorities, either exact | 
|---|
|  | 506 | -this one or this and any higher priority.  If you use both extensions | 
|---|
|  | 507 | +(``='') to specify that | 
|---|
|  | 508 | +.B syslogd | 
|---|
|  | 509 | +should only refer to this single priority and not this priority and | 
|---|
|  | 510 | +all higher priorities. | 
|---|
|  | 511 | + | 
|---|
|  | 512 | +You may also precide the priority with an exclamation mark (``!'') if | 
|---|
|  | 513 | +you want | 
|---|
|  | 514 | +.B syslogd | 
|---|
|  | 515 | +to ignore this priority and all higher priorities. | 
|---|
|  | 516 | +You may even use both, the exclamation mark and the equation sign if | 
|---|
|  | 517 | +you want | 
|---|
|  | 518 | +.B syslogd | 
|---|
|  | 519 | +to ignore only this single priority.  If you use both extensions | 
|---|
|  | 520 | than the exclamation mark must occur before the equation sign, just | 
|---|
|  | 521 | use it intuitively. | 
|---|
|  | 522 |  | 
|---|
|  | 523 | @@ -300,7 +309,7 @@ | 
|---|
|  | 524 | .B syslogd | 
|---|
|  | 525 | log all messages that come with either the | 
|---|
|  | 526 | .BR info " or the " notice | 
|---|
|  | 527 | -facility into the file | 
|---|
|  | 528 | +priority into the file | 
|---|
|  | 529 | .IR /var/log/messages , | 
|---|
|  | 530 | except for all messages that use the | 
|---|
|  | 531 | .B mail | 
|---|
|  | 532 | diff -Naur sysklogd-1.4.1/syslogd.c sysklogd-20050123/syslogd.c | 
|---|
|  | 533 | --- sysklogd-1.4.1/syslogd.c    2001-03-11 14:40:10.000000000 -0500 | 
|---|
|  | 534 | +++ sysklogd-20050123/syslogd.c 2005-01-15 14:13:08.000000000 -0500 | 
|---|
|  | 535 | @@ -441,6 +441,39 @@ | 
|---|
|  | 536 | *     Don't return a closed fd if `-a' is called with a wrong path. | 
|---|
|  | 537 | *     Thanks to Bill Nottingham <notting@redhat.com> for providing | 
|---|
|  | 538 | *     a patch. | 
|---|
|  | 539 | + * Thu Apr 13 05:08:10 CEST 2001: Jon Burgess <Jon_Burgess@eur.3com.com> | 
|---|
|  | 540 | + *     Moved the installation of the signal handler up a little bit | 
|---|
|  | 541 | + *     so it guaranteed to be available when the child is forked, | 
|---|
|  | 542 | + *     hence, fixing a  race condition.  This used to create problems | 
|---|
|  | 543 | + *     with UML and fast machines. | 
|---|
|  | 544 | + * | 
|---|
|  | 545 | + * Sat Apr 17 18:03:05 CEST 2004: Steve Grubb <linux_4ever@yahoo.com> | 
|---|
|  | 546 | + *     Correct memory allocation for for commandline arguments in | 
|---|
|  | 547 | + *     crunch_list(). | 
|---|
|  | 548 | + * | 
|---|
|  | 549 | + * Thu Apr 29 12:38:39 CEST 2004: Solar Designer <solar@openwall.com> | 
|---|
|  | 550 | + *     Applied Openwall paranoia patches to improve crunch_list(). | 
|---|
|  | 551 | + * | 
|---|
|  | 552 | + * Tue May  4 16:47:30 CEST 2004: Solar Designer <solar@openwall.com> | 
|---|
|  | 553 | + *     Ensure that "len" is not placed in a register, and that the | 
|---|
|  | 554 | + *     endtty() signal handler is not installed too early which could | 
|---|
|  | 555 | + *     cause a segmentation fault or worse. | 
|---|
|  | 556 | + * | 
|---|
|  | 557 | + * Tue May  4 16:52:01 CEST 2004: Solar Designer <solar@openwall.com> | 
|---|
|  | 558 | + *     Adjust the size of a variable to prevent a buffer overflow | 
|---|
|  | 559 | + *     should _PATH_DEV ever contain something different than "/dev/". | 
|---|
|  | 560 | + * | 
|---|
|  | 561 | + * Tue Nov  2 20:28:23 CET 2004: Colin Phipps <cph@cph.demon.co.uk> | 
|---|
|  | 562 | + *     Don't block on the network socket, in case a packet gets lost | 
|---|
|  | 563 | + *     between select and recv. | 
|---|
|  | 564 | + * | 
|---|
|  | 565 | + * Sun Nov  7 12:28:47 CET 2004: Martin Schulze <joey@infodrom.org> | 
|---|
|  | 566 | + *     Discard any timestamp information found in received syslog | 
|---|
|  | 567 | + *     messages.  This will affect local messages sent from a | 
|---|
|  | 568 | + *     different timezone. | 
|---|
|  | 569 | + * | 
|---|
|  | 570 | + * Sun Nov  7 13:47:00 CET 2004: Martin Schulze <joey@infodrom.org> | 
|---|
|  | 571 | + *     Remove trailing newline when forwarding messages. | 
|---|
|  | 572 | */ | 
|---|
|  | 573 |  | 
|---|
|  | 574 |  | 
|---|
|  | 575 | @@ -890,11 +923,11 @@ | 
|---|
|  | 576 | dprintf("Checking pidfile.\n"); | 
|---|
|  | 577 | if (!check_pid(PidFile)) | 
|---|
|  | 578 | { | 
|---|
|  | 579 | +                       signal (SIGTERM, doexit); | 
|---|
|  | 580 | if (fork()) { | 
|---|
|  | 581 | /* | 
|---|
|  | 582 | * Parent process | 
|---|
|  | 583 | */ | 
|---|
|  | 584 | -                               signal (SIGTERM, doexit); | 
|---|
|  | 585 | sleep(300); | 
|---|
|  | 586 | /* | 
|---|
|  | 587 | * Not reached unless something major went wrong.  5 | 
|---|
|  | 588 | @@ -992,6 +1025,7 @@ | 
|---|
|  | 589 | (void) signal(SIGCHLD, reapchild); | 
|---|
|  | 590 | (void) signal(SIGALRM, domark); | 
|---|
|  | 591 | (void) signal(SIGUSR1, Debug ? debug_switch : SIG_IGN); | 
|---|
|  | 592 | +       (void) signal(SIGXFSZ, SIG_IGN); | 
|---|
|  | 593 | (void) alarm(TIMERINTVL); | 
|---|
|  | 594 |  | 
|---|
|  | 595 | /* Create a partial message table for all file descriptors. */ | 
|---|
|  | 596 | @@ -1141,13 +1175,13 @@ | 
|---|
|  | 597 | */ | 
|---|
|  | 598 | printchopped(from, line, \ | 
|---|
|  | 599 | i + 2,  finet); | 
|---|
|  | 600 | -                       } else if (i < 0 && errno != EINTR) { | 
|---|
|  | 601 | +                       } else if (i < 0 && errno != EINTR && errno != EAGAIN) { | 
|---|
|  | 602 | dprintf("INET socket error: %d = %s.\n", \ | 
|---|
|  | 603 | errno, strerror(errno)); | 
|---|
|  | 604 | logerror("recvfrom inet"); | 
|---|
|  | 605 | /* should be harmless now that we set | 
|---|
|  | 606 | * BSDCOMPAT on the socket */ | 
|---|
|  | 607 | -                               sleep(10); | 
|---|
|  | 608 | +                               sleep(1); | 
|---|
|  | 609 | } | 
|---|
|  | 610 | } | 
|---|
|  | 611 | #endif | 
|---|
|  | 612 | @@ -1216,6 +1250,7 @@ | 
|---|
|  | 613 | { | 
|---|
|  | 614 | int fd, on = 1; | 
|---|
|  | 615 | struct sockaddr_in sin; | 
|---|
|  | 616 | +       int sockflags; | 
|---|
|  | 617 |  | 
|---|
|  | 618 | fd = socket(AF_INET, SOCK_DGRAM, 0); | 
|---|
|  | 619 | if (fd < 0) { | 
|---|
|  | 620 | @@ -1241,6 +1276,24 @@ | 
|---|
|  | 621 | close(fd); | 
|---|
|  | 622 | return -1; | 
|---|
|  | 623 | } | 
|---|
|  | 624 | +       /* We must not block on the network socket, in case a packet | 
|---|
|  | 625 | +        * gets lost between select and recv, otherise the process | 
|---|
|  | 626 | +        * will stall until the timeout, and other processes trying to | 
|---|
|  | 627 | +        * log will also stall. | 
|---|
|  | 628 | +        */ | 
|---|
|  | 629 | +       if ((sockflags = fcntl(fd, F_GETFL)) != -1) { | 
|---|
|  | 630 | +               sockflags |= O_NONBLOCK; | 
|---|
|  | 631 | +               /* | 
|---|
|  | 632 | +                * SETFL could fail too, so get it caught by the subsequent | 
|---|
|  | 633 | +                * error check. | 
|---|
|  | 634 | +                */ | 
|---|
|  | 635 | +               sockflags = fcntl(fd, F_SETFL, sockflags); | 
|---|
|  | 636 | +       } | 
|---|
|  | 637 | +       if (sockflags == -1) { | 
|---|
|  | 638 | +               logerror("fcntl(O_NONBLOCK), suspending inet"); | 
|---|
|  | 639 | +               close(fd); | 
|---|
|  | 640 | +               return -1; | 
|---|
|  | 641 | +       } | 
|---|
|  | 642 | if (bind(fd, (struct sockaddr *) &sin, sizeof(sin)) < 0) { | 
|---|
|  | 643 | logerror("bind, suspending inet"); | 
|---|
|  | 644 | close(fd); | 
|---|
|  | 645 | @@ -1254,30 +1307,26 @@ | 
|---|
|  | 646 | crunch_list(list) | 
|---|
|  | 647 | char *list; | 
|---|
|  | 648 | { | 
|---|
|  | 649 | -       int count, i; | 
|---|
|  | 650 | +       int i, m, n; | 
|---|
|  | 651 | char *p, *q; | 
|---|
|  | 652 | char **result = NULL; | 
|---|
|  | 653 |  | 
|---|
|  | 654 | p = list; | 
|---|
|  | 655 |  | 
|---|
|  | 656 | /* strip off trailing delimiters */ | 
|---|
|  | 657 | -       while (p[strlen(p)-1] == LIST_DELIMITER) { | 
|---|
|  | 658 | -               count--; | 
|---|
|  | 659 | +       while (*p && p[strlen(p)-1] == LIST_DELIMITER) | 
|---|
|  | 660 | p[strlen(p)-1] = '\0'; | 
|---|
|  | 661 | -       } | 
|---|
|  | 662 | /* cut off leading delimiters */ | 
|---|
|  | 663 | -       while (p[0] == LIST_DELIMITER) { | 
|---|
|  | 664 | -               count--; | 
|---|
|  | 665 | +       while (p[0] == LIST_DELIMITER) | 
|---|
|  | 666 | p++; | 
|---|
|  | 667 | -       } | 
|---|
|  | 668 |  | 
|---|
|  | 669 | -       /* count delimiters to calculate elements */ | 
|---|
|  | 670 | -       for (count=i=0; p[i]; i++) | 
|---|
|  | 671 | -               if (p[i] == LIST_DELIMITER) count++; | 
|---|
|  | 672 | +       /* count delimiters to calculate the number of elements */ | 
|---|
|  | 673 | +       for (n = i = 0; p[i]; i++) | 
|---|
|  | 674 | +               if (p[i] == LIST_DELIMITER) n++; | 
|---|
|  | 675 |  | 
|---|
|  | 676 | -       if ((result = (char **)malloc(sizeof(char *) * count+2)) == NULL) { | 
|---|
|  | 677 | +       if ((result = (char **)malloc(sizeof(char *) * (n + 2))) == NULL) { | 
|---|
|  | 678 | printf ("Sorry, can't get enough memory, exiting.\n"); | 
|---|
|  | 679 | -               exit(0); | 
|---|
|  | 680 | +               exit(1); | 
|---|
|  | 681 | } | 
|---|
|  | 682 |  | 
|---|
|  | 683 | /* | 
|---|
|  | 684 | @@ -1285,30 +1334,28 @@ | 
|---|
|  | 685 | * characters are different from any delimiters, | 
|---|
|  | 686 | * so we don't have to care about this. | 
|---|
|  | 687 | */ | 
|---|
|  | 688 | -       count = 0; | 
|---|
|  | 689 | -       while ((q=strchr(p, LIST_DELIMITER))) { | 
|---|
|  | 690 | -               result[count] = (char *) malloc((q - p + 1) * sizeof(char)); | 
|---|
|  | 691 | -               if (result[count] == NULL) { | 
|---|
|  | 692 | +       m = 0; | 
|---|
|  | 693 | +       while ((q = strchr(p, LIST_DELIMITER)) && m < n) { | 
|---|
|  | 694 | +               result[m] = (char *) malloc((q - p + 1) * sizeof(char)); | 
|---|
|  | 695 | +               if (result[m] == NULL) { | 
|---|
|  | 696 | printf ("Sorry, can't get enough memory, exiting.\n"); | 
|---|
|  | 697 | -                       exit(0); | 
|---|
|  | 698 | +                       exit(1); | 
|---|
|  | 699 | } | 
|---|
|  | 700 | -               strncpy(result[count], p, q - p); | 
|---|
|  | 701 | -               result[count][q - p] = '\0'; | 
|---|
|  | 702 | +               memcpy(result[m], p, q - p); | 
|---|
|  | 703 | +               result[m][q - p] = '\0'; | 
|---|
|  | 704 | p = q; p++; | 
|---|
|  | 705 | -               count++; | 
|---|
|  | 706 | +               m++; | 
|---|
|  | 707 | } | 
|---|
|  | 708 | -       if ((result[count] = \ | 
|---|
|  | 709 | -            (char *)malloc(sizeof(char) * strlen(p) + 1)) == NULL) { | 
|---|
|  | 710 | +       if ((result[m] = strdup(p)) == NULL) { | 
|---|
|  | 711 | printf ("Sorry, can't get enough memory, exiting.\n"); | 
|---|
|  | 712 | -               exit(0); | 
|---|
|  | 713 | +               exit(1); | 
|---|
|  | 714 | } | 
|---|
|  | 715 | -       strcpy(result[count],p); | 
|---|
|  | 716 | -       result[++count] = NULL; | 
|---|
|  | 717 | +       result[++m] = NULL; | 
|---|
|  | 718 |  | 
|---|
|  | 719 | #if 0 | 
|---|
|  | 720 | -       count=0; | 
|---|
|  | 721 | -       while (result[count]) | 
|---|
|  | 722 | -               dprintf ("#%d: %s\n", count, StripDomains[count++]); | 
|---|
|  | 723 | +       m = 0; | 
|---|
|  | 724 | +       while (result[m]) | 
|---|
|  | 725 | +               dprintf ("#%d: %s\n", m, result[m++]); | 
|---|
|  | 726 | #endif | 
|---|
|  | 727 | return result; | 
|---|
|  | 728 | } | 
|---|
|  | 729 | @@ -1548,21 +1595,25 @@ | 
|---|
|  | 730 |  | 
|---|
|  | 731 | /* | 
|---|
|  | 732 | * Check to see if msg looks non-standard. | 
|---|
|  | 733 | +        * | 
|---|
|  | 734 | +        * A message looks like | 
|---|
|  | 735 | +        * Nov 17 11:42:33 CRON[ | 
|---|
|  | 736 | +        * 01234567890123456 | 
|---|
|  | 737 | +        *    ^  ^  ^  ^  ^ | 
|---|
|  | 738 | +        * | 
|---|
|  | 739 | +        * Remote messages are not accompanied by a timestamp. | 
|---|
|  | 740 | +        * Local messages are accompanied by a timestamp (program's timezone) | 
|---|
|  | 741 | */ | 
|---|
|  | 742 | msglen = strlen(msg); | 
|---|
|  | 743 | -       if (msglen < 16 || msg[3] != ' ' || msg[6] != ' ' || | 
|---|
|  | 744 | -           msg[9] != ':' || msg[12] != ':' || msg[15] != ' ') | 
|---|
|  | 745 | -               flags |= ADDDATE; | 
|---|
|  | 746 | - | 
|---|
|  | 747 | -       (void) time(&now); | 
|---|
|  | 748 | -       if (flags & ADDDATE) | 
|---|
|  | 749 | -               timestamp = ctime(&now) + 4; | 
|---|
|  | 750 | -       else { | 
|---|
|  | 751 | -               timestamp = msg; | 
|---|
|  | 752 | +       if (!(msglen < 16 || msg[3] != ' ' || msg[6] != ' ' || | 
|---|
|  | 753 | +           msg[9] != ':' || msg[12] != ':' || msg[15] != ' ')) { | 
|---|
|  | 754 | msg += 16; | 
|---|
|  | 755 | msglen -= 16; | 
|---|
|  | 756 | } | 
|---|
|  | 757 |  | 
|---|
|  | 758 | +       (void) time(&now); | 
|---|
|  | 759 | +       timestamp = ctime(&now) + 4; | 
|---|
|  | 760 | + | 
|---|
|  | 761 | /* extract facility and priority level */ | 
|---|
|  | 762 | if (flags & MARK) | 
|---|
|  | 763 | fac = LOG_NFACILITIES; | 
|---|
|  | 764 | @@ -1771,7 +1822,7 @@ | 
|---|
|  | 765 | dprintf("Not sending message to remote.\n"); | 
|---|
|  | 766 | else { | 
|---|
|  | 767 | f->f_time = now; | 
|---|
|  | 768 | -                       (void) snprintf(line, sizeof(line), "<%d>%s\n", f->f_prevpri, \ | 
|---|
|  | 769 | +                       (void) snprintf(line, sizeof(line), "<%d>%s", f->f_prevpri, \ | 
|---|
|  | 770 | (char *) iov[4].iov_base); | 
|---|
|  | 771 | l = strlen(line); | 
|---|
|  | 772 | if (l > MAXLINE) | 
|---|
|  | 773 | @@ -1815,7 +1866,7 @@ | 
|---|
|  | 774 | v->iov_len = 1; | 
|---|
|  | 775 | } | 
|---|
|  | 776 | again: | 
|---|
|  | 777 | -               /* f->f_file == -1 is an indicator that the we couldn't | 
|---|
|  | 778 | +               /* f->f_file == -1 is an indicator that we couldn't | 
|---|
|  | 779 | open the file at startup. */ | 
|---|
|  | 780 | if (f->f_file == -1) | 
|---|
|  | 781 | break; | 
|---|
|  | 782 | @@ -1852,7 +1903,7 @@ | 
|---|
|  | 783 | errno = e; | 
|---|
|  | 784 | logerror(f->f_un.f_fname); | 
|---|
|  | 785 | } | 
|---|
|  | 786 | -               } else if (f->f_flags & SYNC_FILE) | 
|---|
|  | 787 | +               } else if (f->f_type == F_FILE && (f->f_flags & SYNC_FILE)) | 
|---|
|  | 788 | (void) fsync(f->f_file); | 
|---|
|  | 789 | break; | 
|---|
|  | 790 |  | 
|---|
|  | 791 | @@ -1891,7 +1942,7 @@ | 
|---|
|  | 792 | register struct filed *f; | 
|---|
|  | 793 | struct iovec *iov; | 
|---|
|  | 794 | { | 
|---|
|  | 795 | -       char p[6 + UNAMESZ]; | 
|---|
|  | 796 | +       char p[sizeof (_PATH_DEV) + UNAMESZ]; | 
|---|
|  | 797 | register int i; | 
|---|
|  | 798 | int ttyf, len; | 
|---|
|  | 799 | static int reenter = 0; | 
|---|
|  | 800 | @@ -1899,6 +1950,8 @@ | 
|---|
|  | 801 | struct utmp *uptr; | 
|---|
|  | 802 | char greetings[200]; | 
|---|
|  | 803 |  | 
|---|
|  | 804 | +       (void) &len; | 
|---|
|  | 805 | + | 
|---|
|  | 806 | if (reenter++) | 
|---|
|  | 807 | return; | 
|---|
|  | 808 |  | 
|---|
|  | 809 | @@ -1913,7 +1966,6 @@ | 
|---|
|  | 810 | if (fork() == 0) { | 
|---|
|  | 811 | (void) signal(SIGTERM, SIG_DFL); | 
|---|
|  | 812 | (void) alarm(0); | 
|---|
|  | 813 | -               (void) signal(SIGALRM, endtty); | 
|---|
|  | 814 | #ifndef SYSV | 
|---|
|  | 815 | (void) signal(SIGTTOU, SIG_IGN); | 
|---|
|  | 816 | (void) sigsetmask(0); | 
|---|
|  | 817 | @@ -1929,7 +1981,7 @@ | 
|---|
|  | 818 | /* is this slot used? */ | 
|---|
|  | 819 | if (ut.ut_name[0] == '\0') | 
|---|
|  | 820 | continue; | 
|---|
|  | 821 | -                       if (ut.ut_type == LOGIN_PROCESS) | 
|---|
|  | 822 | +                       if (ut.ut_type != USER_PROCESS) | 
|---|
|  | 823 | continue; | 
|---|
|  | 824 | if (!(strcmp (ut.ut_name,"LOGIN"))) /* paranoia */ | 
|---|
|  | 825 | continue; | 
|---|
|  | 826 | @@ -1959,6 +2011,7 @@ | 
|---|
|  | 827 | iov[1].iov_len = 0; | 
|---|
|  | 828 | } | 
|---|
|  | 829 | if (setjmp(ttybuf) == 0) { | 
|---|
|  | 830 | +                               (void) signal(SIGALRM, endtty); | 
|---|
|  | 831 | (void) alarm(15); | 
|---|
|  | 832 | /* open the terminal */ | 
|---|
|  | 833 | ttyf = open(p, O_WRONLY|O_NOCTTY); | 
|---|