<div dir="ltr"><div>Hi!</div><div>    Is this going to be merged? Do I need to do something else?</div><div><br></div><div>Thanks!<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jul 24, 2020 at 5:08 PM Jonathon Jongsma <<a href="mailto:jjongsma@redhat.com">jjongsma@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Wed, 2020-07-22 at 14:56 -0300, Nicolas Brignone wrote:<br>
> Existing virDomainDefPostParseGraphics function seems to be the right<br>
> place to put this validations.<br>
> <br>
> After moving this validation, one less argument is needed in<br>
> virDomainGraphicsListenDefParseXML, so removing the "graphics"<br>
> argument<br>
> from the function signature.<br>
> <br>
> Signed-off-by: Nicolas Brignone <<a href="mailto:nmbrignone@gmail.com" target="_blank">nmbrignone@gmail.com</a>><br>
> ---<br>
>  src/conf/domain_conf.c | 66 +++++++++++++++++++++++-----------------<br>
> --<br>
>  1 file changed, 36 insertions(+), 30 deletions(-)<br>
> <br>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c<br>
> index 8d328819..3228f12a 100644<br>
> --- a/src/conf/domain_conf.c<br>
> +++ b/src/conf/domain_conf.c<br>
> @@ -4804,13 +4804,15 @@ virDomainDefPostParseTimer(virDomainDefPtr<br>
> def)<br>
>  }<br>
>  <br>
>  <br>
> -static void<br>
> +static int<br>
>  virDomainDefPostParseGraphics(virDomainDef *def)<br>
>  {<br>
>      size_t i;<br>
>  <br>
>      for (i = 0; i < def->ngraphics; i++) {<br>
> +        size_t j;<br>
>          virDomainGraphicsDefPtr graphics = def->graphics[i];<br>
> +        const char *graphicsType =<br>
> virDomainGraphicsTypeToString(graphics->type);<br>
>  <br>
>          /* If spice graphics is configured without ports and with<br>
> autoport='no'<br>
>           * then we start qemu with Spice to not listen<br>
> anywhere.  Let's convert<br>
> @@ -4826,8 +4828,38 @@ virDomainDefPostParseGraphics(virDomainDef<br>
> *def)<br>
>                  VIR_FREE(glisten->address);<br>
>                  glisten->type =<br>
> VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE;<br>
>              }<br>
> +<br>
> +        }<br>
> +<br>
> +        for (j = 0; j < graphics->nListens; j++) {<br>
> +            virDomainGraphicsListenDefPtr glisten =<br>
> virDomainGraphicsGetListen(graphics, j);<br>
> +            switch (glisten->type) {<br>
> +                case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:<br>
> +                    if (graphics->type !=<br>
> VIR_DOMAIN_GRAPHICS_TYPE_VNC &&<br>
> +                            graphics->type !=<br>
> VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {<br>
> +                        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,<br>
> +                                _("listen type 'socket' is not<br>
> available for "<br>
> +                                    "graphics type '%s'"),<br>
> graphicsType);<br>
> +                        return -1;<br>
> +                    }<br>
> +                    break;<br>
> +                case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:<br>
> +                    if (graphics->type !=<br>
> VIR_DOMAIN_GRAPHICS_TYPE_SPICE &&<br>
> +                            graphics->type !=<br>
> VIR_DOMAIN_GRAPHICS_TYPE_VNC) {<br>
> +                        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,<br>
> +                                _("listen type 'none' is not<br>
> available for "<br>
> +                                    "graphics type '%s'"),<br>
> graphicsType);<br>
> +                        return -1;<br>
> +                    }<br>
> +                    break;<br>
> +                case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:<br>
> +                case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:<br>
> +                case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:<br>
> +                    break;<br>
> +            }<br>
>          }<br>
>      }<br>
> +    return 0;<br>
>  }<br>
>  <br>
>  <br>
> @@ -5915,7 +5947,8 @@ virDomainDefPostParseCommon(virDomainDefPtr<br>
> def,<br>
>      /* clean up possibly duplicated metadata entries */<br>
>      virXMLNodeSanitizeNamespaces(def->metadata);<br>
>  <br>
> -    virDomainDefPostParseGraphics(def);<br>
> +    if (virDomainDefPostParseGraphics(def) < 0)<br>
> +        return -1;<br>
>  <br>
>      if (virDomainDefPostParseCPU(def) < 0)<br>
>          return -1;<br>
> @@ -14140,13 +14173,11 @@ virDomainGraphicsAuthDefParseXML(xmlNodePtr<br>
> node,<br>
>   */<br>
>  static int<br>
>  virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDefPtr<br>
> def,<br>
> -                                   virDomainGraphicsDefPtr graphics,<br>
>                                     xmlNodePtr node,<br>
>                                     xmlNodePtr parent,<br>
>                                     unsigned int flags)<br>
>  {<br>
>      int ret = -1;<br>
> -    const char *graphicsType =<br>
> virDomainGraphicsTypeToString(graphics->type);<br>
>      int tmp, typeVal;<br>
>      g_autofree char *type = virXMLPropString(node, "type");<br>
>      g_autofree char *address = virXMLPropString(node, "address");<br>
> @@ -14175,31 +14206,6 @@<br>
> virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDefPtr def,<br>
>      }<br>
>      def->type = typeVal;<br>
>  <br>
> -    switch (def->type) {<br>
> -    case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:<br>
> -        if (graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC &&<br>
> -            graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {<br>
> -            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,<br>
> -                           _("listen type 'socket' is not available<br>
> for "<br>
> -                             "graphics type '%s'"), graphicsType);<br>
> -            goto error;<br>
> -        }<br>
> -        break;<br>
> -    case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:<br>
> -        if (graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE &&<br>
> -            graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC) {<br>
> -            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,<br>
> -                           _("listen type 'none' is not available<br>
> for "<br>
> -                             "graphics type '%s'"), graphicsType);<br>
> -            goto error;<br>
> -        }<br>
> -        break;<br>
> -    case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:<br>
> -    case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:<br>
> -    case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:<br>
> -        break;<br>
> -    }<br>
> -<br>
>      if (def->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS) {<br>
>          if (address && addressCompat && STRNEQ(address,<br>
> addressCompat)) {<br>
>              virReportError(VIR_ERR_CONFIG_UNSUPPORTED,<br>
> @@ -14309,7 +14315,7 @@<br>
> virDomainGraphicsListensParseXML(virDomainGraphicsDefPtr def,<br>
>              goto cleanup;<br>
>  <br>
>          for (i = 0; i < nListens; i++) {<br>
> -            if (virDomainGraphicsListenDefParseXML(&def->listens[i], <br>
> def,<br>
> +            if (virDomainGraphicsListenDefParseXML(&def->listens[i],<br>
>                                                     listenNodes[i],<br>
>                                                     i == 0 ? node :<br>
> NULL,<br>
>                                                     flags) < 0)<br>
<br>
<br>
Reviewed-by: Jonathon Jongsma <<a href="mailto:jjongsma@redhat.com" target="_blank">jjongsma@redhat.com</a>><br>
<br>
It looks like there are still some additional validation checks in this<br>
function that could be also moved in subsequent patches if you're<br>
motivated.<br>
<br>
</blockquote></div>