On Tue, Aug 19, 2014 at 01:59:42AM +0200, Alexander Bluhm wrote: > I will split this diff into smaller parts to make review and > discussion easier.
The exit codes in privsep.c seem to be the wrong way around. Fatal errors should exit with 1, and regular shutdown should result in exit with 0. I have written a syslogd regression test that gets confused by the current behavior. ok? bluhm Index: usr.sbin/syslogd/privsep.c =================================================================== RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/syslogd/privsep.c,v retrieving revision 1.34 diff -u -p -u -p -r1.34 privsep.c --- usr.sbin/syslogd/privsep.c 23 Nov 2008 04:29:42 -0000 1.34 +++ usr.sbin/syslogd/privsep.c 19 Aug 2014 00:07:08 -0000 @@ -210,7 +210,7 @@ priv_init(char *conf, int numeric, int l /* Expecting: length, path */ must_read(socks[0], &path_len, sizeof(size_t)); if (path_len == 0 || path_len > sizeof(path)) - _exit(0); + _exit(1); must_read(socks[0], &path, path_len); path[path_len - 1] = '\0'; check_tty_name(path, path_len); @@ -229,7 +229,7 @@ priv_init(char *conf, int numeric, int l /* Expecting: length, path */ must_read(socks[0], &path_len, sizeof(size_t)); if (path_len == 0 || path_len > sizeof(path)) - _exit(0); + _exit(1); must_read(socks[0], &path, path_len); path[path_len - 1] = '\0'; check_log_name(path, path_len); @@ -294,13 +294,13 @@ priv_init(char *conf, int numeric, int l /* Expecting: len, hostname, len, servname */ must_read(socks[0], &hostname_len, sizeof(size_t)); if (hostname_len == 0 || hostname_len > sizeof(hostname)) - _exit(0); + _exit(1); must_read(socks[0], &hostname, hostname_len); hostname[hostname_len - 1] = '\0'; must_read(socks[0], &servname_len, sizeof(size_t)); if (servname_len == 0 || servname_len > sizeof(servname)) - _exit(0); + _exit(1); must_read(socks[0], &servname, servname_len); servname[servname_len - 1] = '\0'; @@ -327,7 +327,7 @@ priv_init(char *conf, int numeric, int l /* Expecting: length, address, address family */ must_read(socks[0], &addr_len, sizeof(int)); if (addr_len <= 0 || addr_len > sizeof(hostname)) - _exit(0); + _exit(1); must_read(socks[0], hostname, addr_len); must_read(socks[0], &addr_af, sizeof(int)); hp = gethostbyaddr(hostname, addr_len, addr_af); @@ -362,7 +362,7 @@ priv_init(char *conf, int numeric, int l execvp(argv[0], argv); } unlink(_PATH_LOGPID); - _exit(1); + _exit(0); } static int @@ -797,7 +797,7 @@ must_read(int fd, void *buf, size_t n) if (errno == EINTR || errno == EAGAIN) continue; case 0: - _exit(0); + _exit(1); default: pos += res; } @@ -819,7 +819,7 @@ must_write(int fd, void *buf, size_t n) if (errno == EINTR || errno == EAGAIN) continue; case 0: - _exit(0); + _exit(1); default: pos += res; }