[PATCH v2] Correct include-password option and rewrite domdisplay

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The 'virsh domdisplay' command is able to display the password
configured for spice, but it was missing for vnc type graphics.
Also, there were some inconsistencies that are cleaned now.
---
 tools/virsh-domain.c | 74 +++++++++++++++++++++++++++++-----------------------
 1 file changed, 42 insertions(+), 32 deletions(-)

diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index cc47383..cc5c830 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -7038,8 +7038,11 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd)
     /* Attempt to grab our display info */
     for (iter = 0; scheme[iter] != NULL; iter++) {
         /* Create our XPATH lookup for the current display's port */
-        virAsprintf(&xpath, "string(/domain/devices/graphics[@type='%s']"
-                "/@port)", scheme[iter]);
+        virAsprintf(&xpath,
+                    "string(/domain/devices/graphics[@type='%s']"
+                    "/@port)",
+                    scheme[iter]);
+
         if (!xpath) {
             virReportOOMError();
             goto cleanup;
@@ -7056,8 +7059,10 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd)
             continue;

         /* Create our XPATH lookup for the current display's address */
-        virAsprintf(&xpath, "string(/domain/devices/graphics[@type='%s']"
-                "/@listen)", scheme[iter]);
+        virAsprintf(&xpath,
+                    "string(/domain/devices/graphics[@type='%s']"
+                    "/@listen)",
+                    scheme[iter]);
         if (!xpath) {
             virReportOOMError();
             goto cleanup;
@@ -7069,14 +7074,36 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd)
         listen_addr = virXPathString(xpath, ctxt);
         VIR_FREE(xpath);

+        /* We can query this info for all the graphics types since we'll
+         * get nothing for the unsupported ones (just rdp for now) */
+        if (vshCommandOptBool(cmd, "include-password")) {
+            /* Create our XPATH lookup for the password */
+            virAsprintf(&xpath,
+                        "string(/domain/devices/graphics"
+                        "[@type='%s']/@passwd)",
+                        scheme[iter]);
+
+            if (!xpath) {
+                virReportOOMError();
+                goto cleanup;
+            }
+
+            /* Attempt to get the password */
+            passwd = virXPathString(xpath, ctxt);
+            VIR_FREE(xpath);
+        }
+
         /* Per scheme data mangling */
         if (STREQ(scheme[iter], "vnc")) {
-            /* VNC protocol handlers take their port number as 'port' - 5900 */
+            /* VNC protocol handlers take their port number as
+             * 'port' - 5900 */
             port -= 5900;
         } else if (STREQ(scheme[iter], "spice")) {
             /* Create our XPATH lookup for the SPICE TLS Port */
-            virAsprintf(&xpath, "string(/domain/devices/graphics[@type='%s']"
-                    "/@tlsPort)", scheme[iter]);
+            virAsprintf(&xpath,
+                        "string(/domain/devices/graphics[@type='%s']"
+                        "/@tlsPort)",
+                        scheme[iter]);
             if (!xpath) {
                 virReportOOMError();
                 goto cleanup;
@@ -7087,25 +7114,17 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd)
             VIR_FREE(xpath);
             if (tmp)
                 tls_port = 0;
-
-            if (vshCommandOptBool(cmd, "include-password")) {
-                /* Create our XPATH lookup for the SPICE password */
-                virAsprintf(&xpath, "string(/domain/devices/graphics"
-                        "[@type='%s']/@passwd)", scheme[iter]);
-                if (!xpath) {
-                    virReportOOMError();
-                    goto cleanup;
-                }
-
-                /* Attempt to get the SPICE password */
-                passwd = virXPathString(xpath, ctxt);
-                VIR_FREE(xpath);
-            }
         }

         /* Build up the full URI, starting with the scheme */
         virBufferAsprintf(&buf, "%s://", scheme[iter]);

+        /* There is no user, so just append password if there's any */
+        if (passwd) {
+            virBufferAsprintf(&buf, ":%s@", passwd);
+            VIR_FREE(passwd);
+        }
+
         /* Then host name or IP */
         if (!listen_addr || STREQ((const char *)listen_addr, "0.0.0.0"))
             virBufferAddLit(&buf, "localhost");
@@ -7115,20 +7134,11 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd)
         VIR_FREE(listen_addr);

         /* Add the port */
-        if (STREQ(scheme[iter], "spice"))
-            virBufferAsprintf(&buf, "?port=%d", port);
-        else
-            virBufferAsprintf(&buf, ":%d", port);
+        virBufferAsprintf(&buf, ":%d", port);

         /* TLS Port */
         if (tls_port)
-            virBufferAsprintf(&buf, "&tls-port=%d", tls_port);
-
-        /* Password */
-        if (passwd) {
-            virBufferAsprintf(&buf, "&password=%s", passwd);
-            VIR_FREE(passwd);
-        }
+            virBufferAsprintf(&buf, "?tls-port=%d", tls_port);

         /* Ensure we can print our URI */
         if (virBufferError(&buf)) {
-- 
1.8.0

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list


[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]