Subject: Re: bin/34979: -current libc causes boot failure
To: Scott Ellis <scotte@warped.com>
From: Christos Zoulas <christos@zoulas.com>
List: netbsd-bugs
Date: 11/11/2006 17:24:26
On Nov 11,  2:03pm, scotte@warped.com (Scott Ellis) wrote:
-- Subject: Re: bin/34979: -current libc causes boot failure

| This appears to be related to syslogd, as setting syslogd=NO in rc.conf 
| allows the system to boot and be more-or-less fully functional.
| 
| This was deduced by noting:
| 
| Enabling pf firewall.
| Building databases...
| Starting syslogd.
| Starting pflogd.
| Nov 11 13:35:59 pflogd[570]: [priv]: msg PRIV_OPEN_LOG received
| Starting named.
| Starting named.
| Stopped in pid 632.1 (syslogd) at       netbsd:cpu_Debugger+0x5: 
| leave
| db> step
| Stopped in pid 632.1 (syslogd) at       netbsd:cpu_Debugger+0x6:        ret
| db>
| 
| Basically the pflogd message isn't set to syslog like it was previously, 
| and dropping to the debugger shows that syslogd is the current process.

Something seems to be going wrong with the way we open unix sockets? Try
this:

Index: syslog.c
===================================================================
RCS file: /cvsroot/src/lib/libc/gen/syslog.c,v
retrieving revision 1.37
diff -u -u -r1.37 syslog.c
--- syslog.c	3 Nov 2006 20:18:49 -0000	1.37
+++ syslog.c	11 Nov 2006 22:23:33 -0000
@@ -366,12 +366,12 @@
 	/* AF_UNIX address of local logger */
 	static const struct sockaddr_un sun = {
 		.sun_family = AF_LOCAL,
-		.sun_len = sizeof(sun),
+		.sun_len = 0,
 		.sun_path = _PATH_LOG,
 	};
 
 	if (data->log_file == -1 || fcntl(data->log_file, F_GETFL, 0) == -1) {
-		if ((data->log_file = socket(AF_UNIX, SOCK_DGRAM, 0)) == -1)
+		if ((data->log_file = socket(AF_LOCAL, SOCK_DGRAM, 0)) == -1)
 			return;
 		(void)fcntl(data->log_file, F_SETFD, FD_CLOEXEC);
 		data->connected = 0;
@@ -379,7 +379,7 @@
 	if (!data->connected) {
 		if (connect(data->log_file,
 		    (const struct sockaddr *)(const void *)&sun,
-		    sizeof(sun)) == -1) {
+		    SUN_LEN(&sun)) == -1) {
 			(void)close(data->log_file);
 			data->log_file = -1;
  		} else