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;
}