[lxc-devel] [PATCH 1/1] fix lxc.mount.auto clearing
Serge Hallyn
serge.hallyn at ubuntu.com
Thu Oct 9 22:50:46 UTC 2014
Quoting Dwight Engen (dwight.engen at oracle.com):
> On Thu, 9 Oct 2014 16:01:15 +0000
> Serge Hallyn <serge.hallyn at ubuntu.com> wrote:
>
> > 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: Serge Hallyn <serge.hallyn at ubuntu.com>
>
> Comment below,
>
> Acked-by: Dwight Engen <dwight.engen at oracle.com>
>
> > ---
> > src/lxc/confile.c | 22 +++++++++++++++-------
> > 1 file changed, 15 insertions(+), 7 deletions(-)
> >
> > diff --git a/src/lxc/confile.c b/src/lxc/confile.c
> > index 0722a37..09eb94d 100644
> > --- a/src/lxc/confile.c
> > +++ b/src/lxc/confile.c
> > @@ -1403,6 +1403,8 @@ out:
> > static int config_fstab(const char *key, const char *value,
> > struct lxc_conf *lxc_conf)
> > {
> > + if (!value || strlen(value) == 0)
> > + return -1;
> > return config_path_item(&lxc_conf->fstab, value);
> > }
> >
> > @@ -1434,8 +1436,10 @@ static int config_mount_auto(const char *key,
> > const char *value, int i;
> > int ret = -1;
> >
> > - if (!strlen(value))
> > - return -1;
> > + if (!value || strlen(value) == 0) {
> > + lxc_conf->auto_mounts = 0;
> > + return 0;
> > + }
> >
> > autos = strdup(value);
> > if (!autos) {
> > @@ -1469,6 +1473,12 @@ static int config_mount_auto(const char *key,
> > const char *value, 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,
> > struct lxc_conf *lxc_conf)
> > {
> > @@ -1479,9 +1489,6 @@ static int config_mount(const char *key, const
> > char *value, char *mntelem;
> > struct lxc_list *mntlist;
> >
> > - if (!value || strlen(value) == 0)
> > - return lxc_clear_mount_entries(lxc_conf);
> > -
>
> It seems that just plain "lxc.mount = " would've also cleared the
> list, and now only "lxc.mount.entry = " will. I think the new behavior
> for "lxc.mount = " will be to clear lxc_conf->fstab via
> config_path_item() so that seems correct to me. I'd consider the old
> behavior a bug so I like the change, but just thought I'd point out
> that its a difference.
Yeah, thanks, that might be worth maintaining. The simplest fix would
be to do this check before the return -1 at line 1501. If you wanted to
to post such a patch I'd ack it :)
-serge
More information about the lxc-devel
mailing list