Commit 6c68b9dc by Serge Hallyn Committed by Stéphane Graber

fix lxc.mount.auto clearing

the way config_mount was structured, sending 'lxc.mount.auto = ' ended up actually clearing all lxc.mount.entrys. Fix that by moving the check for an empty value to after the subkey checks. Then, actually do the clearing of auto_mounts in config_mount_auto. The 'strlen(subkey)' check being removed was bogus - the subkey either known to be 'lxc.mount.entry', else subkey would have been NULL (and forced a return in the block above). This would have been clearer if the config_mount() and helper fns were structured like the rest of confile.c. It's tempting to switch it over, but there are subtleties in there so it's not something to do without a lot of thought and testing. Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
parent 5ecedb89
...@@ -1353,6 +1353,8 @@ out: ...@@ -1353,6 +1353,8 @@ out:
static int config_fstab(const char *key, const char *value, static int config_fstab(const char *key, const char *value,
struct lxc_conf *lxc_conf) struct lxc_conf *lxc_conf)
{ {
if (!value || strlen(value) == 0)
return -1;
return config_path_item(&lxc_conf->fstab, value); return config_path_item(&lxc_conf->fstab, value);
} }
...@@ -1384,8 +1386,10 @@ static int config_mount_auto(const char *key, const char *value, ...@@ -1384,8 +1386,10 @@ static int config_mount_auto(const char *key, const char *value,
int i; int i;
int ret = -1; int ret = -1;
if (!strlen(value)) if (!value || strlen(value) == 0) {
return -1; lxc_conf->auto_mounts = 0;
return 0;
}
autos = strdup(value); autos = strdup(value);
if (!autos) { if (!autos) {
...@@ -1419,6 +1423,12 @@ static int config_mount_auto(const char *key, const char *value, ...@@ -1419,6 +1423,12 @@ static int config_mount_auto(const char *key, const char *value,
return ret; return ret;
} }
/*
* TODO
* This fn is handling lxc.mount, lxc.mount.entry, and lxc.mount.auto.
* It should probably be split into 3 separate functions indexed by
* the config[] entries at top.
*/
static int config_mount(const char *key, const char *value, static int config_mount(const char *key, const char *value,
struct lxc_conf *lxc_conf) struct lxc_conf *lxc_conf)
{ {
...@@ -1429,9 +1439,6 @@ static int config_mount(const char *key, const char *value, ...@@ -1429,9 +1439,6 @@ static int config_mount(const char *key, const char *value,
char *mntelem; char *mntelem;
struct lxc_list *mntlist; struct lxc_list *mntlist;
if (!value || strlen(value) == 0)
return lxc_clear_mount_entries(lxc_conf);
subkey = strstr(key, token); subkey = strstr(key, token);
if (!subkey) { if (!subkey) {
...@@ -1449,8 +1456,9 @@ static int config_mount(const char *key, const char *value, ...@@ -1449,8 +1456,9 @@ static int config_mount(const char *key, const char *value,
return config_mount_auto(key, value, lxc_conf); return config_mount_auto(key, value, lxc_conf);
} }
if (!strlen(subkey)) /* At this point we definately have key = lxc.mount.entry */
return -1; if (!value || strlen(value) == 0)
return lxc_clear_mount_entries(lxc_conf);
mntlist = malloc(sizeof(*mntlist)); mntlist = malloc(sizeof(*mntlist));
if (!mntlist) if (!mntlist)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment