[libvirt] [PATCH 1/2] vmware: Fix initialization of VMware Fusion
Rainer Müller
raimue at codingfarm.de
Fri Apr 13 18:48:11 UTC 2018
On 2018-04-11 14:02, John Ferlan wrote:
>
>
> 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.
Thank you for the review. Indeed, this was sloppy testing on my end.
I will prepare a v2.
> 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.
virFileResolveLink already calls lstat(2) to check whether the given
path is actually link. If it is not, the output is a copy of the input.
So this will already work in the way you describe.
Rainer
> 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;
>> };
>>
>>
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>
More information about the libvir-list
mailing list