From 9399373ee7b340813ebe787687abc6597a8eb4ce Mon Sep 17 00:00:00 2001 From: Robert Swiecki Date: Fri, 9 Feb 2018 23:04:57 +0100 Subject: [PATCH] nsjail: envs to vector of strings --- cmdline.cc | 10 +++------- config.cc | 7 +------ nsjail.h | 16 ++-------------- subproc.cc | 5 +++-- 4 files changed, 9 insertions(+), 29 deletions(-) diff --git a/cmdline.cc b/cmdline.cc index 661dcbe..3cd8ff4 100644 --- a/cmdline.cc +++ b/cmdline.cc @@ -392,7 +392,6 @@ std::unique_ptr parseArgs(int argc, char* argv[]) { TAILQ_INIT(&nsjconf->pids); TAILQ_INIT(&nsjconf->mountpts); - TAILQ_INIT(&nsjconf->envs); TAILQ_INIT(&nsjconf->uids); TAILQ_INIT(&nsjconf->gids); @@ -594,12 +593,9 @@ std::unique_ptr parseArgs(int argc, char* argv[]) { case 0x0607: nsjconf->use_execveat = true; break; - case 'E': { - struct charptr_t* p = reinterpret_cast( - util::memAlloc(sizeof(struct charptr_t))); - p->val = optarg; - TAILQ_INSERT_TAIL(&nsjconf->envs, p, pointers); - } break; + case 'E': + nsjconf->envs.push_back(optarg); + break; case 'u': { char* i_id = optarg; char* o_id = cmdlineSplitStrByColon(i_id); diff --git a/config.cc b/config.cc index 32c818e..cb27a3b 100644 --- a/config.cc +++ b/config.cc @@ -129,16 +129,11 @@ static bool configParseInternal(struct nsjconf_t* nsjconf, const nsjail::NsJailC nsjconf->keep_env = njc.keep_env(); for (ssize_t i = 0; i < njc.envar_size(); i++) { - struct charptr_t* p = - reinterpret_cast(util::memAlloc(sizeof(struct charptr_t))); - p->val = njc.envar(i).c_str(); - TAILQ_INSERT_TAIL(&nsjconf->envs, p, pointers); + nsjconf->envs.push_back(njc.envar(i)); } nsjconf->keep_caps = njc.keep_caps(); for (ssize_t i = 0; i < njc.cap_size(); i++) { - struct ints_t* f = - reinterpret_cast(util::memAlloc(sizeof(struct ints_t))); int cap = caps::nameToVal(njc.cap(i).c_str()); if (cap == -1) { return false; diff --git a/nsjail.h b/nsjail.h index 52c30d4..5d6abac 100644 --- a/nsjail.h +++ b/nsjail.h @@ -33,6 +33,7 @@ #include #include +#include #include #if !defined(TEMP_FAILURE_RETRY) @@ -90,12 +91,6 @@ struct idmap_t { pointers; }; -struct ints_t { - int val; - TAILQ_ENTRY(ints_t) - pointers; -}; - enum ns_mode_t { MODE_LISTEN_TCP = 0, MODE_STANDALONE_ONCE, @@ -103,12 +98,6 @@ enum ns_mode_t { MODE_STANDALONE_RERUN }; -struct charptr_t { - const char* val; - TAILQ_ENTRY(charptr_t) - pointers; -}; - enum llevel_t { DEBUG = 0, INFO, @@ -188,12 +177,11 @@ struct nsjconf_t { uids; TAILQ_HEAD(gdmaplist, idmap_t) gids; - TAILQ_HEAD(envlist, charptr_t) - envs; TAILQ_HEAD(pidslist, pids_t) pids; TAILQ_HEAD(mountptslist, mounts_t) mountpts; + std::vector envs; std::vector openfds; std::vector caps; }; diff --git a/subproc.cc b/subproc.cc index 3ec7928..b1d88d4 100644 --- a/subproc.cc +++ b/subproc.cc @@ -163,8 +163,9 @@ static int subprocNewProc( if (nsjconf->keep_env == false) { clearenv(); } - struct charptr_t* p; - TAILQ_FOREACH(p, &nsjconf->envs, pointers) { putenv((char*)p->val); } + for (const auto& env : nsjconf->envs) { + putenv(const_cast(env.c_str())); + } char cs_addr[64]; net::connToText(fd_in, true /* remote */, cs_addr, sizeof(cs_addr), NULL); -- 2.7.4