Sat May 27 17:58:59 2023 UTC ()
reapply changes for the built-in drop-privs support by tsarna.
this commit doesn't reapply "dumping of the unicast server list
to the DumpStateLog debugging output" enhancement.
It doesn't build anymore, no idea how to rewrite.
Should fix PR 57442. Needs pull-ups for netbsd-9, netbsd-10.


(andvar)
diff -r1.14 -r1.15 src/external/apache2/mDNSResponder/dist/mDNSPosix/PosixDaemon.c

cvs diff -r1.14 -r1.15 src/external/apache2/mDNSResponder/dist/mDNSPosix/PosixDaemon.c (expand / switch to unified diff)

--- src/external/apache2/mDNSResponder/dist/mDNSPosix/PosixDaemon.c 2020/07/22 19:05:14 1.14
+++ src/external/apache2/mDNSResponder/dist/mDNSPosix/PosixDaemon.c 2023/05/27 17:58:58 1.15
@@ -40,26 +40,30 @@ @@ -40,26 +40,30 @@
40 40
41#if __APPLE__ 41#if __APPLE__
42#undef daemon 42#undef daemon
43extern int daemon(int, int); 43extern int daemon(int, int);
44#endif 44#endif
45 45
46#include "mDNSEmbeddedAPI.h" 46#include "mDNSEmbeddedAPI.h"
47#include "mDNSPosix.h" 47#include "mDNSPosix.h"
48#include "mDNSUNP.h" // For daemon() 48#include "mDNSUNP.h" // For daemon()
49#include "uds_daemon.h" 49#include "uds_daemon.h"
50#include "PlatformCommon.h" 50#include "PlatformCommon.h"
51#include "DNSCommon.h" 51#include "DNSCommon.h"
52 52
 53#ifndef MDNSD_USER
 54#define MDNSD_USER "nobody"
 55#endif
 56
53#define CONFIG_FILE "/etc/mdnsd.conf" 57#define CONFIG_FILE "/etc/mdnsd.conf"
54static domainname DynDNSZone; // Default wide-area zone for service registration 58static domainname DynDNSZone; // Default wide-area zone for service registration
55static domainname DynDNSHostname; 59static domainname DynDNSHostname;
56 60
57#define RR_CACHE_SIZE 500 61#define RR_CACHE_SIZE 500
58static CacheEntity gRRCache[RR_CACHE_SIZE]; 62static CacheEntity gRRCache[RR_CACHE_SIZE];
59static mDNS_PlatformSupport PlatformStorage; 63static mDNS_PlatformSupport PlatformStorage;
60 64
61mDNSlocal void mDNS_StatusCallback(mDNS *const m, mStatus result) 65mDNSlocal void mDNS_StatusCallback(mDNS *const m, mStatus result)
62{ 66{
63 (void)m; // Unused 67 (void)m; // Unused
64 if (result == mStatus_NoError) 68 if (result == mStatus_NoError)
65 { 69 {
@@ -180,31 +184,41 @@ int main(int argc, char **argv) @@ -180,31 +184,41 @@ int main(int argc, char **argv)
180 LogInfo("%s starting", mDNSResponderVersionString); 184 LogInfo("%s starting", mDNSResponderVersionString);
181 185
182 err = mDNS_Init(&mDNSStorage, &PlatformStorage, gRRCache, RR_CACHE_SIZE, mDNS_Init_AdvertiseLocalAddresses, 186 err = mDNS_Init(&mDNSStorage, &PlatformStorage, gRRCache, RR_CACHE_SIZE, mDNS_Init_AdvertiseLocalAddresses,
183 mDNS_StatusCallback, mDNS_Init_NoInitCallbackContext); 187 mDNS_StatusCallback, mDNS_Init_NoInitCallbackContext);
184 188
185 if (mStatus_NoError == err) 189 if (mStatus_NoError == err)
186 err = udsserver_init(mDNSNULL, 0); 190 err = udsserver_init(mDNSNULL, 0);
187 191
188 Reconfigure(&mDNSStorage); 192 Reconfigure(&mDNSStorage);
189 193
190 // Now that we're finished with anything privileged, switch over to running as "nobody" 194 // Now that we're finished with anything privileged, switch over to running as "nobody"
191 if (mStatus_NoError == err) 195 if (mStatus_NoError == err)
192 { 196 {
193 const struct passwd *pw = getpwnam("nobody"); 197 const struct passwd *pw = getpwnam(MDNSD_USER);
194 if (pw != NULL) 198 if (pw != NULL)
 199 {
 200 setgid(pw->pw_gid);
195 setuid(pw->pw_uid); 201 setuid(pw->pw_uid);
 202 }
196 else 203 else
197 LogMsg("WARNING: mdnsd continuing as root because user \"nobody\" does not exist"); 204#ifdef MDNSD_NOROOT
 205 {
 206 LogMsg("WARNING: mdnsd exiting because user \""MDNSD_USER"\" does not exist");
 207 err = mStatus_Invalid;
 208 }
 209#else
 210 LogMsg("WARNING: mdnsd continuing as root because user \""MDNSD_USER"\" does not exist");
 211#endif
198 } 212 }
199 213
200 if (mStatus_NoError == err) 214 if (mStatus_NoError == err)
201 err = MainLoop(&mDNSStorage); 215 err = MainLoop(&mDNSStorage);
202 216
203 LogInfo("%s stopping", mDNSResponderVersionString); 217 LogInfo("%s stopping", mDNSResponderVersionString);
204 218
205 mDNS_Close(&mDNSStorage); 219 mDNS_Close(&mDNSStorage);
206 220
207 if (udsserver_exit() < 0) 221 if (udsserver_exit() < 0)
208 LogMsg("ExitCallback: udsserver_exit failed"); 222 LogMsg("ExitCallback: udsserver_exit failed");
209 223
210 #if MDNS_DEBUGMSGS > 0 224 #if MDNS_DEBUGMSGS > 0