Use TAILQ instead of LIST to insert new mount entries at the end
authorJagger <robert@swiecki.net>
Sat, 9 Jan 2016 15:09:05 +0000 (16:09 +0100)
committerJagger <robert@swiecki.net>
Sat, 9 Jan 2016 15:09:05 +0000 (16:09 +0100)
cmdline.c
common.h
contain.c
net.c
subproc.c

index f36082df79ef2223030a981ee0738578f508dac9..b26d8cf2044cedc9e3d1744dc1bb43c02b1c16b7 100644 (file)
--- a/cmdline.c
+++ b/cmdline.c
@@ -102,7 +102,7 @@ void cmdlineLogParams(struct nsjconf_t *nsjconf)
             logYesNo(nsjconf->keep_caps), nsjconf->tmpfs_size);
 
        struct mounts_t *p;
-       LIST_FOREACH(p, &nsjconf->mountpts, pointers) {
+       TAILQ_FOREACH(p, &nsjconf->mountpts, pointers) {
                LOG_I("Mount point: src:'%s' dst:'%s' type:'%s' flags:0x%tx options:'%s'",
                      p->src, p->dst, p->fs_type, p->flags, p->options);
        }
@@ -175,7 +175,7 @@ bool cmdlineParse(int argc, char *argv[], struct nsjconf_t * nsjconf)
        (*nsjconf) = (struct nsjconf_t) {
                .hostname = "NSJAIL",
                .cwd = "/",
-               .chroot = "",
+               .chroot = NULL,
                .argv = NULL,
                .port = 31337,
                .uid = -1,
@@ -211,8 +211,8 @@ bool cmdlineParse(int argc, char *argv[], struct nsjconf_t * nsjconf)
        };
        /*  *INDENT-OFF* */
 
-       LIST_INIT(&nsjconf->pids);
-       LIST_INIT(&nsjconf->mountpts);
+       TAILQ_INIT(&nsjconf->pids);
+       TAILQ_INIT(&nsjconf->mountpts);
 
        const char *user = "nobody";
        const char *group = "nobody";
@@ -409,7 +409,7 @@ bool cmdlineParse(int argc, char *argv[], struct nsjconf_t * nsjconf)
                                p->flags = MS_BIND | MS_REC | MS_PRIVATE | MS_RDONLY;
                                p->options = NULL;
                                p->fs_type = NULL;
-                               LIST_INSERT_HEAD(&nsjconf->mountpts, p, pointers);
+                               TAILQ_INSERT_TAIL(&nsjconf->mountpts, p, pointers);
                        }
                        break;
                case 'B':
@@ -423,7 +423,7 @@ bool cmdlineParse(int argc, char *argv[], struct nsjconf_t * nsjconf)
                                p->flags = MS_BIND | MS_REC | MS_PRIVATE;
                                p->options = NULL;
                                p->fs_type = NULL;
-                               LIST_INSERT_HEAD(&nsjconf->mountpts, p, pointers);
+                               TAILQ_INSERT_TAIL(&nsjconf->mountpts, p, pointers);
                        }
                        break;
                case 'T':
@@ -437,7 +437,7 @@ bool cmdlineParse(int argc, char *argv[], struct nsjconf_t * nsjconf)
                                p->flags = 0;
                                p->options = cmdlineTmpfsSz;
                                p->fs_type = "tmpfs";
-                               LIST_INSERT_HEAD(&nsjconf->mountpts, p, pointers);
+                               TAILQ_INSERT_TAIL(&nsjconf->mountpts, p, pointers);
                        }
                        break;
                case 'M':
@@ -483,7 +483,7 @@ bool cmdlineParse(int argc, char *argv[], struct nsjconf_t * nsjconf)
                p->flags = 0;
                p->options = NULL;
                p->fs_type = "proc";
-               LIST_INSERT_HEAD(&nsjconf->mountpts, p, pointers);
+               TAILQ_INSERT_HEAD(&nsjconf->mountpts, p, pointers);
        }
        if (strlen(nsjconf->chroot) > 0) {
                struct mounts_t *p = malloc(sizeof(struct mounts_t));
@@ -498,7 +498,7 @@ bool cmdlineParse(int argc, char *argv[], struct nsjconf_t * nsjconf)
                if (nsjconf->is_root_rw == false) {
                        p->flags |= MS_RDONLY;
                }
-               LIST_INSERT_HEAD(&nsjconf->mountpts, p, pointers);
+               TAILQ_INSERT_HEAD(&nsjconf->mountpts, p, pointers);
        }
 
        if (logInitLogFile(nsjconf, logfile, nsjconf->verbose) == false) {
index a90ea9491765a5a4db34378a1842a27aee4419aa..77bc96ac7bf67b0d5f465928153016f0a85566ad 100644 (file)
--- a/common.h
+++ b/common.h
@@ -36,7 +36,7 @@ struct pids_t {
        time_t start;
        char remote_txt[64];
        struct sockaddr_in6 remote_addr;
-        LIST_ENTRY(pids_t) pointers;
+        TAILQ_ENTRY(pids_t) pointers;
 };
 
 struct mounts_t {
@@ -45,7 +45,7 @@ struct mounts_t {
        const char *fs_type;
        const char *options;
        uintptr_t flags;
-        LIST_ENTRY(mounts_t) pointers;
+        TAILQ_ENTRY(mounts_t) pointers;
 };
 
 enum mode_t {
@@ -92,8 +92,8 @@ struct nsjconf_t {
        unsigned int max_conns_per_ip;
        size_t tmpfs_size;
        bool mount_proc;
-        LIST_HEAD(pidslist, pids_t) pids;
-        LIST_HEAD(mountptslist, mounts_t) mountpts;
+        TAILQ_HEAD(pidslist, pids_t) pids;
+        TAILQ_HEAD(mountptslist, mounts_t) mountpts;
 };
 
 #endif                         /* _COMMON_H */
index 54fa2ab10484cdd2875d97bc10daa290466f7289..522c711ba7a2eccdb95b7e681392dfd5ccb9eb41 100644 (file)
--- a/contain.c
+++ b/contain.c
@@ -241,7 +241,7 @@ bool containMountFS(struct nsjconf_t * nsjconf)
        }
 
        struct mounts_t *p;
-       LIST_FOREACH(p, &nsjconf->mountpts, pointers) {
+       TAILQ_FOREACH(p, &nsjconf->mountpts, pointers) {
                char dst[PATH_MAX];
                snprintf(dst, sizeof(dst), "%s/%s", newrootdir, p->dst);
                if (containMount(p, dst) == false) {
@@ -274,7 +274,7 @@ bool containMountFS(struct nsjconf_t * nsjconf)
                return false;
        }
 
-       LIST_FOREACH(p, &nsjconf->mountpts, pointers) {
+       TAILQ_FOREACH(p, &nsjconf->mountpts, pointers) {
                if (containRemountRO(p) == false) {
                        return false;
                }
diff --git a/net.c b/net.c
index eed24d97eaf06c35488ddce5d028901ef3408b83..f37b1d62a585e780aedda32e49bb877440cd9c59 100644 (file)
--- a/net.c
+++ b/net.c
@@ -124,7 +124,7 @@ bool netLimitConns(struct nsjconf_t * nsjconf, int connsock)
 
        unsigned int cnt = 0;
        struct pids_t *p;
-       LIST_FOREACH(p, &nsjconf->pids, pointers) {
+       TAILQ_FOREACH(p, &nsjconf->pids, pointers) {
                if (memcmp
                    (addr.sin6_addr.s6_addr, p->remote_addr.sin6_addr.s6_addr,
                     sizeof(*p->remote_addr.sin6_addr.s6_addr)) == 0) {
index c84d2feb861e2250720451f10b06782f4e61d6da..bf5eef02c368989e166dfe728f48d56857a6c3c2 100644 (file)
--- a/subproc.c
+++ b/subproc.c
@@ -103,7 +103,7 @@ static void subprocAdd(struct nsjconf_t *nsjconf, pid_t pid, int sock)
        p->start = time(NULL);
        netConnToText(sock, true /* remote */ , p->remote_txt, sizeof(p->remote_txt),
                      &p->remote_addr);
-       LIST_INSERT_HEAD(&nsjconf->pids, p, pointers);
+       TAILQ_INSERT_HEAD(&nsjconf->pids, p, pointers);
 
        LOG_D("Added pid '%d' with start time '%u' to the queue for IP: '%s'", pid,
              (unsigned int)p->start, p->remote_txt);
@@ -112,11 +112,11 @@ static void subprocAdd(struct nsjconf_t *nsjconf, pid_t pid, int sock)
 static void subprocRemove(struct nsjconf_t *nsjconf, pid_t pid)
 {
        struct pids_t *p;
-       LIST_FOREACH(p, &nsjconf->pids, pointers) {
+       TAILQ_FOREACH(p, &nsjconf->pids, pointers) {
                if (p->pid == pid) {
                        LOG_D("Removing pid '%d' from the queue (IP:'%s', start time:'%u')", p->pid,
                              p->remote_txt, (unsigned int)p->start);
-                       LIST_REMOVE(p, pointers);
+                       TAILQ_REMOVE(&nsjconf->pids, p, pointers);
                        free(p);
                        return;
                }
@@ -128,7 +128,7 @@ int subprocCount(struct nsjconf_t *nsjconf)
 {
        int cnt = 0;
        struct pids_t *p;
-       LIST_FOREACH(p, &nsjconf->pids, pointers) {
+       TAILQ_FOREACH(p, &nsjconf->pids, pointers) {
                cnt++;
        }
        return cnt;
@@ -139,7 +139,7 @@ void subprocDisplay(struct nsjconf_t *nsjconf)
        LOG_I("Total number of spawned namespaces: %d", subprocCount(nsjconf));
        time_t now = time(NULL);
        struct pids_t *p;
-       LIST_FOREACH(p, &nsjconf->pids, pointers) {
+       TAILQ_FOREACH(p, &nsjconf->pids, pointers) {
                time_t diff = now - p->start;
                time_t left = nsjconf->tlimit ? nsjconf->tlimit - diff : 0;
                LOG_I("PID: %d, Remote host: %s, Run time: %ld sec. (time left: %ld sec.)", p->pid,
@@ -170,7 +170,7 @@ int subprocReap(struct nsjconf_t *nsjconf)
 
        time_t now = time(NULL);
        struct pids_t *p;
-       LIST_FOREACH(p, &nsjconf->pids, pointers) {
+       TAILQ_FOREACH(p, &nsjconf->pids, pointers) {
                if (nsjconf->tlimit == 0) {
                        continue;
                }
@@ -196,7 +196,7 @@ int subprocReap(struct nsjconf_t *nsjconf)
 void subprocKillAll(struct nsjconf_t *nsjconf)
 {
        struct pids_t *p;
-       LIST_FOREACH(p, &nsjconf->pids, pointers) {
+       TAILQ_FOREACH(p, &nsjconf->pids, pointers) {
                kill(p->pid, SIGKILL);
        }
 }