+189
@@ -0,0 +1,189 @@
|
||||
From 369dd2ee3c82c4417fee04aeec933c74fd198e78 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 23 Jan 2018 15:09:20 +0100
|
||||
Subject: [PATCH resend] VBoxServiceAutoMount: Change Linux mount code to use
|
||||
an options string
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
.../common/VBoxService/VBoxServiceAutoMount.cpp | 62 +++-------------------
|
||||
1 file changed, 8 insertions(+), 54 deletions(-)
|
||||
|
||||
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp
|
||||
--- ./src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp.orig 2019-04-16 11:09:11.000000000 +0100
|
||||
+++ ./src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp 2019-04-26 17:10:47.178485356 +0100
|
||||
@@ -40,6 +40,7 @@
|
||||
#include <iprt/ctype.h>
|
||||
#include <iprt/dir.h>
|
||||
#include <iprt/mem.h>
|
||||
+#include <iprt/param.h>
|
||||
#include <iprt/path.h>
|
||||
#include <iprt/semaphore.h>
|
||||
#include <iprt/sort.h>
|
||||
@@ -114,6 +115,9 @@ RT_C_DECLS_END
|
||||
# define VBOXSERVICE_AUTOMOUNT_MIQF SHFL_MIQF_PATH
|
||||
#endif
|
||||
|
||||
+#ifndef MAX_MNTOPT_STR
|
||||
+#define MAX_MNTOPT_STR PAGE_SIZE
|
||||
+#endif
|
||||
|
||||
/*********************************************************************************************************************************
|
||||
* Structures and Typedefs *
|
||||
@@ -400,13 +399,13 @@ static int vbsvcAutoMountSharedFolderOld
|
||||
int rc = vbsvcAutoMountPrepareMountPointOld(pszMountPoint, pszShareName, &Opts);
|
||||
if (RT_SUCCESS(rc))
|
||||
{
|
||||
+ char szOptBuf[MAX_MNTOPT_STR] = { '\0', };
|
||||
+ RTStrPrintf(szOptBuf, sizeof(szOptBuf), "uid=%d,gid=%d,dmode=%0o,fmode=%0o,dmask=%0o,fmask=%0o",
|
||||
+ Opts.uid, Opts.gid, Opts.dmode, Opts.fmode, Opts.dmask, Opts.fmask);
|
||||
# ifdef RT_OS_SOLARIS
|
||||
int fFlags = 0;
|
||||
if (Opts.ronly)
|
||||
fFlags |= MS_RDONLY;
|
||||
- char szOptBuf[MAX_MNTOPT_STR] = { '\0', };
|
||||
- RTStrPrintf(szOptBuf, sizeof(szOptBuf), "uid=%d,gid=%d,dmode=%0o,fmode=%0o,dmask=%0o,fmask=%0o",
|
||||
- Opts.uid, Opts.gid, Opts.dmode, Opts.fmode, Opts.dmask, Opts.fmask);
|
||||
int r = mount(pszShareName,
|
||||
pszMountPoint,
|
||||
fFlags | MS_OPTIONSTR,
|
||||
@@ -423,35 +422,11 @@ static int vbsvcAutoMountSharedFolderOld
|
||||
|
||||
# else /* RT_OS_LINUX */
|
||||
unsigned long fFlags = MS_NODEV;
|
||||
-
|
||||
- /*const char *szOptions = { "rw" }; - ??? */
|
||||
- struct vbsf_mount_info_new mntinf;
|
||||
- RT_ZERO(mntinf);
|
||||
-
|
||||
- mntinf.nullchar = '\0';
|
||||
- mntinf.signature[0] = VBSF_MOUNT_SIGNATURE_BYTE_0;
|
||||
- mntinf.signature[1] = VBSF_MOUNT_SIGNATURE_BYTE_1;
|
||||
- mntinf.signature[2] = VBSF_MOUNT_SIGNATURE_BYTE_2;
|
||||
- mntinf.length = sizeof(mntinf);
|
||||
-
|
||||
- mntinf.uid = Opts.uid;
|
||||
- mntinf.gid = Opts.gid;
|
||||
- mntinf.ttl = Opts.ttl;
|
||||
- mntinf.dmode = Opts.dmode;
|
||||
- mntinf.fmode = Opts.fmode;
|
||||
- mntinf.dmask = Opts.dmask;
|
||||
- mntinf.fmask = Opts.fmask;
|
||||
- mntinf.cMaxIoPages = Opts.cMaxIoPages;
|
||||
- mntinf.szTag[0] = '\0';
|
||||
-
|
||||
- strcpy(mntinf.name, pszShareName);
|
||||
- strcpy(mntinf.nls_name, "\0");
|
||||
-
|
||||
int r = mount(pszShareName,
|
||||
pszMountPoint,
|
||||
"vboxsf",
|
||||
fFlags,
|
||||
- &mntinf);
|
||||
+ szOptBuf);
|
||||
if (r == 0)
|
||||
{
|
||||
VGSvcVerbose(0, "vbsvcAutoMountWorker: Shared folder '%s' was mounted to '%s'\n", pszShareName, pszMountPoint);
|
||||
@@ -484,34 +459,6 @@ static int vbsvcAutoMountSharedFolderOld
|
||||
}
|
||||
else /* r == -1, we got some error in errno. */
|
||||
{
|
||||
- if (errno == EPROTO)
|
||||
- {
|
||||
- VGSvcVerbose(3, "vbsvcAutoMountWorker: Messed up share name, re-trying ...\n");
|
||||
-
|
||||
- /** @todo r=bird: What on earth is going on here????? Why can't you
|
||||
- * strcpy(mntinf.name, pszShareName) to fix it again? */
|
||||
-
|
||||
- /* Sometimes the mount utility messes up the share name. Try to
|
||||
- * un-mangle it again. */
|
||||
- char szCWD[RTPATH_MAX];
|
||||
- size_t cchCWD;
|
||||
- if (!getcwd(szCWD, sizeof(szCWD)))
|
||||
- {
|
||||
- VGSvcError("vbsvcAutoMountWorker: Failed to get the current working directory\n");
|
||||
- szCWD[0] = '\0';
|
||||
- }
|
||||
- cchCWD = strlen(szCWD);
|
||||
- if (!strncmp(pszMountPoint, szCWD, cchCWD))
|
||||
- {
|
||||
- while (pszMountPoint[cchCWD] == '/')
|
||||
- ++cchCWD;
|
||||
- /* We checked before that we have enough space */
|
||||
- strcpy(mntinf.name, pszMountPoint + cchCWD);
|
||||
- }
|
||||
- r = mount(mntinf.name, pszMountPoint, "vboxsf", fFlags, &mntinf);
|
||||
- }
|
||||
- if (r == -1) /* Was there some error from one of the tries above? */
|
||||
- {
|
||||
switch (errno)
|
||||
{
|
||||
/* If we get EINVAL here, the system already has mounted the Shared Folder to another
|
||||
@@ -530,7 +477,6 @@ static int vbsvcAutoMountSharedFolderOld
|
||||
rc = RTErrConvertFromErrno(errno);
|
||||
break;
|
||||
}
|
||||
- }
|
||||
}
|
||||
# endif
|
||||
}
|
||||
@@ -1464,51 +1410,21 @@ static int vbsvcAutomounterMountIt(PVBSV
|
||||
}
|
||||
|
||||
# if defined(RT_OS_LINUX)
|
||||
- /*
|
||||
- * Linux a bit more work...
|
||||
- */
|
||||
- struct vbsf_mount_info_new MntInfo;
|
||||
- RT_ZERO(MntInfo);
|
||||
- struct vbsf_mount_opts MntOpts;
|
||||
- RT_ZERO(MntOpts);
|
||||
- MntInfo.nullchar = '\0';
|
||||
- MntInfo.signature[0] = VBSF_MOUNT_SIGNATURE_BYTE_0;
|
||||
- MntInfo.signature[1] = VBSF_MOUNT_SIGNATURE_BYTE_1;
|
||||
- MntInfo.signature[2] = VBSF_MOUNT_SIGNATURE_BYTE_2;
|
||||
- MntInfo.length = sizeof(MntInfo);
|
||||
- MntInfo.ttl = MntOpts.ttl = -1 /*default*/;
|
||||
- MntInfo.msDirCacheTTL= MntOpts.msDirCacheTTL = -1 /*default*/;
|
||||
- MntInfo.msInodeTTL = MntOpts.msInodeTTL = -1 /*default*/;
|
||||
- MntInfo.cMaxIoPages = MntOpts.cMaxIoPages = 0 /*default*/;
|
||||
- MntInfo.cbDirBuf = MntOpts.cbDirBuf = 0 /*default*/;
|
||||
- MntInfo.enmCacheMode = MntOpts.enmCacheMode = kVbsfCacheMode_Default;
|
||||
- MntInfo.uid = MntOpts.uid = 0;
|
||||
- MntInfo.gid = MntOpts.gid = gidMount;
|
||||
- MntInfo.dmode = MntOpts.dmode = 0770;
|
||||
- MntInfo.fmode = MntOpts.fmode = 0770;
|
||||
- MntInfo.dmask = MntOpts.dmask = 0000;
|
||||
- MntInfo.fmask = MntOpts.fmask = 0000;
|
||||
- memcpy(MntInfo.szTag, g_szTag, sizeof(g_szTag)); AssertCompile(sizeof(MntInfo.szTag) >= sizeof(g_szTag));
|
||||
- rc = RTStrCopy(MntInfo.name, sizeof(MntInfo.name), pEntry->pszName);
|
||||
- if (RT_FAILURE(rc))
|
||||
+ unsigned long fFlags = MS_NODEV;
|
||||
+ char szOpts[MAX_MNTOPT_STR] = { '\0', };
|
||||
+ ssize_t cchOpts = RTStrPrintf2(szOpts, sizeof(szOpts),
|
||||
+ "uid=0,gid=%d,dmode=0770,fmode=0770,dmask=0000,fmask=0000", gidMount);
|
||||
+ if (cchOpts <= 0)
|
||||
{
|
||||
- VGSvcError("vbsvcAutomounterMountIt: Share name '%s' is too long for the MntInfo.name field!\n", pEntry->pszName);
|
||||
- return rc;
|
||||
+ VGSvcError("vbsvcAutomounterMountIt: szOpts overflow! %zd\n", cchOpts);
|
||||
+ return VERR_BUFFER_OVERFLOW;
|
||||
}
|
||||
|
||||
- errno = 0;
|
||||
- unsigned long fFlags = MS_NODEV;
|
||||
- rc = mount(pEntry->pszName, pEntry->pszActualMountPoint, "vboxsf", fFlags, &MntInfo);
|
||||
+ rc = mount(pEntry->pszName, pEntry->pszActualMountPoint, "vboxsf", fFlags, szOpts);
|
||||
if (rc == 0)
|
||||
{
|
||||
VGSvcVerbose(0, "vbsvcAutomounterMountIt: Successfully mounted '%s' on '%s'\n",
|
||||
pEntry->pszName, pEntry->pszActualMountPoint);
|
||||
-
|
||||
- errno = 0;
|
||||
- rc = vbsfmount_complete(pEntry->pszName, pEntry->pszActualMountPoint, fFlags, &MntOpts);
|
||||
- if (rc != 0) /* Ignorable. /etc/mtab is probably a link to /proc/mounts. */
|
||||
- VGSvcVerbose(1, "vbsvcAutomounterMountIt: vbsfmount_complete failed: %s (%d/%d)\n",
|
||||
- rc == 1 ? "open_memstream" : rc == 2 ? "setmntent" : rc == 3 ? "addmntent" : "unknown", rc, errno);
|
||||
return VINF_SUCCESS;
|
||||
}
|
||||
else if (errno == EINVAL)
|
||||
@@ -55,24 +55,21 @@
|
||||
<Dependency>qt5-base-devel</Dependency>
|
||||
<Dependency>qt5-linguist</Dependency>
|
||||
<Dependency>docbook-xml</Dependency>
|
||||
<Dependency>libglvnd-devel</Dependency>
|
||||
<Dependency>libglvnd-devel</Dependency>
|
||||
</BuildDependencies>
|
||||
<AdditionalFiles>
|
||||
<AdditionalFile target="LocalConfig.kmk">LocalConfig.kmk</AdditionalFile>
|
||||
</AdditionalFiles>
|
||||
<Patches>
|
||||
<Patch level="1">wrapper.patch</Patch>
|
||||
<!-- <Patch level="1">002-dri-driver-path.patch</Patch> -->
|
||||
<Patch level="1">005-gsoap-build.patch</Patch>
|
||||
<Patch level="1">006-rdesktop-vrdp-keymap-path.patch</Patch>
|
||||
<Patch level="1">008-root-window.patch</Patch>
|
||||
<Patch level="1">python.patch</Patch>
|
||||
<Patch level="1">008-no-vboxvideo.patch</Patch>
|
||||
<Patch level="1">012-vboxsf-automount.patch</Patch>
|
||||
<!-- <Patch level="1">001_virtualbox-5.0.16-mesa-check.patch</Patch> --> -->
|
||||
<!-- <Patch level="1">009-virtualbox-5.1.0-add_missing_gl_header.patch</Patch> -->
|
||||
<Patch level="1">013-Makefile.patch</Patch>
|
||||
<Patch level="1">VirtualBox-6.1.2-disable-update.patch</Patch>
|
||||
<Patch level="1">0001-VBoxServiceAutoMount-Change-Linux-mount-code-to-use-.patch</Patch>
|
||||
</Patches>
|
||||
</Source>
|
||||
|
||||
@@ -103,6 +100,7 @@
|
||||
<Dependency>openssl</Dependency>
|
||||
<Dependency>device-mapper</Dependency>
|
||||
<Dependency>qt5-x11extras</Dependency>
|
||||
<Dependency>virtualbox-guest-iso</Dependency>
|
||||
<AnyDependency>
|
||||
<Dependency version="current">module-virtualbox</Dependency>
|
||||
<Dependency version="current">virtualbox-dkms</Dependency>
|
||||
@@ -197,6 +195,13 @@
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="33">
|
||||
<Date>2020-04-09</Date>
|
||||
<Version>6.1.4</Version>
|
||||
<Comment>Rebuild virtualbox-guest-iso</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="32">
|
||||
<Date>2020-02-22</Date>
|
||||
<Version>6.1.4</Version>
|
||||
|
||||
Reference in New Issue
Block a user