[lxc-devel] [PATCH] rcfile shouldn't get set if the attempt to load a config file fails

Serge Hallyn serge.hallyn at ubuntu.com
Wed Mar 27 21:38:38 UTC 2013


Quoting S.Çağlar Onur (caglar at 10ur.org):
> Hey Serge,
> 
> To be honest I wasn't thinking about parse errors while sending the patch.
> Maybe we can handle the non-existent file issue with something like that
> 

Yeah, that looks good.  Handles the main problem.  Thanks!

Acked-by: Serge E. Hallyn <serge.hallyn at ubuntu.com>

> diff --git a/src/lxc/confile.c b/src/lxc/confile.c
> index 8fe1541..96f9122 100644
> --- a/src/lxc/confile.c
> +++ b/src/lxc/confile.c
> @@ -1422,6 +1422,11 @@ int lxc_config_readline(char *buffer, struct
> lxc_conf *conf)
> 
>  int lxc_config_read(const char *file, struct lxc_conf *conf)
>  {
> +       /* make sure file exists and reabable by us */
> +       if( access(file, R_OK) == -1 ) {
> +               return -1;
> +       }
> +
>         /* Catch only the top level config file name in the structure */
>         if( ! conf->rcfile ) {
>                 conf->rcfile = strdup( file );
> 
> and address parse errors differently?
> 
> Cheers,
> 
> 
> 
> On Wed, Mar 27, 2013 at 4:09 PM, Serge Hallyn <serge.hallyn at ubuntu.com>wrote:
> 
> > Quoting S.Çağlar Onur (caglar at 10ur.org):
> > > From: "S.Çağlar Onur" <caglar at 10ur.org>
> > >
> > > Signed-off-by: S.Çağlar Onur <caglar at 10ur.org>
> >
> > The only downside I see is that now the callbacks can be called
> > with conf->rcfile NULL when it otherwise might be set to strdup(file).
> >
> > This gets tricky because the file being read could have a #include
> > which will trigger lxc_config_read() again.  So now the recursive call
> > will end up setting rcfile.
> >
> > This gets tricky but I think the best thing to do is
> >
> > if (!conf->rcfile) {
> >         was_unset = true;
> >         conf->rcfile = strdup(file);
> > }
> > ret = lxc_file_for_each_line(file, parse_line, conf);
> > if (ret != 0 && was_unset) {
> >         free(conf->rcfile;
> >         conf->rcfile = NULL;
> > }
> >
> > Maybe you have a better idea though.
> >
> > > ---
> > >  src/lxc/confile.c |    6 ++++--
> > >  1 file changed, 4 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/src/lxc/confile.c b/src/lxc/confile.c
> > > index 8fe1541..16b8594 100644
> > > --- a/src/lxc/confile.c
> > > +++ b/src/lxc/confile.c
> > > @@ -1422,11 +1422,13 @@ int lxc_config_readline(char *buffer, struct
> > lxc_conf *conf)
> > >
> > >  int lxc_config_read(const char *file, struct lxc_conf *conf)
> > >  {
> > > +     int ret = lxc_file_for_each_line(file, parse_line, conf);
> > > +
> > >       /* Catch only the top level config file name in the structure */
> > > -     if( ! conf->rcfile ) {
> > > +     if( ret == 0 && ! conf->rcfile ) {
> > >               conf->rcfile = strdup( file );
> > >       }
> > > -     return lxc_file_for_each_line(file, parse_line, conf);
> > > +     return ret;
> > >  }
> > >
> > >  int lxc_config_define_add(struct lxc_list *defines, char* arg)
> > > --
> > > 1.7.10.4
> > >
> > >
> > >
> > ------------------------------------------------------------------------------
> > > Own the Future-Intel® Level Up Game Demo Contest 2013
> > > Rise to greatness in Intel's independent game demo contest.
> > > Compete for recognition, cash, and the chance to get your game
> > > on Steam. $5K grand prize plus 10 genre and skill prizes.
> > > Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d
> > > _______________________________________________
> > > Lxc-devel mailing list
> > > Lxc-devel at lists.sourceforge.net
> > > https://lists.sourceforge.net/lists/listinfo/lxc-devel
> >
> 
> 
> 
> -- 
> S.Çağlar Onur <caglar at 10ur.org>




More information about the lxc-devel mailing list