From: Serge Hallyn Date: Wed, 12 Mar 2014 23:27:24 +0000 (-0500) Subject: support lxc.mount.auto for get_config_item and clear_config_item X-Git-Tag: lxc-1.1.0.alpha1~211 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b099e9e9bd1f04254abe05b69faaf3177b24c356;p=thirdparty%2Flxc.git support lxc.mount.auto for get_config_item and clear_config_item Signed-off-by: Serge Hallyn Acked-by: Stéphane Graber --- diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 434658552..710b96193 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -4102,6 +4102,12 @@ int lxc_clear_mount_entries(struct lxc_conf *c) return 0; } +int lxc_clear_automounts(struct lxc_conf *c) +{ + c->auto_mounts = 0; + return 0; +} + int lxc_clear_hooks(struct lxc_conf *c, const char *key) { struct lxc_list *it,*next; diff --git a/src/lxc/conf.h b/src/lxc/conf.h index 28042121b..c3705873c 100644 --- a/src/lxc/conf.h +++ b/src/lxc/conf.h @@ -358,6 +358,7 @@ extern int lxc_clear_config_caps(struct lxc_conf *c); extern int lxc_clear_config_keepcaps(struct lxc_conf *c); extern int lxc_clear_cgroups(struct lxc_conf *c, const char *key); extern int lxc_clear_mount_entries(struct lxc_conf *c); +extern int lxc_clear_automounts(struct lxc_conf *c); extern int lxc_clear_hooks(struct lxc_conf *c, const char *key); extern int lxc_clear_idmaps(struct lxc_conf *c); extern int lxc_clear_groups(struct lxc_conf *c); diff --git a/src/lxc/confile.c b/src/lxc/confile.c index 8b1c0b6e5..d6cf1511c 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c @@ -1941,6 +1941,40 @@ static int lxc_get_mount_entries(struct lxc_conf *c, char *retv, int inlen) return fulllen; } +static int lxc_get_auto_mounts(struct lxc_conf *c, char *retv, int inlen) +{ + int len, fulllen = 0; + + if (!retv) + inlen = 0; + else + memset(retv, 0, inlen); + + if (!(c->auto_mounts & LXC_AUTO_ALL_MASK)) + return 0; + + switch (c->auto_mounts & LXC_AUTO_PROC_MASK) { + case LXC_AUTO_PROC_MIXED: strprint(retv, inlen, "proc:mixed\n"); break; + case LXC_AUTO_PROC_RW: strprint(retv, inlen, "proc:rw"); break; + default: break; + } + switch (c->auto_mounts & LXC_AUTO_SYS_MASK) { + case LXC_AUTO_SYS_RO: strprint(retv, inlen, "sys:ro"); break; + case LXC_AUTO_SYS_RW: strprint(retv, inlen, "sys:rw"); break; + default: break; + } + switch (c->auto_mounts & LXC_AUTO_CGROUP_MASK) { + case LXC_AUTO_CGROUP_MIXED: strprint(retv, inlen, "cgroup:mixed"); break; + case LXC_AUTO_CGROUP_RO: strprint(retv, inlen, "cgroup:ro"); break; + case LXC_AUTO_CGROUP_RW: strprint(retv, inlen, "cgroup:rw"); break; + case LXC_AUTO_CGROUP_FULL_MIXED: strprint(retv, inlen, "cgroup-full:mixed"); break; + case LXC_AUTO_CGROUP_FULL_RO: strprint(retv, inlen, "cgroup-full:ro"); break; + case LXC_AUTO_CGROUP_FULL_RW: strprint(retv, inlen, "cgroup-full:rw"); break; + default: break; + } + return fulllen; +} + /* * lxc.network.0.XXX, where XXX can be: name, type, link, flags, type, * macvlan.mode, veth.pair, vlan, ipv4, ipv6, script.up, hwaddr, mtu, @@ -2074,6 +2108,8 @@ int lxc_get_config_item(struct lxc_conf *c, const char *key, char *retv, if (strcmp(key, "lxc.mount.entry") == 0) return lxc_get_mount_entries(c, retv, inlen); + else if (strcmp(key, "lxc.mount.auto") == 0) + return lxc_get_auto_mounts(c, retv, inlen); else if (strcmp(key, "lxc.mount") == 0) v = c->fstab; else if (strcmp(key, "lxc.tty") == 0) @@ -2151,6 +2187,8 @@ int lxc_clear_config_item(struct lxc_conf *c, const char *key) return lxc_clear_cgroups(c, key); else if (strcmp(key, "lxc.mount.entries") == 0) return lxc_clear_mount_entries(c); + else if (strcmp(key, "lxc.mount.auto") == 0) + return lxc_clear_automounts(c); else if (strncmp(key, "lxc.hook", 8) == 0) return lxc_clear_hooks(c, key); else if (strncmp(key, "lxc.group", 9) == 0)