From 84095e1ecc5da96a6e93fa709d2feaacfac8d0b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rainer=20M=C3=BCller?= Date: Sat, 14 Apr 2018 11:25:42 +0200 Subject: [PATCH] vmware: Fix initialization of VMware Fusion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The vmware driver wants to execute vmware-vmx from the same directory in which vmrun was found. However, on VMware Fusion 10 vmrun at /Applications/VMware Fusion.app/Contents/Public/vmrun is a symlink pointing to ../Library/vmrun. vmware-vmx cannot be found, as it is not in PATH, but only in this Library directory. Therefore, follow the vmrun symlink and use the resulting path. Then the assumption that vmware-vmx is right next to it will still work. Signed-off-by: Rainer Müller --- src/vmware/vmware_driver.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/vmware/vmware_driver.c b/src/vmware/vmware_driver.c index c8a3151faf..b4b809f1a8 100644 --- a/src/vmware/vmware_driver.c +++ b/src/vmware/vmware_driver.c @@ -127,6 +127,7 @@ vmwareConnectOpen(virConnectPtr conn, struct vmware_driver *driver; size_t i; char *tmp; + char *vmrun = NULL; virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); @@ -149,7 +150,14 @@ vmwareConnectOpen(virConnectPtr conn, * for auto detection of the backend */ for (i = 0; i < ARRAY_CARDINALITY(vmrun_candidates); i++) { - driver->vmrun = virFindFileInPath(vmrun_candidates[i]); + vmrun = virFindFileInPath(vmrun_candidates[i]); + if (vmrun == NULL) + continue; + if (virFileResolveLink(vmrun, &driver->vmrun) < 0) { + virReportSystemError(errno, _("unable to resolve symlink '%s'"), vmrun); + goto cleanup; + } + VIR_FREE(vmrun); /* If we found one, we can stop looking */ if (driver->vmrun) break; @@ -200,6 +208,7 @@ vmwareConnectOpen(virConnectPtr conn, cleanup: vmwareFreeDriver(driver); + VIR_FREE(vmrun); return VIR_DRV_OPEN_ERROR; }; -- GitLab