Module Name: src Committed By: tsarna Date: Thu Oct 1 16:36:21 UTC 2009
Modified Files: src/etc/defaults: rc.conf src/external/apache2/mDNSResponder/dist/mDNSPosix: PosixDaemon.c mDNSPosix.c src/external/apache2/mDNSResponder/usr.sbin: Makefile.inc Log Message: mdnsd enhancements and fixes: - Enhance the built-in drop-privs support and use it instead of having the rc.conf do it. Avoids log error on startup. From OpenSolaris, with enhancements. - Add dumping of the unicast server list to the DumpStateLog debugging output, a'la Mac OS X. - Fix a locking botch that caused warnings in the log. - Fix FILE leak. From OpenSolaris. To generate a diff of this commit: cvs rdiff -u -r1.108 -r1.109 src/etc/defaults/rc.conf cvs rdiff -u -r1.1.1.1 -r1.2 \ src/external/apache2/mDNSResponder/dist/mDNSPosix/PosixDaemon.c cvs rdiff -u -r1.2 -r1.3 \ src/external/apache2/mDNSResponder/dist/mDNSPosix/mDNSPosix.c cvs rdiff -u -r1.1 -r1.2 \ src/external/apache2/mDNSResponder/usr.sbin/Makefile.inc Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/etc/defaults/rc.conf diff -u src/etc/defaults/rc.conf:1.108 src/etc/defaults/rc.conf:1.109 --- src/etc/defaults/rc.conf:1.108 Tue Sep 29 23:56:27 2009 +++ src/etc/defaults/rc.conf Thu Oct 1 16:36:20 2009 @@ -1,4 +1,4 @@ -# $NetBSD: rc.conf,v 1.108 2009/09/29 23:56:27 tsarna Exp $ +# $NetBSD: rc.conf,v 1.109 2009/10/01 16:36:20 tsarna Exp $ # # /etc/defaults/rc.conf -- # default configuration of /etc/rc.conf @@ -160,7 +160,7 @@ # Networking startup. # -mdnsd=NO mdnsd_user="_mdnsd" +mdnsd=NO ipfilter=NO ipfilter_flags="" # uses /etc/ipf.conf ipnat=NO # uses /etc/ipnat.conf ipfs=NO ipfs_flags="" # save/load ipnat and ipf states Index: src/external/apache2/mDNSResponder/dist/mDNSPosix/PosixDaemon.c diff -u src/external/apache2/mDNSResponder/dist/mDNSPosix/PosixDaemon.c:1.1.1.1 src/external/apache2/mDNSResponder/dist/mDNSPosix/PosixDaemon.c:1.2 --- src/external/apache2/mDNSResponder/dist/mDNSPosix/PosixDaemon.c:1.1.1.1 Tue Sep 29 22:14:13 2009 +++ src/external/apache2/mDNSResponder/dist/mDNSPosix/PosixDaemon.c Thu Oct 1 16:36:20 2009 @@ -101,8 +101,13 @@ #include "mDNSPosix.h" #include "mDNSUNP.h" // For daemon() #include "uds_daemon.h" +#include "DNSCommon.h" #include "PlatformCommon.h" +#ifndef MDNSD_USER +#define MDNSD_USER "nobody" +#endif + #define CONFIG_FILE "/etc/mdnsd.conf" static domainname DynDNSZone; // Default wide-area zone for service registration static domainname DynDNSHostname; @@ -143,8 +148,10 @@ mDNSAddr DynDNSIP; const mDNSAddr dummy = { mDNSAddrType_IPv4, { { { 1, 1, 1, 1 } } } };; mDNS_SetPrimaryInterfaceInfo(m, NULL, NULL, NULL); + mDNS_Lock(m); if (ParseDNSServers(m, uDNS_SERVERS_FILE) < 0) LogMsg("Unable to parse DNS server list. Unicast DNS-SD unavailable"); + mDNS_Unlock(m); ReadDDNSSettingsFromConfFile(m, CONFIG_FILE, &DynDNSHostname, &DynDNSZone, NULL); mDNSPlatformSourceAddrForDest(&DynDNSIP, &dummy); if (DynDNSHostname.c[0]) mDNS_AddDynDNSHostName(m, &DynDNSHostname, NULL, NULL); @@ -175,8 +182,26 @@ mDNSlocal void DumpStateLog(mDNS *const m) // Dump a little log of what we've been up to. { + DNSServer *s; + LogMsg("---- BEGIN STATE LOG ----"); udsserver_info(m); + + LogMsgNoIdent("--------- DNS Servers ----------"); + if (!mDNSStorage.DNSServers) LogMsgNoIdent("<None>"); + else + { + for (s = m->DNSServers; s; s = s->next) + { + LogMsgNoIdent("DNS Server %##s %#a:%d %s", + s->domain.c, &s->addr, mDNSVal16(s->port), + s->teststate == DNSServer_Untested ? "(Untested)" : + s->teststate == DNSServer_Passed ? "" : + s->teststate == DNSServer_Failed ? "(Failed)" : + s->teststate == DNSServer_Disabled ? "(Disabled)" : "(Unknown state)"); + } + } + LogMsg("---- END STATE LOG ----"); } @@ -241,11 +266,21 @@ // Now that we're finished with anything privileged, switch over to running as "nobody" if (mStatus_NoError == err) { - const struct passwd *pw = getpwnam("nobody"); + const struct passwd *pw = getpwnam(MDNSD_USER); if (pw != NULL) + { + setgid(pw->pw_gid); setuid(pw->pw_uid); + } else - LogMsg("WARNING: mdnsd continuing as root because user \"nobody\" does not exist"); +#ifdef MDNSD_NOROOT + { + LogMsg("WARNING: mdnsd exiting because user \""MDNSD_USER"\" does not exist"); + err = mStatus_Invalid; + } +#else + LogMsg("WARNING: mdnsd continuing as root because user \""MDNSD_USER"\" does not exist"); +#endif } if (mStatus_NoError == err) Index: src/external/apache2/mDNSResponder/dist/mDNSPosix/mDNSPosix.c diff -u src/external/apache2/mDNSResponder/dist/mDNSPosix/mDNSPosix.c:1.2 src/external/apache2/mDNSResponder/dist/mDNSPosix/mDNSPosix.c:1.3 --- src/external/apache2/mDNSResponder/dist/mDNSPosix/mDNSPosix.c:1.2 Tue Sep 29 23:56:28 2009 +++ src/external/apache2/mDNSResponder/dist/mDNSPosix/mDNSPosix.c Thu Oct 1 16:36:20 2009 @@ -600,6 +600,7 @@ numOfServers++; } } + fclose(fp); return (numOfServers > 0) ? 0 : -1; } Index: src/external/apache2/mDNSResponder/usr.sbin/Makefile.inc diff -u src/external/apache2/mDNSResponder/usr.sbin/Makefile.inc:1.1 src/external/apache2/mDNSResponder/usr.sbin/Makefile.inc:1.2 --- src/external/apache2/mDNSResponder/usr.sbin/Makefile.inc:1.1 Tue Sep 29 23:56:34 2009 +++ src/external/apache2/mDNSResponder/usr.sbin/Makefile.inc Thu Oct 1 16:36:20 2009 @@ -1,7 +1,9 @@ -# $NetBSD: Makefile.inc,v 1.1 2009/09/29 23:56:34 tsarna Exp $ +# $NetBSD: Makefile.inc,v 1.2 2009/10/01 16:36:20 tsarna Exp $ .include <bsd.own.mk> .include "${.PARSEDIR}/../Makefile.inc" +CPPFLAGS+= -DMDNSD_NOROOT -DMDNSD_USER=\"_mdnsd\" + BINDIR?= /usr/sbin