* Move setuidCleanup() to libutil.
This commit is contained in:
@@ -17,6 +17,9 @@
|
||||
#include "util.hh"
|
||||
|
||||
|
||||
extern char * * environ;
|
||||
|
||||
|
||||
namespace nix {
|
||||
|
||||
|
||||
@@ -818,6 +821,19 @@ void quickExit(int status)
|
||||
}
|
||||
|
||||
|
||||
void setuidCleanup()
|
||||
{
|
||||
/* Don't trust the environment. */
|
||||
environ = 0;
|
||||
|
||||
/* Make sure that file descriptors 0, 1, 2 are open. */
|
||||
for (int fd = 0; fd <= 2; ++fd) {
|
||||
struct stat st;
|
||||
if (fstat(fd, &st) == -1) abort();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
@@ -237,6 +237,10 @@ string runProgram(Path program);
|
||||
Cygwin, _exit() doesn't seem to do the right thing.) */
|
||||
void quickExit(int status);
|
||||
|
||||
/* Common initialisation for setuid programs: clear the environment,
|
||||
sanitize file handles 0, 1 and 2. */
|
||||
void setuidCleanup();
|
||||
|
||||
|
||||
/* User interruption. */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user