aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2006-12-07 18:51:11 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2006-12-07 18:51:11 +0000
commitd03f0d411740aebd5b27e5a1ac57d8533843ff6b (patch)
tree37df43478b7e5470ffb2dccce30346f21c9f93a6 /src
parentc3286ec020dfa20edcad6ad3cea519546e5207f1 (diff)
* Check for lchown.
Diffstat (limited to 'src')
-rw-r--r--src/nix-setuid-helper/main.cc7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/nix-setuid-helper/main.cc b/src/nix-setuid-helper/main.cc
index 26cdc73b7..168cff40a 100644
--- a/src/nix-setuid-helper/main.cc
+++ b/src/nix-setuid-helper/main.cc
@@ -10,6 +10,7 @@
#include <iostream>
#include <vector>
+#include "config.h"
#include "util.hh"
using namespace nix;
@@ -46,8 +47,14 @@ static void secureChown(uid_t uidFrom, gid_t gidFrom,
assert(uidTo != 0 && gidTo != 0);
+#if HAVE_LCHOWN
if (lchown(path.c_str(), uidTo, gidTo) == -1)
throw Error(error);
+#else
+ if (!S_ISLNK(st.st_mode) &&
+ chown(path.c_str(), uidTo, gidTo) == -1)
+ throw Error(error);
+#endif
if (S_ISDIR(st.st_mode)) {
Strings names = readDirectory(path);