nsjail: envs to vector of strings

This commit is contained in:
Robert Swiecki 2018-02-09 23:04:57 +01:00
parent 63eb13ecde
commit 9399373ee7
4 changed files with 9 additions and 29 deletions

View File

@ -392,7 +392,6 @@ std::unique_ptr<struct nsjconf_t> parseArgs(int argc, char* argv[]) {
TAILQ_INIT(&nsjconf->pids); TAILQ_INIT(&nsjconf->pids);
TAILQ_INIT(&nsjconf->mountpts); TAILQ_INIT(&nsjconf->mountpts);
TAILQ_INIT(&nsjconf->envs);
TAILQ_INIT(&nsjconf->uids); TAILQ_INIT(&nsjconf->uids);
TAILQ_INIT(&nsjconf->gids); TAILQ_INIT(&nsjconf->gids);
@ -594,12 +593,9 @@ std::unique_ptr<struct nsjconf_t> parseArgs(int argc, char* argv[]) {
case 0x0607: case 0x0607:
nsjconf->use_execveat = true; nsjconf->use_execveat = true;
break; break;
case 'E': { case 'E':
struct charptr_t* p = reinterpret_cast<struct charptr_t*>( nsjconf->envs.push_back(optarg);
util::memAlloc(sizeof(struct charptr_t))); break;
p->val = optarg;
TAILQ_INSERT_TAIL(&nsjconf->envs, p, pointers);
} break;
case 'u': { case 'u': {
char* i_id = optarg; char* i_id = optarg;
char* o_id = cmdlineSplitStrByColon(i_id); char* o_id = cmdlineSplitStrByColon(i_id);

View File

@ -129,16 +129,11 @@ static bool configParseInternal(struct nsjconf_t* nsjconf, const nsjail::NsJailC
nsjconf->keep_env = njc.keep_env(); nsjconf->keep_env = njc.keep_env();
for (ssize_t i = 0; i < njc.envar_size(); i++) { for (ssize_t i = 0; i < njc.envar_size(); i++) {
struct charptr_t* p = nsjconf->envs.push_back(njc.envar(i));
reinterpret_cast<charptr_t*>(util::memAlloc(sizeof(struct charptr_t)));
p->val = njc.envar(i).c_str();
TAILQ_INSERT_TAIL(&nsjconf->envs, p, pointers);
} }
nsjconf->keep_caps = njc.keep_caps(); nsjconf->keep_caps = njc.keep_caps();
for (ssize_t i = 0; i < njc.cap_size(); i++) { for (ssize_t i = 0; i < njc.cap_size(); i++) {
struct ints_t* f =
reinterpret_cast<struct ints_t*>(util::memAlloc(sizeof(struct ints_t)));
int cap = caps::nameToVal(njc.cap(i).c_str()); int cap = caps::nameToVal(njc.cap(i).c_str());
if (cap == -1) { if (cap == -1) {
return false; return false;

View File

@ -33,6 +33,7 @@
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
#include <string>
#include <vector> #include <vector>
#if !defined(TEMP_FAILURE_RETRY) #if !defined(TEMP_FAILURE_RETRY)
@ -90,12 +91,6 @@ struct idmap_t {
pointers; pointers;
}; };
struct ints_t {
int val;
TAILQ_ENTRY(ints_t)
pointers;
};
enum ns_mode_t { enum ns_mode_t {
MODE_LISTEN_TCP = 0, MODE_LISTEN_TCP = 0,
MODE_STANDALONE_ONCE, MODE_STANDALONE_ONCE,
@ -103,12 +98,6 @@ enum ns_mode_t {
MODE_STANDALONE_RERUN MODE_STANDALONE_RERUN
}; };
struct charptr_t {
const char* val;
TAILQ_ENTRY(charptr_t)
pointers;
};
enum llevel_t { enum llevel_t {
DEBUG = 0, DEBUG = 0,
INFO, INFO,
@ -188,12 +177,11 @@ struct nsjconf_t {
uids; uids;
TAILQ_HEAD(gdmaplist, idmap_t) TAILQ_HEAD(gdmaplist, idmap_t)
gids; gids;
TAILQ_HEAD(envlist, charptr_t)
envs;
TAILQ_HEAD(pidslist, pids_t) TAILQ_HEAD(pidslist, pids_t)
pids; pids;
TAILQ_HEAD(mountptslist, mounts_t) TAILQ_HEAD(mountptslist, mounts_t)
mountpts; mountpts;
std::vector<std::string> envs;
std::vector<int> openfds; std::vector<int> openfds;
std::vector<int> caps; std::vector<int> caps;
}; };

View File

@ -163,8 +163,9 @@ static int subprocNewProc(
if (nsjconf->keep_env == false) { if (nsjconf->keep_env == false) {
clearenv(); clearenv();
} }
struct charptr_t* p; for (const auto& env : nsjconf->envs) {
TAILQ_FOREACH(p, &nsjconf->envs, pointers) { putenv((char*)p->val); } putenv(const_cast<char*>(env.c_str()));
}
char cs_addr[64]; char cs_addr[64];
net::connToText(fd_in, true /* remote */, cs_addr, sizeof(cs_addr), NULL); net::connToText(fd_in, true /* remote */, cs_addr, sizeof(cs_addr), NULL);