summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Bolognani <abologna@redhat.com>2023-05-10 19:56:59 +0200
committerAndrea Bolognani <abologna@redhat.com>2023-05-11 15:04:50 +0200
commit769de39f50da88542181c406aef16ce84dd584da (patch)
treeb12c113140a8159978d5746a74c32e64b327ee47
parentdb91bf2ba31766809f901e9b2bd02b4a9c917300 (diff)
downloadlibvirt-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>
-rw-r--r--src/qemu/qemu_dbus.c14
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;
}