]> xenbits.xensource.com Git - libvirt.git/commitdiff
virt-admin: Properly fix the default session daemon URI to admin server
authorErik Skultety <eskultet@redhat.com>
Tue, 9 Aug 2016 11:57:41 +0000 (13:57 +0200)
committerErik Skultety <eskultet@redhat.com>
Tue, 9 Aug 2016 13:24:19 +0000 (15:24 +0200)
Commit 30ce2f0e tried to fix the issue with an incorrect session URI to admin
server but it messed up the checks:

    if (geteuid == 0 && VIR_STRDUP(*uristr, "libvirtd:///system") < 0)
        return -1;
    else if (VIR_STRDUP(*uristr, "libvirtd:///session") < 0)
        return -1;

So if a client executed with root privileges tries to connect, its euid is
checked (true) and the correct URI is successfully copied to @uristr (false),
therefore the 'else' branch is taken and @uristr is replaced by the session URI
which for root results in:
    Failed to connect socket to '/root/.cache/libvirt/libvirt-admin-sock':
    No such file or directory

Signed-off-by: Erik Skultety <eskultet@redhat.com>
src/libvirt-admin.c

index 4552e84a6e71c6746c0c944310258a2c5036e70b..03245b636f0c9d57e42c0b17bed7e2b1b2a8a532 100644 (file)
@@ -179,11 +179,13 @@ virAdmGetDefaultURI(virConfPtr conf, char **uristr)
              * we set the default admin server URI to 'libvirtd:///system' or
              * 'libvirtd:///session' depending on the process's EUID.
              */
-            if (geteuid() == 0 &&
-                VIR_STRDUP(*uristr, "libvirtd:///system") < 0)
+            if (geteuid() == 0) {
+                if (VIR_STRDUP(*uristr, "libvirtd:///system") < 0)
                     return -1;
-            else if (VIR_STRDUP(*uristr, "libvirtd:///session") < 0)
+            } else {
+                if (VIR_STRDUP(*uristr, "libvirtd:///session") < 0)
                     return -1;
+            }
         }
     }