From: Christian Brauner Date: Thu, 27 Oct 2016 12:37:24 +0000 (+0200) Subject: utils: add lxc_preserve_ns() X-Git-Tag: lxc-2.1.0~260^2~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a687256f1dbde991b7afaf8b8f63570ed4671781;p=thirdparty%2Flxc.git utils: add lxc_preserve_ns() This allows to retrieve a file descriptor referring to a namespace. Signed-off-by: Christian Brauner --- diff --git a/src/lxc/utils.c b/src/lxc/utils.c index 47c21cd08..e7b498ef0 100644 --- a/src/lxc/utils.c +++ b/src/lxc/utils.c @@ -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); +} diff --git a/src/lxc/utils.h b/src/lxc/utils.h index 50e184712..9b92daf3d 100644 --- a/src/lxc/utils.h +++ b/src/lxc/utils.h @@ -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);