[PATCH] virsh: Fix XPATH in virshDomainDeviceAliasCompleter()

Peter Krempa pkrempa at redhat.com
Fri Jan 22 09:18:00 UTC 2021


On Fri, Jan 22, 2021 at 09:39:01 +0100, Michal Privoznik wrote:
> The way this completer works is that it dumps XML of specified
> domain and then tries to look for @name attribute of <alias/>
> element. However, the XPATH it uses is not correct which results
> in no aliases returned by the completer.
> 
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  tools/virsh-completer-domain.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/virsh-completer-domain.c b/tools/virsh-completer-domain.c
> index 4a3459f12a..e773af6552 100644
> --- a/tools/virsh-completer-domain.c
> +++ b/tools/virsh-completer-domain.c
> @@ -316,14 +316,14 @@ virshDomainDeviceAliasCompleter(vshControl *ctl,
>      if (virshDomainGetXML(ctl, cmd, domainXMLFlags, &xmldoc, &ctxt) < 0)
>          return NULL;
>  
> -    naliases = virXPathNodeSet("./devices//alias/@name", ctxt, &aliases);
> +    naliases = virXPathNodeSet("/domain/devices//alias[@name]", ctxt, &aliases);

Another option would be //devices/ as start, but since we know it's a
domain XML full path is okay.

>      if (naliases < 0)
>          return NULL;
>  
>      tmp = g_new0(char *, naliases + 1);
>  
>      for (i = 0; i < naliases; i++) {
> -        if (!(tmp[i] = virXMLNodeContentString(aliases[i])))
> +        if (!(tmp[i] = virXMLPropString(aliases[i], "name")))

... and I actually prefer this.

>              return NULL;
>      }

Reviewed-by: Peter Krempa <pkrempa at redhat.com>




More information about the libvir-list mailing list