In order to be able to reuse code in lxc-attach, the functions lxc_namespace_2_cloneflag and lxc_fill_namespace_flags are moved from lxc_unshare.c to namespace.c.
Signed-off-by: Christian Seiler <christ...@iwakd.de> Cc: Daniel Lezcano <daniel.lezc...@free.fr> Cc: Serge Hallyn <serge.hal...@canonical.com> --- src/lxc/lxc_unshare.c | 45 --------------------------------------------- src/lxc/namespace.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/lxc/namespace.h | 3 +++ 3 files changed, 48 insertions(+), 45 deletions(-) diff --git a/src/lxc/lxc_unshare.c b/src/lxc/lxc_unshare.c index 498d6e0..3a848b2 100644 --- a/src/lxc/lxc_unshare.c +++ b/src/lxc/lxc_unshare.c @@ -84,51 +84,6 @@ static uid_t lookup_user(const char *optarg) return uid; } -static char *namespaces_list[] = { - "MOUNT", "PID", "UTSNAME", "IPC", - "USER", "NETWORK" -}; -static int cloneflags_list[] = { - CLONE_NEWNS, CLONE_NEWPID, CLONE_NEWUTS, CLONE_NEWIPC, - CLONE_NEWUSER, CLONE_NEWNET -}; - -static int lxc_namespace_2_cloneflag(char *namespace) -{ - int i, len; - len = sizeof(namespaces_list)/sizeof(namespaces_list[0]); - for (i = 0; i < len; i++) - if (!strcmp(namespaces_list[i], namespace)) - return cloneflags_list[i]; - - ERROR("invalid namespace name %s", namespace); - return -1; -} - -static int lxc_fill_namespace_flags(char *flaglist, int *flags) -{ - char *token, *saveptr = NULL; - int aflag; - - if (!flaglist) { - ERROR("need at least one namespace to unshare"); - return -1; - } - - token = strtok_r(flaglist, "|", &saveptr); - while (token) { - - aflag = lxc_namespace_2_cloneflag(token); - if (aflag < 0) - return -1; - - *flags |= aflag; - - token = strtok_r(NULL, "|", &saveptr); - } - return 0; -} - struct start_arg { char ***args; diff --git a/src/lxc/namespace.c b/src/lxc/namespace.c index 3e6fc3a..3fa027b 100644 --- a/src/lxc/namespace.c +++ b/src/lxc/namespace.c @@ -69,3 +69,48 @@ pid_t lxc_clone(int (*fn)(void *), void *arg, int flags) return ret; } + +static char *namespaces_list[] = { + "MOUNT", "PID", "UTSNAME", "IPC", + "USER", "NETWORK" +}; +static int cloneflags_list[] = { + CLONE_NEWNS, CLONE_NEWPID, CLONE_NEWUTS, CLONE_NEWIPC, + CLONE_NEWUSER, CLONE_NEWNET +}; + +int lxc_namespace_2_cloneflag(char *namespace) +{ + int i, len; + len = sizeof(namespaces_list)/sizeof(namespaces_list[0]); + for (i = 0; i < len; i++) + if (!strcmp(namespaces_list[i], namespace)) + return cloneflags_list[i]; + + ERROR("invalid namespace name %s", namespace); + return -1; +} + +int lxc_fill_namespace_flags(char *flaglist, int *flags) +{ + char *token, *saveptr = NULL; + int aflag; + + if (!flaglist) { + ERROR("need at least one namespace to unshare"); + return -1; + } + + token = strtok_r(flaglist, "|", &saveptr); + while (token) { + + aflag = lxc_namespace_2_cloneflag(token); + if (aflag < 0) + return -1; + + *flags |= aflag; + + token = strtok_r(NULL, "|", &saveptr); + } + return 0; +} diff --git a/src/lxc/namespace.h b/src/lxc/namespace.h index 5442dd3..04e81bb 100644 --- a/src/lxc/namespace.h +++ b/src/lxc/namespace.h @@ -50,4 +50,7 @@ extern pid_t lxc_clone(int (*fn)(void *), void *arg, int flags); +extern int lxc_namespace_2_cloneflag(char *namespace); +extern int lxc_fill_namespace_flags(char *flaglist, int *flags); + #endif -- 1.7.8.6 ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel