From 9f0efa6611d010bf2fb88a2f6a583c4f32fd89ac Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 6 Dec 2006 01:24:02 +0000 Subject: [PATCH] * 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). --- configure.ac | 1 + src/Makefile.am | 3 ++- src/libstore/build.cc | 7 ++++--- src/nix-setuid-helper/Makefile.am | 8 ++++++++ src/nix-setuid-helper/main.cc | 3 +++ 5 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 src/nix-setuid-helper/Makefile.am create mode 100644 src/nix-setuid-helper/main.cc diff --git a/configure.ac b/configure.ac index 5491eaa79..fb2228a6f 100644 --- a/configure.ac +++ b/configure.ac @@ -271,6 +271,7 @@ AC_CONFIG_FILES([Makefile src/nix-instantiate/Makefile src/nix-env/Makefile src/nix-worker/Makefile + src/nix-setuid-helper/Makefile src/nix-log2xml/Makefile src/bsdiff-4.3/Makefile scripts/Makefile diff --git a/src/Makefile.am b/src/Makefile.am index 92a7b6e15..971f7d9d1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,4 +1,5 @@ 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 diff --git a/src/libstore/build.cc b/src/libstore/build.cc index cc09a101f..0ecd8bb10 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -454,11 +454,12 @@ static void killUser(uid_t uid) if (kill(-1, SIGKILL) == 0) break; if (errno == ESRCH) break; /* no more processes */ 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) { - 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(0); @@ -466,7 +467,7 @@ static void killUser(uid_t uid) /* parent */ 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 no processes left running under `uid', but there is no portable diff --git a/src/nix-setuid-helper/Makefile.am b/src/nix-setuid-helper/Makefile.am new file mode 100644 index 000000000..afff2bde7 --- /dev/null +++ b/src/nix-setuid-helper/Makefile.am @@ -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 diff --git a/src/nix-setuid-helper/main.cc b/src/nix-setuid-helper/main.cc new file mode 100644 index 000000000..ff70fa656 --- /dev/null +++ b/src/nix-setuid-helper/main.cc @@ -0,0 +1,3 @@ +int main(int argc, char * * argv) +{ +}