nsjail: envs to vector of strings
This commit is contained in:
parent
63eb13ecde
commit
9399373ee7
10
cmdline.cc
10
cmdline.cc
@ -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);
|
||||||
|
@ -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;
|
||||||
|
16
nsjail.h
16
nsjail.h
@ -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;
|
||||||
};
|
};
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user