diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-12-07 18:51:11 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-12-07 18:51:11 +0000 |
commit | d03f0d411740aebd5b27e5a1ac57d8533843ff6b (patch) | |
tree | 37df43478b7e5470ffb2dccce30346f21c9f93a6 /src/nix-setuid-helper/main.cc | |
parent | c3286ec020dfa20edcad6ad3cea519546e5207f1 (diff) | |
download | guix-d03f0d411740aebd5b27e5a1ac57d8533843ff6b.tar.gz |
* Check for lchown.
Diffstat (limited to 'src/nix-setuid-helper/main.cc')
-rw-r--r-- | src/nix-setuid-helper/main.cc | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/nix-setuid-helper/main.cc b/src/nix-setuid-helper/main.cc index 26cdc73b79..168cff40a3 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); |