[libvirt] Extend virConfParser to allow parsing VMware VMX config files

Daniel P. Berrange berrange at redhat.com
Fri Jun 19 17:21:03 UTC 2009


On Fri, Jun 19, 2009 at 05:54:47PM +0200, Matthias Bolte wrote:
> 2009/6/19 Daniel P. Berrange <berrange at redhat.com>:
> >
> > ACK, looks fine to me - though I'm wondering if you might also want to
> > explicitly turn off support for lists ? IIIRC the VMware config values
> > were only scalars, so for safety you might want the parser to refuse
> > to parse / generate lists.
> >
> > Daniel
> >
> 
> Good advice. I've done this now and attached the patch for it. The
> first patch got already commited, thanks to Daniel Veillard.
> 
> Regards,
>   Matthias

> diff --git a/src/conf.c b/src/conf.c
> index ef1a28f..c51531e 100644
> --- a/src/conf.c
> +++ b/src/conf.c
> @@ -447,6 +447,11 @@ virConfParseValue(virConfParserCtxtPtr ctxt)
>          if (str == NULL)
>              return(NULL);
>      } else if (CUR == '[') {
> +        if (ctxt->conf->flags & VIR_CONF_FLAG_VMX_FORMAT) {
> +            virConfError(ctxt, VIR_ERR_CONF_SYNTAX,
> +                         _("lists not allowed in VMX format"));
> +            return(NULL);
> +        }
>          type = VIR_CONF_LIST;
>          NEXT;
>          SKIP_BLANKS_AND_EOL;
> @@ -486,6 +491,11 @@ virConfParseValue(virConfParserCtxtPtr ctxt)
>              return(NULL);
>          }
>      } else if (c_isdigit(CUR) || (CUR == '-') || (CUR == '+')) {
> +        if (ctxt->conf->flags & VIR_CONF_FLAG_VMX_FORMAT) {
> +            virConfError(ctxt, VIR_ERR_CONF_SYNTAX,
> +                         _("numbers not allowed in VMX format"));
> +            return(NULL);
> +        }
>          if (virConfParseLong(ctxt, &l) < 0) {
>              return(NULL);
>          }
> @@ -530,7 +540,7 @@ virConfParseName(virConfParserCtxtPtr ctxt)
>      }
>      while ((ctxt->cur < ctxt->end) &&
>             (c_isalnum(CUR) || (CUR == '_') ||
> -            ((ctxt->conf->flags & VIR_CONF_FLAG_ALLOW_VMX_NAMES) &&
> +            ((ctxt->conf->flags & VIR_CONF_FLAG_VMX_FORMAT) &&
>               ((CUR == ':') || (CUR == '.')))))
>          NEXT;
>      ret = strndup(base, ctxt->cur - base);
> diff --git a/src/conf.h b/src/conf.h
> index 4bb825a..40d9586 100644
> --- a/src/conf.h
> +++ b/src/conf.h
> @@ -25,8 +25,9 @@ typedef enum {
>  } virConfType;
>  
>  typedef enum {
> -    VIR_CONF_FLAG_ALLOW_VMX_NAMES = 1,  /* allow : and . in names for compatibility
> -                                           with VMware VMX configuration file */
> +    VIR_CONF_FLAG_VMX_FORMAT = 1,  /* allow : and . in names for compatibility with
> +                                      VMware VMX configuration file, but restrict
> +                                      allowed value types to string only */
>  } virConfFlags;
>  
>  static inline const char *


ACK, this looks good too.

Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list