[libvirt] [PATCH 1/2] vmware: Fix initialization of VMware Fusion
John Ferlan
jferlan at redhat.com
Wed Apr 11 12:02:38 UTC 2018
On 04/03/2018 05:32 AM, Rainer Müller wrote:
> 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 <raimue at codingfarm.de>
> ---
> src/vmware/vmware_driver.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/src/vmware/vmware_driver.c b/src/vmware/vmware_driver.c
> index 8b487c4a7..60e1c1abc 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);
>
> @@ -164,7 +165,12 @@ 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]);
What if this returns NULL?
> + if (virFileResolveLink(vmrun, &driver->vmrun) < 0) {
I doubt this will be very happy...
> + virReportSystemError(errno, _("unable to resolve symlink '%s'"), vmrun);
> + goto cleanup;
> + }
> + VIR_FREE(vmrun);
Prior to this change - if @vmrun wasn't found in the path of
vmrun_candidates, we'd try the "next one" in the list.
With this change if @vmrun returned from virFindFileInPath is NULL, then
virFileResolveLink would fail, and we wouldn't try the next one in the list.
There is also virFileIsLink which you may want to consider - as in, what
we got back is a link, so let's resolve to save it; otherwise, use what
was found in path.
John
> /* If we found one, we can stop looking */
> if (driver->vmrun)
> break;
> @@ -215,6 +221,7 @@ vmwareConnectOpen(virConnectPtr conn,
>
> cleanup:
> vmwareFreeDriver(driver);
> + VIR_FREE(vmrun);
> return VIR_DRV_OPEN_ERROR;
> };
>
>
More information about the libvir-list
mailing list