]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Find dbus-daemon at runtime
authorAndrea Bolognani <abologna@redhat.com>
Wed, 10 May 2023 17:56:59 +0000 (19:56 +0200)
committerAndrea Bolognani <abologna@redhat.com>
Thu, 11 May 2023 13:04:50 +0000 (15:04 +0200)
Don't bother looking at /usr/libexec, since every distro
ships dbus-daemon in $PATH.

Note that it's still possible for the administrator to prevent
this lookup and use an arbitrary binary by setting the
appropriate key in qemu.conf.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_dbus.c

index 7a7af2850e6755a20ba00f5cbf09b36449cdd0b6..06b655d870883c25d067132e7ad3f5e02645893f 100644 (file)
@@ -175,6 +175,7 @@ qemuDBusStart(virQEMUDriver *driver,
     g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
     qemuDomainObjPrivate *priv = vm->privateData;
     g_autoptr(virCommand) cmd = NULL;
+    g_autofree char *dbusDaemonPath = NULL;
     g_autofree char *shortName = NULL;
     g_autofree char *pidfile = NULL;
     g_autofree char *configfile = NULL;
@@ -188,13 +189,16 @@ qemuDBusStart(virQEMUDriver *driver,
     if (priv->dbusDaemonRunning)
         return 0;
 
-    if (!virFileIsExecutable(cfg->dbusDaemonName)) {
+    dbusDaemonPath = virFindFileInPath(cfg->dbusDaemonName);
+    if (!dbusDaemonPath) {
         virReportSystemError(errno,
                              _("'%1$s' is not a suitable dbus-daemon"),
                              cfg->dbusDaemonName);
         return -1;
     }
 
+    VIR_DEBUG("Using dbus-daemon: %s", dbusDaemonPath);
+
     if (!(shortName = virDomainDefGetShortName(vm->def)))
         return -1;
 
@@ -210,7 +214,7 @@ qemuDBusStart(virQEMUDriver *driver,
     if (qemuSecurityDomainSetPathLabel(driver, vm, configfile, false) < 0)
         goto cleanup;
 
-    cmd = virCommandNew(cfg->dbusDaemonName);
+    cmd = virCommandNew(dbusDaemonPath);
     virCommandClearCaps(cmd);
     virCommandSetPidFile(cmd, pidfile);
     virCommandSetErrorFD(cmd, &errfd);
@@ -223,7 +227,7 @@ qemuDBusStart(virQEMUDriver *driver,
     if (virPidFileReadPath(pidfile, &cpid) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("dbus-daemon %1$s didn't show up"),
-                       cfg->dbusDaemonName);
+                       dbusDaemonPath);
         goto cleanup;
     }
 
@@ -241,7 +245,7 @@ qemuDBusStart(virQEMUDriver *driver,
         if (saferead(errfd, errbuf, sizeof(errbuf) - 1) < 0) {
             virReportSystemError(errno,
                                  _("dbus-daemon %1$s died unexpectedly"),
-                                 cfg->dbusDaemonName);
+                                 dbusDaemonPath);
         } else {
             virReportError(VIR_ERR_OPERATION_FAILED,
                            _("dbus-daemon died and reported: %1$s"), errbuf);
@@ -253,7 +257,7 @@ qemuDBusStart(virQEMUDriver *driver,
     if (!virFileExists(sockpath)) {
         virReportError(VIR_ERR_OPERATION_TIMEOUT,
                        _("dbus-daemon %1$s didn't show up"),
-                       cfg->dbusDaemonName);
+                       dbusDaemonPath);
         goto cleanup;
     }