nsjail: envs to vector of strings
authorRobert Swiecki <robert@swiecki.net>
Fri, 9 Feb 2018 22:04:57 +0000 (23:04 +0100)
committerRobert Swiecki <robert@swiecki.net>
Fri, 9 Feb 2018 22:04:57 +0000 (23:04 +0100)
cmdline.cc
config.cc
nsjail.h
subproc.cc

index 661dcbe..3cd8ff4 100644 (file)
@@ -392,7 +392,6 @@ std::unique_ptr<struct nsjconf_t> 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<struct nsjconf_t> parseArgs(int argc, char* argv[]) {
                case 0x0607:
                        nsjconf->use_execveat = true;
                        break;
-               case 'E': {
-                       struct charptr_t* p = reinterpret_cast<struct charptr_t*>(
-                           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);
index 32c818e..cb27a3b 100644 (file)
--- 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<charptr_t*>(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<struct ints_t*>(util::memAlloc(sizeof(struct ints_t)));
                int cap = caps::nameToVal(njc.cap(i).c_str());
                if (cap == -1) {
                        return false;
index 52c30d4..5d6abac 100644 (file)
--- a/nsjail.h
+++ b/nsjail.h
@@ -33,6 +33,7 @@
 #include <time.h>
 #include <unistd.h>
 
+#include <string>
 #include <vector>
 
 #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<std::string> envs;
        std::vector<int> openfds;
        std::vector<int> caps;
 };
index 3ec7928..b1d88d4 100644 (file)
@@ -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<char*>(env.c_str()));
+       }
 
        char cs_addr[64];
        net::connToText(fd_in, true /* remote */, cs_addr, sizeof(cs_addr), NULL);