Changeset 39627 in vbox for trunk/src/VBox/HostServices/SharedFolders
- Timestamp:
- Dec 15, 2011 11:44:19 AM (13 years ago)
- Location:
- trunk/src/VBox/HostServices/SharedFolders
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostServices/SharedFolders/service.cpp
r39626 r39627 244 244 else 245 245 { 246 pszFolderName = (char*)RTStrAlloc(cbFolderName + 1);246 pszFolderName = (char*)RTStrAlloc(cbFolderName); 247 247 AssertReturn(pszFolderName, VERR_NO_MEMORY); 248 248 249 rc = SSMR3GetStrZ(pSSM, pszFolderName, cbFolderName + 1);249 rc = SSMR3GetStrZ(pSSM, mapping.pszFolderName, cbFolderName); 250 250 AssertRCReturn(rc, rc); 251 251 mapping.pszFolderName = pszFolderName; -
trunk/src/VBox/HostServices/SharedFolders/vbsf.cpp
r39626 r39627 42 42 #endif 43 43 44 // never follow symbolic links */ 45 //#define SHFL_RT_LINK(pClient) ((pClient)->fu32Flags & SHFL_CF_SYMLINKS ? RTPATH_F_ON_LINK : RTPATH_F_FOLLOW_LINK) 46 #define SHFL_RT_LINK(pClient) (RTPATH_F_ON_LINK) 47 44 48 /** 45 49 * @todo find a better solution for supporting the execute bit for non-windows … … 135 139 strcat(pDirEntry->szName, szWildCard); 136 140 137 rc = RTDirOpenFiltered(&hSearch, pDirEntry->szName, RTDIRFILTER_WINNT, RTDIROPEN _FLAGS_NO_SYMLINKS);141 rc = RTDirOpenFiltered(&hSearch, pDirEntry->szName, RTDIRFILTER_WINNT, RTDIROPENFILTERED_FLAGS_NO_SYMLINKS); 138 142 *(pszStartComponent-1) = RTPATH_DELIMITER; 139 143 if (RT_FAILURE(rc)) … … 144 148 size_t cbDirEntrySize = cbDirEntry; 145 149 146 rc = RTDirReadEx(hSearch, pDirEntry, &cbDirEntrySize, RTFSOBJATTRADD_NOTHING, 147 RTPATH_F_ON_LINK | RTPATH_F_NO_SYMLINKS); 150 rc = RTDirReadEx(hSearch, pDirEntry, &cbDirEntrySize, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient)); 148 151 if (rc == VERR_NO_MORE_FILES) 149 152 break; … … 423 426 if (RT_SUCCESS(rc)) 424 427 { 425 /* When the host file system is case sensitive and the guest expects 426 * a case insensitive fs, then problems can occur */ 428 /* When the host file system is case sensitive and the guest expects a case insensitive fs, then problems can occur */ 427 429 if ( vbsfIsHostMappingCaseSensitive(root) 428 430 && !vbsfIsGuestMappingCaseSensitive(root)) … … 433 435 if (fWildCard || fPreserveLastComponent) 434 436 { 435 /* strip off the last path component, that has to be preserved: 436 * contains the wildcard(s) or a 'rename' target. */ 437 /* strip off the last path component, that has to be preserved: contains the wildcard(s) or a 'rename' target. */ 437 438 size_t cb = strlen(pszFullPath); 438 439 char *pszSrc = pszFullPath + cb - 1; … … 469 470 470 471 /** @todo don't check when creating files or directories; waste of time */ 471 rc = RTPathQueryInfoEx(pszFullPath, &info, RTFSOBJATTRADD_NOTHING, 472 RTPATH_F_ON_LINK | RTPATH_F_NO_SYMLINKS); 472 rc = RTPathQueryInfoEx(pszFullPath, &info, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient)); 473 473 if (rc == VERR_FILE_NOT_FOUND || rc == VERR_PATH_NOT_FOUND) 474 474 { … … 484 484 { 485 485 *pszSrc = 0; 486 rc = RTPathQueryInfoEx(pszFullPath, &info, RTFSOBJATTRADD_NOTHING, 487 RTPATH_F_ON_LINK | RTPATH_F_NO_SYMLINKS); 486 rc = RTPathQueryInfoEx(pszFullPath, &info, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient)); 488 487 *pszSrc = RTPATH_DELIMITER; 489 488 if (rc == VINF_SUCCESS) … … 521 520 fEndOfString = false; 522 521 *pszEnd = 0; 523 rc = RTPathQueryInfoEx(pszSrc, &info, RTFSOBJATTRADD_NOTHING, 524 RTPATH_F_ON_LINK | RTPATH_F_NO_SYMLINKS); 522 rc = RTPathQueryInfoEx(pszSrc, &info, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient)); 525 523 Assert(rc == VINF_SUCCESS || rc == VERR_FILE_NOT_FOUND || rc == VERR_PATH_NOT_FOUND); 526 524 } … … 862 860 863 861 /** @todo Possible race left here. */ 864 if (RT_SUCCESS(RTPathQueryInfoEx(pszPath, &info, RTFSOBJATTRADD_NOTHING, 865 RTPATH_F_ON_LINK | RTPATH_F_NO_SYMLINKS))) 862 if (RT_SUCCESS(RTPathQueryInfoEx(pszPath, &info, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient)))) 866 863 { 867 864 #ifdef RT_OS_WINDOWS … … 1035 1032 /* Open the directory now */ 1036 1033 rc = RTDirOpenFiltered(&pHandle->dir.Handle, pszPath, 1037 RTDIRFILTER_NONE, RTDIROPEN _FLAGS_NO_SYMLINKS);1034 RTDIRFILTER_NONE, RTDIROPENFILTERED_FLAGS_NO_SYMLINKS); 1038 1035 if (RT_SUCCESS(rc)) 1039 1036 { … … 1133 1130 * @retval pParms->Info On success, information returned about the file 1134 1131 */ 1135 static int vbsfLookupFile(SHFLCLIENTDATA *pClient, SHFLROOT root,char *pszPath, SHFLCREATEPARMS *pParms)1132 static int vbsfLookupFile(SHFLCLIENTDATA *pClient, char *pszPath, SHFLCREATEPARMS *pParms) 1136 1133 { 1137 1134 RTFSOBJINFO info; 1138 1135 int rc; 1139 1136 1140 char szRealPath[RTPATH_MAX + 1]; 1141 const char *pszRoot = vbsfMappingsQueryHostRoot(root); 1142 AssertReturn(pszRoot, VERR_INVALID_PARAMETER); 1143 rc = RTPathReal(pszPath, szRealPath, sizeof(szRealPath)); 1144 AssertRCReturn(rc, rc); 1145 if (!RTPathStartsWith(szRealPath, pszRoot)) 1146 return VERR_TOO_MANY_SYMLINKS; 1147 1148 rc = RTPathQueryInfoEx(pszPath, &info, RTFSOBJATTRADD_NOTHING, 1149 RTPATH_F_ON_LINK | RTPATH_F_NO_SYMLINKS); 1137 rc = RTPathQueryInfoEx(pszPath, &info, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient)); 1150 1138 LogFlow(("SHFL_CF_LOOKUP\n")); 1151 1139 /* Client just wants to know if the object exists. */ … … 1246 1234 if (BIT_FLAG(pParms->CreateFlags, SHFL_CF_LOOKUP)) 1247 1235 { 1248 rc = vbsfLookupFile(pClient, root,pszFullPath, pParms);1236 rc = vbsfLookupFile(pClient, pszFullPath, pParms); 1249 1237 } 1250 1238 else … … 1253 1241 RTFSOBJINFO info; 1254 1242 1255 rc = RTPathQueryInfoEx(pszFullPath, &info, RTFSOBJATTRADD_NOTHING, 1256 RTPATH_F_ON_LINK | RTPATH_F_NO_SYMLINKS); 1243 rc = RTPathQueryInfoEx(pszFullPath, &info, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient)); 1257 1244 LogFlow(("RTPathQueryInfoEx returned %Rrc\n", rc)); 1258 1245 … … 1308 1295 { 1309 1296 if (BIT_FLAG(pParms->CreateFlags, SHFL_CF_DIRECTORY)) 1297 { 1310 1298 rc = vbsfOpenDir(pClient, pszFullPath, pParms); 1299 } 1311 1300 else 1301 { 1312 1302 rc = vbsfOpenFile(pClient, pszFullPath, pParms); 1303 } 1313 1304 } 1314 1305 else … … 1514 1505 PRTDIR DirHandle; 1515 1506 bool fUtf8; 1516 1507 1517 1508 fUtf8 = BIT_FLAG(pClient->fu32Flags, SHFL_CF_UTF8) != 0; 1518 1509 … … 1555 1546 if (RT_SUCCESS(rc)) 1556 1547 { 1557 #if 0 1558 const char *pszRoot = vbsfMappingsQueryHostRoot(root); 1559 if (!pszRoot) 1560 { 1561 rc = VERR_INVALID_PARAMETER; 1562 goto end; 1563 } 1564 char szRealPath[RTPATH_MAX + 1]; 1565 rc = RTPathReal(pszFullPath, szRealPath, sizeof(szRealPath)); 1548 rc = RTDirOpenFiltered(&pHandle->dir.SearchHandle, pszFullPath, 1549 RTDIRFILTER_WINNT, RTDIROPENFILTERED_FLAGS_NO_SYMLINKS); 1550 1551 /* free the path string */ 1552 vbsfFreeFullPath(pszFullPath); 1553 1566 1554 if (RT_FAILURE(rc)) 1567 1555 goto end; 1568 if (!RTPathStartsWith(szRealPath, pszRoot))1569 {1570 rc = VERR_TOO_MANY_SYMLINKS;1571 goto end;1572 }1573 #endif1574 rc = RTDirOpenFiltered(&pHandle->dir.SearchHandle, pszFullPath,1575 RTDIRFILTER_WINNT, RTDIROPEN_FLAGS_NO_SYMLINKS);1576 1577 /* free the path string */1578 vbsfFreeFullPath(pszFullPath);1579 1580 if (RT_FAILURE(rc))1581 goto end;1582 1556 } 1583 1557 else … … 1602 1576 pDirEntry = pDirEntryOrg; 1603 1577 1604 rc = RTDirReadEx(DirHandle, pDirEntry, &cbDirEntrySize, RTFSOBJATTRADD_NOTHING, 1605 RTPATH_F_ON_LINK | RTPATH_F_NO_SYMLINKS); 1578 rc = RTDirReadEx(DirHandle, pDirEntry, &cbDirEntrySize, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient)); 1606 1579 if (rc == VERR_NO_MORE_FILES) 1607 1580 { … … 2322 2295 { 2323 2296 RTFSOBJINFO info; 2324 rc = RTPathQueryInfoEx(pszFullNewPath, &info, RTFSOBJATTRADD_NOTHING, 2325 RTPATH_F_ON_LINK | RTPATH_F_NO_SYMLINKS); 2297 rc = RTPathQueryInfoEx(pszFullNewPath, &info, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient)); 2326 2298 if (RT_SUCCESS(rc)) 2327 2299 vbfsCopyFsObjInfoFromIprt(pInfo, &info);
Note:
See TracChangeset
for help on using the changeset viewer.