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

Reply via email to