guy@gorodish.UUCP (02/24/87)
Index: etc/syslogd.c 4.3BSD
Description:
When "syslogd" rereads the configuration file after it is sent
a SIGHUP, any errors it detects before setting up the destination
for "syslog" errors get droped on the floor.
Repeat-By:
Put an illegal line at the front of "/etc/syslog.conf" and send
a SIGHUP to "syslogd". Note that the complaints don't appear,
but do appear if you kill "syslogd" off and restart it.
Fix:
This fixes the problem by making "init()" clear "Initialized"
just before it closes all the log files. It also fixes a couple
of places where "errno" wasn't cleared before calling "logerror",
so that a misleading system error message isn't appended to the
error message, renames the variable "sun" to "s_un" so that
it will at least build on a Sun, and replaces the call to the
ancient obsolete deprecated "strcpyn" routine from 32V with a
call to "strncpy".
*** /arch/4.3/usr/src/etc/syslogd.c Mon May 26 22:03:20 1986
--- syslogd.c Mon Feb 23 17:06:47 1987
***************
*** 154,160 ****
register int i;
register char *p;
int funix, finet, inetm, fklog, klogm, len;
! struct sockaddr_un sun, fromunix;
struct sockaddr_in sin, frominet;
FILE *fp;
char line[MSG_BSIZE + 1];
--- 154,160 ----
register int i;
register char *p;
int funix, finet, inetm, fklog, klogm, len;
! struct sockaddr_un s_un, fromunix;
struct sockaddr_in sin, frominet;
FILE *fp;
char line[MSG_BSIZE + 1];
***************
*** 216,226 ****
(void) alarm(MarkInterval * 60 / MARKCOUNT);
(void) unlink(LogName);
! sun.sun_family = AF_UNIX;
! (void) strncpy(sun.sun_path, LogName, sizeof sun.sun_path);
funix = socket(AF_UNIX, SOCK_DGRAM, 0);
! if (funix < 0 || bind(funix, (struct sockaddr *) &sun,
! sizeof(sun.sun_family)+strlen(sun.sun_path)) < 0 ||
chmod(LogName, 0666) < 0) {
(void) sprintf(line, "cannot create %s", LogName);
logerror(line);
--- 216,226 ----
(void) alarm(MarkInterval * 60 / MARKCOUNT);
(void) unlink(LogName);
! s_un.sun_family = AF_UNIX;
! (void) strncpy(s_un.sun_path, LogName, sizeof s_un.sun_path);
funix = socket(AF_UNIX, SOCK_DGRAM, 0);
! if (funix < 0 || bind(funix, (struct sockaddr *) &s_un,
! sizeof(s_un.sun_family)+strlen(s_un.sun_path)) < 0 ||
chmod(LogName, 0666) < 0) {
(void) sprintf(line, "cannot create %s", LogName);
logerror(line);
***************
*** 659,665 ****
/* compute the device name */
p = "/dev/12345678";
! strcpyn(&p[5], ut.ut_line, UNAMESZ);
/*
* Might as well fork instead of using nonblocking I/O
--- 659,665 ----
/* compute the device name */
p = "/dev/12345678";
! strncpy(&p[5], ut.ut_line, UNAMESZ);
/*
* Might as well fork instead of using nonblocking I/O
***************
*** 770,775 ****
--- 770,776 ----
dprintf("syslogd: going down on signal %d\n", sig);
flushmsg();
(void) sprintf(buf, "going down on signal %d", sig);
+ errno = 0;
logerror(buf);
}
(void) unlink(LogName);
***************
*** 796,801 ****
--- 797,803 ----
/*
* Close all open log files.
*/
+ Initialized = 0;
for (f = Files; f < &Files[NLOGS]; f++) {
if (f->f_type == F_FILE || f->f_type == F_TTY)
(void) close(f->f_file);
***************
*** 923,928 ****
--- 925,932 ----
char buf[MAXLINE];
dprintf("cfline(%s)\n", line);
+
+ errno = 0; /* keep sys_errlist stuff out of logerror messages */
/* clear out file entry */
bzero((char *) f, sizeof *f);