Click to See Complete Forum and Search --> : PACL,PSID Leakage Problem


akhin
June 30th, 2007, 07:08 PM
In my main scope i declare my pointer variables :


...
PSID ownerSid = NULL ;
PACL pDACL = NULL ;
ownerSid = GetOwnerSIDFromFile (path);
pDACL = GetDACLFromFile (path);
if(ownerSid) FreeSid(ownerSid);
if(pDACL) LocalFree(pDACL);
...

PSID and PACL still cause leakages altgough i try to release them. How can i handle that situation ?

Here are 2 functions i call :


PSID GetOwnerSIDFromFile (char* sFileOrFolderName)
{
DWORD dwRtnCode = 0;
PSID pSidOwner = NULL ;
HANDLE hFile;
SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY;

hFile = CreateFile(
sFileOrFolderName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);



if (hFile == INVALID_HANDLE_VALUE)
return NULL ;




AllocateAndInitializeSid(&SIDAuthWorld, 1, SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0, &pSidOwner) ;

if( !pSidOwner )
{
CloseHandle(hFile);

return NULL ;
}


dwRtnCode = GetSecurityInfo(
hFile,
SE_FILE_OBJECT,
OWNER_SECURITY_INFORMATION,
&pSidOwner,
NULL,
NULL,
NULL,
NULL);


CloseHandle(hFile);

return pSidOwner ;
}

PACL GetDACLFromFile (char* sFileOrFolderName)

{
PACL pDACL = NULL ;
DWORD dwRtnCode = 0;

HANDLE hFile;


hFile = CreateFile(
sFileOrFolderName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

if (hFile == INVALID_HANDLE_VALUE)
return NULL ;

pDACL = (PACL)LocalAlloc(LPTR,sizeof(PACL));

if( !pDACL )
return NULL ;



dwRtnCode = GetSecurityInfo(
hFile,
SE_FILE_OBJECT,
DACL_SECURITY_INFORMATION,
NULL,
NULL,
&pDACL,
NULL,
NULL);

CloseHandle(hFile);

return pDACL ;
}

pupito
July 4th, 2007, 05:08 PM
You must specify the last parameter for GetSecurityInfo and call LocalFree on it