[libvirt] [PATCH] virt-admin: Properly fix the default session daemon URI to admin server

Erik Skultety eskultet at redhat.com
Tue Aug 9 13:43:57 UTC 2016


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 at redhat.com>
---
 src/libvirt-admin.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/libvirt-admin.c b/src/libvirt-admin.c
index 4552e84..03245b6 100644
--- a/src/libvirt-admin.c
+++ b/src/libvirt-admin.c
@@ -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;
+            }
         }
     }
 
-- 
2.5.5




More information about the libvir-list mailing list