1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-12-21 04:06:46 +00:00
freebsd-ports/net/pxe/files/patch-pxe.cc
Dmitry Marakasov 0492c912a2 - Add LICENSE
- Switch to options helpers
- Cosmetic fixes
2016-09-04 09:01:28 +00:00

102 lines
2.8 KiB
C++

--- pxe.cc.orig 2003-02-02 12:39:26 UTC
+++ pxe.cc
@@ -208,6 +208,31 @@ int StartPxeService(const char *configfi
return(retval);
}
+/******************************************************************************
+ * DoSetUID - set uid and gid *
+ ******************************************************************************/
+void DoSetUID()
+{
+ // set the UID/GID to a low user
+#ifndef NO_SUID
+ struct passwd *pw;
+ pw = getpwnam(SETUID);
+
+ if(NULL == pw)
+ std::cout << "Unable to find passwd entry for " << SETUID
+ << ", continuing with user id " << getuid() << "\n";
+ else
+ {
+ if((-1 == setgid(pw->pw_gid)) || (-1 == setegid(pw->pw_gid)))
+ std::cout << "Unable to change group id, continuing with group id "
+ << getgid() << "\n";
+ if((-1 == setuid(pw->pw_uid)) || (-1 == seteuid(pw->pw_uid)))
+ std::cout << "Unable to change user id, continuing with user id "
+ << getuid() << "\n";
+ }
+#endif
+}
+
/******************************************************************************
* main - kick things off and do cool things *
@@ -247,6 +272,15 @@ int main(int argc, char **argv)
}
debug.close();
+ // check to see if the daemon is already running
+ chk = open(LOCKFILE, O_WRONLY|O_CREAT|O_EXCL, 0644);
+ if(-1 == chk)
+ {
+ std::cerr << "PXE daemon already running, or left-over pid file " << LOCKFILE << " exists?\n";
+ std::cerr << "Aborting startup.\n";
+ return(-1);
+ }
+
// redirect the file descriptors
if (0 == _debug) {
debug.open("/dev/null", std::ios::out);
@@ -258,34 +292,6 @@ int main(int argc, char **argv)
debug.close();
}
-
- // set the UID/GID to a low user
-#ifndef NO_SUID
- struct passwd *pw;
- pw = getpwnam(SETUID);
-
- if(NULL == pw)
- std::cout << "Unable to find passwd entry for " << SETUID
- << ", continuing with user id " << getuid() << "\n";
- else
- {
- if((-1 == setgid(pw->pw_gid)) || (-1 == setegid(pw->pw_gid)))
- std::cout << "Unable to change group id, continuing with group id "
- << getgid() << "\n";
- if((-1 == setuid(pw->pw_uid)) || (-1 == seteuid(pw->pw_uid)))
- std::cout << "Unable to change user id, continuing with user id "
- << getuid() << "\n";
- }
-#endif
-
- // check to see if the daemon is already running
- chk = open(LOCKFILE, O_WRONLY|O_CREAT|O_EXCL, 0644);
- if(-1 == chk)
- {
- std::cerr << "PXE daemon already running\n";
- return(-1);
- }
-
// if not in debug mode, fork and go
if (0 == _debug) {
signal(SIGCHLD, SIG_IGN);
@@ -320,6 +326,7 @@ int main(int argc, char **argv)
}
close(chk);
+ DoSetUID;
StartPxeService(configfile);
exit(0);
@@ -328,6 +335,7 @@ int main(int argc, char **argv)
}
} else { // debug
+ DoSetUID;
StartPxeService(configfile);
}