[libvirt PATCH 1/1] conf: move graphics validation checks out of *ParseXML function.

Nicolás Brignone nmbrignone at gmail.com
Thu Jul 30 16:41:50 UTC 2020


Hi!
    Is this going to be merged? Do I need to do something else?

Thanks!

On Fri, Jul 24, 2020 at 5:08 PM Jonathon Jongsma <jjongsma at redhat.com>
wrote:

> On Wed, 2020-07-22 at 14:56 -0300, Nicolas Brignone wrote:
> > Existing virDomainDefPostParseGraphics function seems to be the right
> > place to put this validations.
> >
> > After moving this validation, one less argument is needed in
> > virDomainGraphicsListenDefParseXML, so removing the "graphics"
> > argument
> > from the function signature.
> >
> > Signed-off-by: Nicolas Brignone <nmbrignone at gmail.com>
> > ---
> >  src/conf/domain_conf.c | 66 +++++++++++++++++++++++-----------------
> > --
> >  1 file changed, 36 insertions(+), 30 deletions(-)
> >
> > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> > index 8d328819..3228f12a 100644
> > --- a/src/conf/domain_conf.c
> > +++ b/src/conf/domain_conf.c
> > @@ -4804,13 +4804,15 @@ virDomainDefPostParseTimer(virDomainDefPtr
> > def)
> >  }
> >
> >
> > -static void
> > +static int
> >  virDomainDefPostParseGraphics(virDomainDef *def)
> >  {
> >      size_t i;
> >
> >      for (i = 0; i < def->ngraphics; i++) {
> > +        size_t j;
> >          virDomainGraphicsDefPtr graphics = def->graphics[i];
> > +        const char *graphicsType =
> > virDomainGraphicsTypeToString(graphics->type);
> >
> >          /* If spice graphics is configured without ports and with
> > autoport='no'
> >           * then we start qemu with Spice to not listen
> > anywhere.  Let's convert
> > @@ -4826,8 +4828,38 @@ virDomainDefPostParseGraphics(virDomainDef
> > *def)
> >                  VIR_FREE(glisten->address);
> >                  glisten->type =
> > VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE;
> >              }
> > +
> > +        }
> > +
> > +        for (j = 0; j < graphics->nListens; j++) {
> > +            virDomainGraphicsListenDefPtr glisten =
> > virDomainGraphicsGetListen(graphics, j);
> > +            switch (glisten->type) {
> > +                case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:
> > +                    if (graphics->type !=
> > VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
> > +                            graphics->type !=
> > VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
> > +                        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> > +                                _("listen type 'socket' is not
> > available for "
> > +                                    "graphics type '%s'"),
> > graphicsType);
> > +                        return -1;
> > +                    }
> > +                    break;
> > +                case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:
> > +                    if (graphics->type !=
> > VIR_DOMAIN_GRAPHICS_TYPE_SPICE &&
> > +                            graphics->type !=
> > VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
> > +                        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> > +                                _("listen type 'none' is not
> > available for "
> > +                                    "graphics type '%s'"),
> > graphicsType);
> > +                        return -1;
> > +                    }
> > +                    break;
> > +                case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:
> > +                case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:
> > +                case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:
> > +                    break;
> > +            }
> >          }
> >      }
> > +    return 0;
> >  }
> >
> >
> > @@ -5915,7 +5947,8 @@ virDomainDefPostParseCommon(virDomainDefPtr
> > def,
> >      /* clean up possibly duplicated metadata entries */
> >      virXMLNodeSanitizeNamespaces(def->metadata);
> >
> > -    virDomainDefPostParseGraphics(def);
> > +    if (virDomainDefPostParseGraphics(def) < 0)
> > +        return -1;
> >
> >      if (virDomainDefPostParseCPU(def) < 0)
> >          return -1;
> > @@ -14140,13 +14173,11 @@ virDomainGraphicsAuthDefParseXML(xmlNodePtr
> > node,
> >   */
> >  static int
> >  virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDefPtr
> > def,
> > -                                   virDomainGraphicsDefPtr graphics,
> >                                     xmlNodePtr node,
> >                                     xmlNodePtr parent,
> >                                     unsigned int flags)
> >  {
> >      int ret = -1;
> > -    const char *graphicsType =
> > virDomainGraphicsTypeToString(graphics->type);
> >      int tmp, typeVal;
> >      g_autofree char *type = virXMLPropString(node, "type");
> >      g_autofree char *address = virXMLPropString(node, "address");
> > @@ -14175,31 +14206,6 @@
> > virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDefPtr def,
> >      }
> >      def->type = typeVal;
> >
> > -    switch (def->type) {
> > -    case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:
> > -        if (graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
> > -            graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
> > -            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> > -                           _("listen type 'socket' is not available
> > for "
> > -                             "graphics type '%s'"), graphicsType);
> > -            goto error;
> > -        }
> > -        break;
> > -    case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:
> > -        if (graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE &&
> > -            graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
> > -            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> > -                           _("listen type 'none' is not available
> > for "
> > -                             "graphics type '%s'"), graphicsType);
> > -            goto error;
> > -        }
> > -        break;
> > -    case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:
> > -    case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:
> > -    case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:
> > -        break;
> > -    }
> > -
> >      if (def->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS) {
> >          if (address && addressCompat && STRNEQ(address,
> > addressCompat)) {
> >              virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> > @@ -14309,7 +14315,7 @@
> > virDomainGraphicsListensParseXML(virDomainGraphicsDefPtr def,
> >              goto cleanup;
> >
> >          for (i = 0; i < nListens; i++) {
> > -            if (virDomainGraphicsListenDefParseXML(&def->listens[i],
> > def,
> > +            if (virDomainGraphicsListenDefParseXML(&def->listens[i],
> >                                                     listenNodes[i],
> >                                                     i == 0 ? node :
> > NULL,
> >                                                     flags) < 0)
>
>
> Reviewed-by: Jonathon Jongsma <jjongsma at redhat.com>
>
> It looks like there are still some additional validation checks in this
> function that could be also moved in subsequent patches if you're
> motivated.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20200730/cd6ff224/attachment-0001.htm>


More information about the libvir-list mailing list