diff options
author | Andrea Bolognani <abologna@redhat.com> | 2023-05-10 19:56:59 +0200 |
---|---|---|
committer | Andrea Bolognani <abologna@redhat.com> | 2023-05-11 15:04:50 +0200 |
commit | 769de39f50da88542181c406aef16ce84dd584da (patch) | |
tree | b12c113140a8159978d5746a74c32e64b327ee47 /src/qemu | |
parent | db91bf2ba31766809f901e9b2bd02b4a9c917300 (diff) | |
download | libvirt-769de39f50da88542181c406aef16ce84dd584da.tar.gz |
qemu: Find dbus-daemon at runtime
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>
Diffstat (limited to 'src/qemu')
-rw-r--r-- | src/qemu/qemu_dbus.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/qemu/qemu_dbus.c b/src/qemu/qemu_dbus.c index 7a7af2850e..06b655d870 100644 --- a/src/qemu/qemu_dbus.c +++ b/src/qemu/qemu_dbus.c @@ -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; } |