| @@ -40,26 +40,30 @@ | | | @@ -40,26 +40,30 @@ |
40 | | | 40 | |
41 | #if __APPLE__ | | 41 | #if __APPLE__ |
42 | #undef daemon | | 42 | #undef daemon |
43 | extern int daemon(int, int); | | 43 | extern 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" |
54 | static domainname DynDNSZone; // Default wide-area zone for service registration | | 58 | static domainname DynDNSZone; // Default wide-area zone for service registration |
55 | static domainname DynDNSHostname; | | 59 | static domainname DynDNSHostname; |
56 | | | 60 | |
57 | #define RR_CACHE_SIZE 500 | | 61 | #define RR_CACHE_SIZE 500 |
58 | static CacheEntity gRRCache[RR_CACHE_SIZE]; | | 62 | static CacheEntity gRRCache[RR_CACHE_SIZE]; |
59 | static mDNS_PlatformSupport PlatformStorage; | | 63 | static mDNS_PlatformSupport PlatformStorage; |
60 | | | 64 | |
61 | mDNSlocal void mDNS_StatusCallback(mDNS *const m, mStatus result) | | 65 | mDNSlocal 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 |