nsjail: convert a couple of struct fields to std::string
authorRobert Swiecki <robert@swiecki.net>
Sat, 10 Feb 2018 03:10:18 +0000 (04:10 +0100)
committerRobert Swiecki <robert@swiecki.net>
Sat, 10 Feb 2018 03:10:18 +0000 (04:10 +0100)
cmdline.cc
config.cc
log.cc
mnt.cc
nsjail.h
uts.cc

index 914e23f6a9470f1f89578962c3c1fafc5c9bb28d..e800228da220dd422752e2cb6b4183aaee973dc1 100644 (file)
@@ -225,9 +225,9 @@ void logParams(struct nsjconf_t* nsjconf) {
            "clone_newnet:%s, clone_newuser:%s, clone_newns:%s, clone_newpid:%s, "
            "clone_newipc:%s, clonew_newuts:%s, clone_newcgroup:%s, keep_caps:%s, "
            "tmpfs_size:%zu, disable_no_new_privs:%s, max_cpus:%zu",
-           nsjconf->hostname, nsjconf->chroot ? nsjconf->chroot : "[NULL]", nsjconf->argv[0],
-           nsjconf->bindhost, nsjconf->port, nsjconf->max_conns_per_ip, nsjconf->tlimit,
-           nsjconf->personality, logYesNo(nsjconf->daemonize), logYesNo(nsjconf->clone_newnet),
+           nsjconf->hostname.c_str(), nsjconf->chroot.c_str(), nsjconf->argv[0], nsjconf->bindhost,
+           nsjconf->port, nsjconf->max_conns_per_ip, nsjconf->tlimit, nsjconf->personality,
+           logYesNo(nsjconf->daemonize), logYesNo(nsjconf->clone_newnet),
            logYesNo(nsjconf->clone_newuser), logYesNo(nsjconf->clone_newns),
            logYesNo(nsjconf->clone_newpid), logYesNo(nsjconf->clone_newipc),
            logYesNo(nsjconf->clone_newuts), logYesNo(nsjconf->clone_newcgroup),
@@ -329,11 +329,9 @@ std::unique_ptr<struct nsjconf_t> parseArgs(int argc, char* argv[]) {
        nsjconf->argv = NULL;
        nsjconf->hostname = "NSJAIL";
        nsjconf->cwd = "/";
-       nsjconf->chroot = NULL;
        nsjconf->port = 0;
        nsjconf->bindhost = "::";
        nsjconf->log_fd = STDERR_FILENO;
-       nsjconf->logfile = NULL;
        nsjconf->loglevel = INFO;
        nsjconf->daemonize = false;
        nsjconf->tlimit = 0;
@@ -445,7 +443,7 @@ std::unique_ptr<struct nsjconf_t> parseArgs(int argc, char* argv[]) {
                        break;
                case 'l':
                        nsjconf->logfile = optarg;
-                       if (log::initLogFile(nsjconf.get()) == false) {
+                       if (!log::initLogFile(nsjconf.get())) {
                                return nullptr;
                        }
                        break;
@@ -769,8 +767,9 @@ std::unique_ptr<struct nsjconf_t> parseArgs(int argc, char* argv[]) {
                        return nullptr;
                }
        }
-       if (nsjconf->chroot) {
-               if (!mnt::addMountPtHead(nsjconf.get(), nsjconf->chroot, "/", /* fs_type= */ "",
+       if (!(nsjconf->chroot.empty())) {
+               if (!mnt::addMountPtHead(nsjconf.get(), nsjconf->chroot.c_str(), "/",
+                       /* fs_type= */ "",
                        /* options= */ "",
                        nsjconf->is_root_rw ? (MS_BIND | MS_REC | MS_PRIVATE)
                                            : (MS_BIND | MS_REC | MS_PRIVATE | MS_RDONLY),
index cb27a3b9a1e0cc19d4e2bc82cf41a5795e57052e..bf6e2526141174108d589034a16a0a65d2be7538 100644 (file)
--- a/config.cc
+++ b/config.cc
@@ -83,10 +83,12 @@ static bool configParseInternal(struct nsjconf_t* nsjconf, const nsjail::NsJailC
                LOG_E("Uknown running mode: %d", njc.mode());
                return false;
        }
-       nsjconf->chroot = DUP_IF_SET(njc, chroot_dir);
+       if (njc.has_chroot_dir()) {
+               nsjconf->chroot = njc.chroot_dir();
+       }
        nsjconf->is_root_rw = njc.is_root_rw();
-       nsjconf->hostname = njc.hostname().c_str();
-       nsjconf->cwd = njc.cwd().c_str();
+       nsjconf->hostname = njc.hostname();
+       nsjconf->cwd = njc.cwd();
        nsjconf->port = njc.port();
        nsjconf->bindhost = njc.bindhost().c_str();
        nsjconf->max_conns_per_ip = njc.max_conns_per_ip();
@@ -97,7 +99,9 @@ static bool configParseInternal(struct nsjconf_t* nsjconf, const nsjail::NsJailC
        if (njc.has_log_fd()) {
                nsjconf->log_fd = njc.log_fd();
        }
-       nsjconf->logfile = DUP_IF_SET(njc, log_file);
+       if (njc.has_log_file()) {
+               nsjconf->logfile = njc.log_file();
+       }
        if (njc.has_log_level()) {
                switch (njc.log_level()) {
                case nsjail::LogLevel::DEBUG:
diff --git a/log.cc b/log.cc
index 88bbfc2bd80cfe25e157b230600a39e4db958cb2..fbcb4d201ab14832687e7791b67265ca3205c8b7 100644 (file)
--- a/log.cc
+++ b/log.cc
@@ -60,16 +60,16 @@ bool initLogFile(struct nsjconf_t* nsjconf) {
        log_fd = nsjconf->log_fd;
        log_level = nsjconf->loglevel;
 
-       if (nsjconf->logfile == NULL && nsjconf->daemonize) {
+       if (nsjconf->logfile.empty() && nsjconf->daemonize) {
                nsjconf->logfile = _LOG_DEFAULT_FILE;
        }
-       if (nsjconf->logfile == NULL) {
+       if (nsjconf->logfile.empty()) {
                log_fd = fcntl(log_fd, F_DUPFD_CLOEXEC, 0);
        } else {
                if (TEMP_FAILURE_RETRY(
-                       log_fd = open(nsjconf->logfile, O_CREAT | O_RDWR | O_APPEND, 0640)) == -1) {
+                       log_fd = open(nsjconf->logfile.c_str(), O_CREAT | O_RDWR | O_APPEND, 0640)) == -1) {
                        log_fd = STDERR_FILENO;
-                       PLOG_E("Couldn't open logfile open('%s')", nsjconf->logfile);
+                       PLOG_E("Couldn't open logfile open('%s')", nsjconf->logfile.c_str());
                        return false;
                }
        }
diff --git a/mnt.cc b/mnt.cc
index da29793f239b07bbb32eace3952bede6b0e695f4..be1fb6d356bf5c3cb9bbd7431f6979cdc5dbaa31 100644 (file)
--- a/mnt.cc
+++ b/mnt.cc
@@ -319,14 +319,14 @@ static bool initNsInternal(struct nsjconf_t* nsjconf) {
         * use --chroot in this case
         */
        if (nsjconf->clone_newns == false) {
-               if (nsjconf->chroot == NULL) {
+               if (nsjconf->chroot.empty()) {
                        PLOG_E(
                            "--chroot was not specified, and it's required when not using "
                            "CLONE_NEWNS");
                        return false;
                }
-               if (chroot(nsjconf->chroot) == -1) {
-                       PLOG_E("chroot('%s')", nsjconf->chroot);
+               if (chroot(nsjconf->chroot.c_str()) == -1) {
+                       PLOG_E("chroot('%s')", nsjconf->chroot.c_str());
                        return false;
                }
                if (chdir("/") == -1) {
@@ -394,8 +394,8 @@ static bool initNsInternal(struct nsjconf_t* nsjconf) {
                PLOG_E("umount2('/', MNT_DETACH)");
                return false;
        }
-       if (chdir(nsjconf->cwd) == -1) {
-               PLOG_E("chdir('%s')", nsjconf->cwd);
+       if (chdir(nsjconf->cwd.c_str()) == -1) {
+               PLOG_E("chdir('%s')", nsjconf->cwd.c_str());
                return false;
        }
 
index 7616f1807efe08d3f697412f62143a0cc67db06a..39dd4ca5aa4ae320537e73452c043bd60779bb8d 100644 (file)
--- a/nsjail.h
+++ b/nsjail.h
@@ -113,13 +113,13 @@ struct nsjconf_t {
        bool use_execveat;
        int exec_fd;
        const char** argv;
-       const char* hostname;
-       const char* cwd;
-       const char* chroot;
+       std::string hostname;
+       std::string cwd;
+       std::string chroot;
        int port;
        const char* bindhost;
        int log_fd;
-       const char* logfile;
+       std::string logfile;
        enum llevel_t loglevel;
        bool daemonize;
        time_t tlimit;
diff --git a/uts.cc b/uts.cc
index 1f1081d667c05e59b0b56250070b206b9d4ad5d4..7fc77966cfd8381a3e02786a62e1fb860b33e301 100644 (file)
--- a/uts.cc
+++ b/uts.cc
@@ -33,9 +33,9 @@ bool initNs(struct nsjconf_t* nsjconf) {
                return true;
        }
 
-       LOG_D("Setting hostname to '%s'", nsjconf->hostname);
-       if (sethostname(nsjconf->hostname, strlen(nsjconf->hostname)) == -1) {
-               PLOG_E("sethostname('%s')", nsjconf->hostname);
+       LOG_D("Setting hostname to '%s'", nsjconf->hostname.c_str());
+       if (sethostname(nsjconf->hostname.c_str(), strlen(nsjconf->hostname.c_str())) == -1) {
+               PLOG_E("sethostname('%s')", nsjconf->hostname.c_str());
                return false;
        }
        return true;