]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - src/shared/nsflags.c
NEWS: finalize for v256~rc3
[thirdparty/systemd.git] / src / shared / nsflags.c
index 4dbd18b86833639437f40332045e575525eeaae9..d4cee069dd651a79382f0046c16897b7091f5f2b 100644 (file)
@@ -1,25 +1,13 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <errno.h>
 
 #include "alloc-util.h"
 #include "extract-word.h"
+#include "namespace-util.h"
 #include "nsflags.h"
 #include "string-util.h"
 
-const struct namespace_flag_map namespace_flag_map[] = {
-        { CLONE_NEWCGROUP, "cgroup" },
-        { CLONE_NEWIPC,    "ipc"    },
-        { CLONE_NEWNET,    "net"    },
-        /* So, the mount namespace flag is called CLONE_NEWNS for historical reasons. Let's expose it here under a more
-         * explanatory name: "mnt". This is in-line with how the kernel exposes namespaces in /proc/$PID/ns. */
-        { CLONE_NEWNS,     "mnt"    },
-        { CLONE_NEWPID,    "pid"    },
-        { CLONE_NEWUSER,   "user"   },
-        { CLONE_NEWUTS,    "uts"    },
-        {}
-};
-
 int namespace_flags_from_string(const char *name, unsigned long *ret) {
         unsigned long flags = 0;
         int r;
@@ -37,9 +25,9 @@ int namespace_flags_from_string(const char *name, unsigned long *ret) {
                 if (r == 0)
                         break;
 
-                for (i = 0; namespace_flag_map[i].name; i++)
-                        if (streq(word, namespace_flag_map[i].name)) {
-                                 f = namespace_flag_map[i].flag;
+                for (i = 0; namespace_info[i].proc_name; i++)
+                        if (streq(word, namespace_info[i].proc_name)) {
+                                 f = namespace_info[i].clone_flag;
                                  break;
                         }
 
@@ -57,11 +45,11 @@ int namespace_flags_to_string(unsigned long flags, char **ret) {
         _cleanup_free_ char *s = NULL;
         unsigned i;
 
-        for (i = 0; namespace_flag_map[i].name; i++) {
-                if ((flags & namespace_flag_map[i].flag) != namespace_flag_map[i].flag)
+        for (i = 0; namespace_info[i].proc_name; i++) {
+                if ((flags & namespace_info[i].clone_flag) != namespace_info[i].clone_flag)
                         continue;
 
-                if (!strextend_with_separator(&s, " ", namespace_flag_map[i].name, NULL))
+                if (!strextend_with_separator(&s, " ", namespace_info[i].proc_name))
                         return -ENOMEM;
         }
 
@@ -69,3 +57,11 @@ int namespace_flags_to_string(unsigned long flags, char **ret) {
 
         return 0;
 }
+
+const char *namespace_single_flag_to_string(unsigned long flag) {
+        for (unsigned i = 0; namespace_info[i].proc_name; i++)
+                if (namespace_info[i].clone_flag == flag)
+                        return namespace_info[i].proc_name;
+
+        return NULL;
+}