Stringify CLI-passed paths

This commit is contained in:
Artur Cygan 2020-07-06 14:38:11 +02:00
parent ba9bd3590d
commit 74e88d92b4

30
user.cc
View File

@ -43,12 +43,20 @@
#include "subproc.h" #include "subproc.h"
#include "util.h" #include "util.h"
#ifndef NEWUIDMAP_PATH #define STR_(x) #x
#define NEWUIDMAP_PATH "/usr/bin/newuidmap" #define STR(x) STR_(x)
#endif
#ifndef NEWGIDMAP_PATH constexpr char kNewUidPath[] =
#define NEWGIDMAP_PATH "/usr/bin/newgidmap" #ifdef NEWUIDMAP_PATH
STR(NEWUIDMAP_PATH);
#else
"/usr/bin/newuidmap";
#endif
constexpr char kNewGidPath[] =
#ifdef NEWGIDMAP_PATH
STR(NEWGIDMAP_PATH);
#else
"/usr/bin/newgidmap";
#endif #endif
namespace user { namespace user {
@ -169,11 +177,11 @@ static bool gidMapSelf(nsjconf_t* nsjconf, pid_t pid) {
return true; return true;
} }
/* Use NEWGIDMAP_PATH for writing the gid map */ /* Use newgidmap for writing the gid map */
static bool gidMapExternal(nsjconf_t* nsjconf, pid_t pid) { static bool gidMapExternal(nsjconf_t* nsjconf, pid_t pid) {
bool use = false; bool use = false;
std::vector<std::string> argv = {NEWGIDMAP_PATH, std::to_string(pid)}; std::vector<std::string> argv = {kNewGidPath, std::to_string(pid)};
for (const auto& gid : nsjconf->gids) { for (const auto& gid : nsjconf->gids) {
if (!gid.is_newidmap) { if (!gid.is_newidmap) {
continue; continue;
@ -188,18 +196,18 @@ static bool gidMapExternal(nsjconf_t* nsjconf, pid_t pid) {
return true; return true;
} }
if (subproc::systemExe(argv, environ) != 0) { if (subproc::systemExe(argv, environ) != 0) {
LOG_E("'%s' failed", NEWGIDMAP_PATH); LOG_E("'%s' failed", kNewGidPath);
return false; return false;
} }
return true; return true;
} }
/* Use NEWUIDMAP_PATH for writing the uid map */ /* Use newuidmap for writing the uid map */
static bool uidMapExternal(nsjconf_t* nsjconf, pid_t pid) { static bool uidMapExternal(nsjconf_t* nsjconf, pid_t pid) {
bool use = false; bool use = false;
std::vector<std::string> argv = {NEWUIDMAP_PATH, std::to_string(pid)}; std::vector<std::string> argv = {kNewUidPath, std::to_string(pid)};
for (const auto& uid : nsjconf->uids) { for (const auto& uid : nsjconf->uids) {
if (!uid.is_newidmap) { if (!uid.is_newidmap) {
continue; continue;
@ -214,7 +222,7 @@ static bool uidMapExternal(nsjconf_t* nsjconf, pid_t pid) {
return true; return true;
} }
if (subproc::systemExe(argv, environ) != 0) { if (subproc::systemExe(argv, environ) != 0) {
LOG_E("'%s' failed", NEWUIDMAP_PATH); LOG_E("'%s' failed", kNewUidPath);
return false; return false;
} }