* Start of the setuid helper (the program that performs the operations

that have to be done as root: running builders under different uids,
  changing ownership of build results, and deleting paths in the store
  with the wrong ownership).
This commit is contained in:
Eelco Dolstra 2006-12-06 01:24:02 +00:00
parent 2b558843a2
commit 9f0efa6611
5 changed files with 18 additions and 4 deletions

View file

@ -271,6 +271,7 @@ AC_CONFIG_FILES([Makefile
src/nix-instantiate/Makefile src/nix-instantiate/Makefile
src/nix-env/Makefile src/nix-env/Makefile
src/nix-worker/Makefile src/nix-worker/Makefile
src/nix-setuid-helper/Makefile
src/nix-log2xml/Makefile src/nix-log2xml/Makefile
src/bsdiff-4.3/Makefile src/bsdiff-4.3/Makefile
scripts/Makefile scripts/Makefile

View file

@ -1,4 +1,5 @@
SUBDIRS = bin2c boost libutil libstore libmain nix-store nix-hash \ SUBDIRS = bin2c boost libutil libstore libmain nix-store nix-hash \
libexpr nix-instantiate nix-env nix-worker nix-log2xml bsdiff-4.3 libexpr nix-instantiate nix-env nix-worker nix-setuid-helper \
nix-log2xml bsdiff-4.3
EXTRA_DIST = aterm-helper.pl EXTRA_DIST = aterm-helper.pl

View file

@ -454,11 +454,12 @@ static void killUser(uid_t uid)
if (kill(-1, SIGKILL) == 0) break; if (kill(-1, SIGKILL) == 0) break;
if (errno == ESRCH) break; /* no more processes */ if (errno == ESRCH) break; /* no more processes */
if (errno != EINTR) if (errno != EINTR)
throw SysError(format("cannot kill processes for UID `%1%'") % uid); throw SysError(format("cannot kill processes for uid `%1%'") % uid);
} }
} catch (std::exception & e) { } catch (std::exception & e) {
std::cerr << format("killing build users: %1%\n") % e.what(); std::cerr << format("killing processes beloging to uid `%1%': %1%\n")
% uid % e.what();
quickExit(1); quickExit(1);
} }
quickExit(0); quickExit(0);
@ -466,7 +467,7 @@ static void killUser(uid_t uid)
/* parent */ /* parent */
if (pid.wait(true) != 0) if (pid.wait(true) != 0)
throw Error(format("cannot kill processes for UID `%1%'") % uid); throw Error(format("cannot kill processes for uid `%1%'") % uid);
/* !!! We should really do some check to make sure that there are /* !!! We should really do some check to make sure that there are
no processes left running under `uid', but there is no portable no processes left running under `uid', but there is no portable

View file

@ -0,0 +1,8 @@
libexec_PROGRAMS = nix-setuid-helper
nix_setuid_helper_SOURCES = main.cc
nix_setuid_helper_LDADD = ../libutil/libutil.la \
../boost/format/libformat.la ${aterm_lib}
AM_CXXFLAGS = \
-I$(srcdir)/.. $(aterm_include) -I$(srcdir)/../libutil

View file

@ -0,0 +1,3 @@
int main(int argc, char * * argv)
{
}