Build-time config of newuidmap and newgidmap paths
authorArtur Cygan <arczicygan@gmail.com>
Mon, 22 Jun 2020 11:42:22 +0000 (13:42 +0200)
committerArtur Cygan <arczicygan@gmail.com>
Mon, 22 Jun 2020 11:42:22 +0000 (13:42 +0200)
Makefile
user.cc

index 27964533af5d650b40373e0a068d2d512c7b24ed..b8b857d4d5ec25185e8521a528416520a11f2332 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -31,7 +31,7 @@ COMMON_FLAGS += -O2 -c \
        -Wall -Wextra -Werror \
        -Ikafel/include
 
-CXXFLAGS += $(COMMON_FLAGS) $(shell pkg-config --cflags protobuf) \
+CXXFLAGS += $(USER_DEFINES) $(COMMON_FLAGS) $(shell pkg-config --cflags protobuf) \
        -std=c++11 -fno-exceptions -Wno-unused -Wno-unused-parameter
 LDFLAGS += -pie -Wl,-z,noexecstack -lpthread $(shell pkg-config --libs protobuf)
 
diff --git a/user.cc b/user.cc
index 06c221aa8f2508d8f8d63a070feed42df198b88e..1b5c874bbbef1106a5b397cd42de730175314e9c 100644 (file)
--- a/user.cc
+++ b/user.cc
 #include "subproc.h"
 #include "util.h"
 
+#ifndef NEWUIDMAP_PATH
+#define NEWUIDMAP_PATH "/usr/bin/newuidmap"
+#endif
+
+#ifndef NEWGIDMAP_PATH
+#define NEWGIDMAP_PATH "/usr/bin/newgidmap"
+#endif
+
 namespace user {
 
 static bool setResGid(gid_t gid) {
@@ -161,11 +169,11 @@ static bool gidMapSelf(nsjconf_t* nsjconf, pid_t pid) {
        return true;
 }
 
-/* Use /usr/bin/newgidmap for writing the gid map */
+/* Use NEWGIDMAP_PATH for writing the gid map */
 static bool gidMapExternal(nsjconf_t* nsjconf, pid_t pid) {
        bool use = false;
 
-       std::vector<std::string> argv = {"/usr/bin/newgidmap", std::to_string(pid)};
+       std::vector<std::string> argv = {NEWGIDMAP_PATH, std::to_string(pid)};
        for (const auto& gid : nsjconf->gids) {
                if (!gid.is_newidmap) {
                        continue;
@@ -180,18 +188,18 @@ static bool gidMapExternal(nsjconf_t* nsjconf, pid_t pid) {
                return true;
        }
        if (subproc::systemExe(argv, environ) != 0) {
-               LOG_E("'/usr/bin/newgidmap' failed");
+               LOG_E("'%s' failed", NEWGIDMAP_PATH);
                return false;
        }
 
        return true;
 }
 
-/* Use /usr/bin/newuidmap for writing the uid map */
+/* Use NEWUIDMAP_PATH for writing the uid map */
 static bool uidMapExternal(nsjconf_t* nsjconf, pid_t pid) {
        bool use = false;
 
-       std::vector<std::string> argv = {"/usr/bin/newuidmap", std::to_string(pid)};
+       std::vector<std::string> argv = {NEWUIDMAP_PATH, std::to_string(pid)};
        for (const auto& uid : nsjconf->uids) {
                if (!uid.is_newidmap) {
                        continue;
@@ -206,7 +214,7 @@ static bool uidMapExternal(nsjconf_t* nsjconf, pid_t pid) {
                return true;
        }
        if (subproc::systemExe(argv, environ) != 0) {
-               LOG_E("'/usr/bin/newuidmap' failed");
+               LOG_E("'%s' failed", NEWUIDMAP_PATH);
                return false;
        }