mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-07-27 12:37:35 +00:00
lxc-unshare: Move functions to determine clone flags from command line options to namespace.c
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 <christian@iwakd.de> Cc: Daniel Lezcano <daniel.lezcano@free.fr> Acked-by: Serge Hallyn <serge.hallyn@canonical.com>
This commit is contained in:
parent
fc763ab77d
commit
39a5d5feee
@ -84,51 +84,6 @@ static uid_t lookup_user(const char *optarg)
|
|||||||
return uid;
|
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 {
|
struct start_arg {
|
||||||
char ***args;
|
char ***args;
|
||||||
|
@ -69,3 +69,48 @@ pid_t lxc_clone(int (*fn)(void *), void *arg, int flags)
|
|||||||
|
|
||||||
return ret;
|
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;
|
||||||
|
}
|
||||||
|
@ -54,4 +54,7 @@ int clone(int (*fn)(void *), void *child_stack,
|
|||||||
|
|
||||||
extern pid_t lxc_clone(int (*fn)(void *), void *arg, int flags);
|
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
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user