]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
utils: add lxc_preserve_ns()
authorChristian Brauner <christian.brauner@canonical.com>
Thu, 27 Oct 2016 12:37:24 +0000 (14:37 +0200)
committerChristian Brauner <christian.brauner@canonical.com>
Sat, 19 Nov 2016 04:11:12 +0000 (05:11 +0100)
This allows to retrieve a file descriptor referring to a namespace.

Signed-off-by: Christian Brauner <christian.brauner@canonical.com>
src/lxc/utils.c
src/lxc/utils.h

index 47c21cd08cf42560167c6cde6591acac0fb32788..e7b498ef01e8be1c44bb47372c2d4db836d22125 100644 (file)
@@ -1968,3 +1968,16 @@ int lxc_append_string(char ***list, char *entry)
 
        return 0;
 }
+
+int lxc_preserve_ns(const int pid, const char *ns)
+{
+       int ret;
+       size_t len = 5 /* /proc */ + 21 /* /int_as_str */ + 3 /* /ns */ + 20 /* /NS_NAME */ + 1 /* \0 */;
+       char path[len];
+
+       ret = snprintf(path, len, "/proc/%d/ns/%s", pid, ns);
+       if (ret < 0 || (size_t)ret >= len)
+               return -1;
+
+       return open(path, O_RDONLY | O_CLOEXEC);
+}
index 50e184712e0c200614bff2013283e45551239c8e..9b92daf3d27ecc32e130588e37353124a372a25f 100644 (file)
@@ -312,6 +312,7 @@ int open_devnull(void);
 int set_stdfds(int fd);
 int null_stdfds(void);
 int lxc_count_file_lines(const char *fn);
+int lxc_preserve_ns(const int pid, const char *ns);
 
 /* Check whether a signal is blocked by a process. */
 bool task_blocking_signal(pid_t pid, int signal);