Index: /trunk/include/iprt/dir.h
===================================================================
--- /trunk/include/iprt/dir.h	(revision 39627)
+++ /trunk/include/iprt/dir.h	(revision 39628)
@@ -305,5 +305,5 @@
  * @{ */
 /** Don't allow symbolic links as part of the path. */
-#define RTDIROPENFILTERED_FLAGS_NO_SYMLINKS  RT_BIT(0)
+#define RTDIROPEN_FLAGS_NO_SYMLINKS  RT_BIT(0)
 /** @} */
 
Index: /trunk/include/iprt/path.h
===================================================================
--- /trunk/include/iprt/path.h	(revision 39627)
+++ /trunk/include/iprt/path.h	(revision 39628)
@@ -127,4 +127,6 @@
 /** Last component: Follow if link. */
 #define RTPATH_F_FOLLOW_LINK      RT_BIT_32(1)
+/** Don't allow symbolic links as part of the path. */
+#define RTPATH_F_NO_SYMLINKS      RT_BIT_32(2)
 /** @} */
 
@@ -133,6 +135,6 @@
  * @remarks The parameters will be referenced multiple times. */
 #define RTPATH_F_IS_VALID(fFlags, fIgnore) \
-    (    ((fFlags) & ~(uint32_t)(fIgnore)) == RTPATH_F_ON_LINK \
-      || ((fFlags) & ~(uint32_t)(fIgnore)) == RTPATH_F_FOLLOW_LINK )
+    (    ((fFlags) & ~(uint32_t)((fIgnore)|RTPATH_F_NO_SYMLINKS)) == RTPATH_F_ON_LINK \
+      || ((fFlags) & ~(uint32_t)((fIgnore)|RTPATH_F_NO_SYMLINKS)) == RTPATH_F_FOLLOW_LINK )
 
 
Index: /trunk/src/VBox/HostServices/SharedFolders/service.cpp
===================================================================
--- /trunk/src/VBox/HostServices/SharedFolders/service.cpp	(revision 39627)
+++ /trunk/src/VBox/HostServices/SharedFolders/service.cpp	(revision 39628)
@@ -244,8 +244,8 @@
             else
             {
-                pszFolderName = (char*)RTStrAlloc(cbFolderName);
+                pszFolderName = (char*)RTStrAlloc(cbFolderName + 1);
                 AssertReturn(pszFolderName, VERR_NO_MEMORY);
 
-                rc = SSMR3GetStrZ(pSSM, mapping.pszFolderName, cbFolderName);
+                rc = SSMR3GetStrZ(pSSM, pszFolderName, cbFolderName + 1);
                 AssertRCReturn(rc, rc);
                 mapping.pszFolderName = pszFolderName;
Index: /trunk/src/VBox/HostServices/SharedFolders/vbsf.cpp
===================================================================
--- /trunk/src/VBox/HostServices/SharedFolders/vbsf.cpp	(revision 39627)
+++ /trunk/src/VBox/HostServices/SharedFolders/vbsf.cpp	(revision 39628)
@@ -42,7 +42,4 @@
 #endif
 
-// never follow symbolic links */
-//#define SHFL_RT_LINK(pClient) ((pClient)->fu32Flags & SHFL_CF_SYMLINKS ? RTPATH_F_ON_LINK : RTPATH_F_FOLLOW_LINK)
-#define SHFL_RT_LINK(pClient) (RTPATH_F_ON_LINK)
 
 /**
@@ -139,5 +136,5 @@
     strcat(pDirEntry->szName, szWildCard);
 
-    rc = RTDirOpenFiltered(&hSearch, pDirEntry->szName, RTDIRFILTER_WINNT, RTDIROPENFILTERED_FLAGS_NO_SYMLINKS);
+    rc = RTDirOpenFiltered(&hSearch, pDirEntry->szName, RTDIRFILTER_WINNT, RTDIROPEN_FLAGS_NO_SYMLINKS);
     *(pszStartComponent-1) = RTPATH_DELIMITER;
     if (RT_FAILURE(rc))
@@ -148,5 +145,5 @@
         size_t cbDirEntrySize = cbDirEntry;
 
-        rc = RTDirReadEx(hSearch, pDirEntry, &cbDirEntrySize, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient));
+        rc = RTDirReadEx(hSearch, pDirEntry, &cbDirEntrySize, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
         if (rc == VERR_NO_MORE_FILES)
             break;
@@ -426,5 +423,6 @@
     if (RT_SUCCESS(rc))
     {
-        /* When the host file system is case sensitive and the guest expects a case insensitive fs, then problems can occur */
+        /* When the host file system is case sensitive and the guest expects
+         * a case insensitive fs, then problems can occur */
         if (     vbsfIsHostMappingCaseSensitive(root)
             &&  !vbsfIsGuestMappingCaseSensitive(root))
@@ -435,5 +433,6 @@
             if (fWildCard || fPreserveLastComponent)
             {
-                /* strip off the last path component, that has to be preserved: contains the wildcard(s) or a 'rename' target. */
+                /* strip off the last path component, that has to be preserved:
+                 * contains the wildcard(s) or a 'rename' target. */
                 size_t cb = strlen(pszFullPath);
                 char *pszSrc = pszFullPath + cb - 1;
@@ -470,5 +469,5 @@
 
             /** @todo don't check when creating files or directories; waste of time */
-            rc = RTPathQueryInfoEx(pszFullPath, &info, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient));
+            rc = RTPathQueryInfoEx(pszFullPath, &info, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
             if (rc == VERR_FILE_NOT_FOUND || rc == VERR_PATH_NOT_FOUND)
             {
@@ -484,5 +483,5 @@
                     {
                         *pszSrc = 0;
-                        rc = RTPathQueryInfoEx(pszFullPath, &info, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient));
+                        rc = RTPathQueryInfoEx(pszFullPath, &info, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
                         *pszSrc = RTPATH_DELIMITER;
                         if (rc == VINF_SUCCESS)
@@ -520,5 +519,5 @@
                             fEndOfString = false;
                             *pszEnd = 0;
-                            rc = RTPathQueryInfoEx(pszSrc, &info, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient));
+                            rc = RTPathQueryInfoEx(pszSrc, &info, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
                             Assert(rc == VINF_SUCCESS || rc == VERR_FILE_NOT_FOUND || rc == VERR_PATH_NOT_FOUND);
                         }
@@ -860,5 +859,5 @@
 
             /** @todo Possible race left here. */
-            if (RT_SUCCESS(RTPathQueryInfoEx(pszPath, &info, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient))))
+            if (RT_SUCCESS(RTPathQueryInfoEx(pszPath, &info, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK)))
             {
 #ifdef RT_OS_WINDOWS
@@ -1032,5 +1031,5 @@
             /* Open the directory now */
             rc = RTDirOpenFiltered(&pHandle->dir.Handle, pszPath,
-                                   RTDIRFILTER_NONE, RTDIROPENFILTERED_FLAGS_NO_SYMLINKS);
+                                   RTDIRFILTER_NONE, RTDIROPEN_FLAGS_NO_SYMLINKS);
             if (RT_SUCCESS(rc))
             {
@@ -1135,5 +1134,5 @@
     int rc;
 
-    rc = RTPathQueryInfoEx(pszPath, &info, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient));
+    rc = RTPathQueryInfoEx(pszPath, &info, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
     LogFlow(("SHFL_CF_LOOKUP\n"));
     /* Client just wants to know if the object exists. */
@@ -1241,5 +1240,5 @@
             RTFSOBJINFO info;
 
-            rc = RTPathQueryInfoEx(pszFullPath, &info, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient));
+            rc = RTPathQueryInfoEx(pszFullPath, &info, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
             LogFlow(("RTPathQueryInfoEx returned %Rrc\n", rc));
 
@@ -1547,5 +1546,5 @@
             {
                 rc = RTDirOpenFiltered(&pHandle->dir.SearchHandle, pszFullPath,
-                                       RTDIRFILTER_WINNT, RTDIROPENFILTERED_FLAGS_NO_SYMLINKS);
+                                       RTDIRFILTER_WINNT, RTDIROPEN_FLAGS_NO_SYMLINKS);
 
                 /* free the path string */
@@ -1576,5 +1575,5 @@
             pDirEntry = pDirEntryOrg;
 
-            rc = RTDirReadEx(DirHandle, pDirEntry, &cbDirEntrySize, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient));
+            rc = RTDirReadEx(DirHandle, pDirEntry, &cbDirEntrySize, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
             if (rc == VERR_NO_MORE_FILES)
             {
@@ -2295,5 +2294,5 @@
     {
         RTFSOBJINFO info;
-        rc = RTPathQueryInfoEx(pszFullNewPath, &info, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient));
+        rc = RTPathQueryInfoEx(pszFullNewPath, &info, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
         if (RT_SUCCESS(rc))
             vbfsCopyFsObjInfoFromIprt(pInfo, &info);
