1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-10 18:51:21 +03:00

0028391: Foundation Classes - OSD_Directory returns incorrect protection flags for shared directory on Windows

Redirect Folder reading flags to File reading flags when Folder flags are not found.
This commit is contained in:
kgv 2017-01-25 17:51:03 +03:00 committed by apn
parent 06bc0a59fa
commit 2b3e2b780d

View File

@ -2601,113 +2601,48 @@ static OSD_SingleProtection __fastcall _get_protection ( DWORD mask ) {
} // end _get_protection } // end _get_protection
static OSD_SingleProtection __fastcall _get_protection_dir ( DWORD mask ) { static OSD_SingleProtection __fastcall _get_protection_dir (DWORD theMask)
{
OSD_SingleProtection retVal; switch (theMask)
{
switch ( mask ) { case GENERIC_READ:
return OSD_R;
case GENERIC_READ: case GENERIC_WRITE:
return OSD_W;
retVal = OSD_R; case GENERIC_READ | GENERIC_WRITE:
return OSD_RW;
break; case GENERIC_EXECUTE:
return OSD_X;
case GENERIC_WRITE: case GENERIC_READ | GENERIC_EXECUTE:
return OSD_RX;
retVal = OSD_W; case GENERIC_WRITE | GENERIC_EXECUTE:
return OSD_WX;
break; case GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE:
return OSD_RWX;
case GENERIC_READ | GENERIC_WRITE: case DELETE:
return OSD_D;
retVal = OSD_RW; case GENERIC_READ | DELETE:
return OSD_RD;
break; case GENERIC_WRITE | DELETE:
return OSD_WD;
case GENERIC_EXECUTE: case GENERIC_READ | GENERIC_WRITE | DELETE:
return OSD_RWD;
retVal = OSD_X; case GENERIC_EXECUTE | DELETE:
return OSD_XD;
break; case GENERIC_READ | GENERIC_EXECUTE | DELETE:
return OSD_RXD;
case GENERIC_READ | GENERIC_EXECUTE: case GENERIC_WRITE | GENERIC_EXECUTE | DELETE:
return OSD_WXD;
retVal = OSD_RX; case FILE_ALL_ACCESS:
case GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE | DELETE:
break; return OSD_RWXD;
case 0:
case GENERIC_WRITE | GENERIC_EXECUTE: return OSD_None;
default:
retVal = OSD_WX; // remote directories (on Samba server) have flags like for files
return _get_protection (theMask);
break; }
}
case GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE:
retVal = OSD_RWX;
break;
case DELETE:
retVal = OSD_D;
break;
case GENERIC_READ | DELETE:
retVal = OSD_RD;
break;
case GENERIC_WRITE | DELETE:
retVal = OSD_WD;
break;
case GENERIC_READ | GENERIC_WRITE | DELETE:
retVal = OSD_RWD;
break;
case GENERIC_EXECUTE | DELETE:
retVal = OSD_XD;
break;
case GENERIC_READ | GENERIC_EXECUTE | DELETE:
retVal = OSD_RXD;
break;
case GENERIC_WRITE | GENERIC_EXECUTE | DELETE:
retVal = OSD_WXD;
break;
case FILE_ALL_ACCESS:
case GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE | DELETE:
retVal = OSD_RWXD;
break;
case 0:
default:
retVal = OSD_None;
} // end switch
return retVal;
} // end _get_protection_dir
#endif #endif
Standard_Boolean OSD_File::IsReadable() Standard_Boolean OSD_File::IsReadable()