- if(!netname && (netname = getenv("NETNAME")))
- netname = xstrdup(netname);
-
- /* netname "." is special: a "top-level name" */
-
- if(netname && (!*netname || !strcmp(netname, "."))) {
- free(netname);
- netname = NULL;
- }
-
- if(netname && (strpbrk(netname, "\\/") || *netname == '.')) {
- fprintf(stderr, "Invalid character in netname!\n");
- return false;
- }
-
- return true;
-}
-
-static bool drop_privs(void) {
-#ifndef HAVE_MINGW
- uid_t uid = 0;
- if (switchuser) {
- struct passwd *pw = getpwnam(switchuser);
- if (!pw) {
- logger(DEBUG_ALWAYS, LOG_ERR, "unknown user `%s'", switchuser);
- return false;
- }
- uid = pw->pw_uid;
- if (initgroups(switchuser, pw->pw_gid) != 0 ||
- setgid(pw->pw_gid) != 0) {
- logger(DEBUG_ALWAYS, LOG_ERR, "System call `%s' failed: %s",
- "initgroups", strerror(errno));
- return false;
- }
-#ifndef __ANDROID__
-// Not supported in android NDK
- endgrent();
- endpwent();
-#endif
- }
- if (do_chroot) {
- tzset(); /* for proper timestamps in logs */
- if (chroot(confbase) != 0 || chdir("/") != 0) {
- logger(DEBUG_ALWAYS, LOG_ERR, "System call `%s' failed: %s",
- "chroot", strerror(errno));
- return false;
- }
- free(confbase);
- confbase = xstrdup("");
- }
- if (switchuser)
- if (setuid(uid) != 0) {
- logger(DEBUG_ALWAYS, LOG_ERR, "System call `%s' failed: %s",
- "setuid", strerror(errno));
- return false;
- }
-#endif