libfreerdp-auth: get FreeContextBuffer to work

This commit is contained in:
Marc-André Moreau 2012-02-24 15:35:48 -05:00
parent a30fbf3905
commit 0303c7a3d4
2 changed files with 23 additions and 8 deletions

View File

@ -71,6 +71,8 @@ void test_EnumerateSecurityPackages(void)
pPackageInfo[index].Name, pPackageInfo[index].Comment);
}
}
FreeContextBuffer(pPackageInfo);
}
void test_QuerySecurityPackageInfo(void)
@ -145,6 +147,8 @@ void test_InitializeSecurityContext(void)
status = QuerySecurityPackageInfo(NTLM_PACKAGE_NAME, &pPackageInfo);
printf("pPackageInfo: 0x%08X ppPackageInfo:0x%08X\n", pPackageInfo, &pPackageInfo);
if (status != SEC_E_OK)
{
printf("QuerySecurityPackageInfo status: 0x%08X\n", status);
@ -200,6 +204,8 @@ void test_InitializeSecurityContext(void)
freerdp_hexdump((uint8*) p_sec_buffer->pvBuffer, p_sec_buffer->cbBuffer);
table->FreeCredentialsHandle(&credentials);
FreeContextBuffer(pPackageInfo);
}

View File

@ -76,7 +76,7 @@ void sspi_ContextBufferAllocTableNew()
size_t size;
ContextBufferAllocTable.cEntries = 0;
ContextBufferAllocTable.cMaxEntries = 64;
ContextBufferAllocTable.cMaxEntries = 4;
size = sizeof(CONTEXT_BUFFER_ALLOC_ENTRY) * ContextBufferAllocTable.cMaxEntries;
@ -104,14 +104,18 @@ void sspi_ContextBufferAllocTableFree()
void* sspi_ContextBufferAlloc(uint32 allocatorIndex, size_t size)
{
int index;
void* contextBuffer;
for (index = 0; index < ContextBufferAllocTable.cMaxEntries; index++)
{
if (ContextBufferAllocTable.entries[index].contextBuffer == NULL)
{
contextBuffer = xzalloc(size);
ContextBufferAllocTable.cEntries++;
ContextBufferAllocTable.entries[index].contextBuffer = xzalloc(size);
ContextBufferAllocTable.entries[index].contextBuffer = contextBuffer;
ContextBufferAllocTable.entries[index].allocatorIndex = allocatorIndex;
return ContextBufferAllocTable.entries[index].contextBuffer;
}
}
@ -125,8 +129,8 @@ void* sspi_ContextBufferAlloc(uint32 allocatorIndex, size_t size)
return sspi_ContextBufferAlloc(allocatorIndex, size);
}
void FreeContextBuffer_EnumerateSecurityPackages(SEC_PKG_INFO* pPackageInfo);
void FreeContextBuffer_QuerySecurityPackageInfo(SEC_PKG_INFO* pPackageInfo);
void FreeContextBuffer_EnumerateSecurityPackages(void* contextBuffer);
void FreeContextBuffer_QuerySecurityPackageInfo(void* contextBuffer);
void sspi_ContextBufferFree(void* contextBuffer)
{
@ -137,20 +141,22 @@ void sspi_ContextBufferFree(void* contextBuffer)
{
if (contextBuffer == ContextBufferAllocTable.entries[index].contextBuffer)
{
contextBuffer = ContextBufferAllocTable.entries[index].contextBuffer;
allocatorIndex = ContextBufferAllocTable.entries[index].allocatorIndex;
ContextBufferAllocTable.cEntries--;
ContextBufferAllocTable.entries[index].allocatorIndex = 0;
ContextBufferAllocTable.entries[index].contextBuffer = NULL;
switch (allocatorIndex)
{
case EnumerateSecurityPackagesIndex:
FreeContextBuffer_EnumerateSecurityPackages((SEC_PKG_INFO*) contextBuffer);
FreeContextBuffer_EnumerateSecurityPackages(contextBuffer);
break;
case QuerySecurityPackageInfoIndex:
FreeContextBuffer_QuerySecurityPackageInfo((SEC_PKG_INFO*) contextBuffer);
FreeContextBuffer_QuerySecurityPackageInfo(contextBuffer);
break;
}
}
@ -308,10 +314,11 @@ SECURITY_STATUS EnumerateSecurityPackages(uint32* pcPackages, SEC_PKG_INFO** ppP
return SEC_E_OK;
}
void FreeContextBuffer_EnumerateSecurityPackages(SEC_PKG_INFO* pPackageInfo)
void FreeContextBuffer_EnumerateSecurityPackages(void* contextBuffer)
{
int index;
uint32 cPackages;
SEC_PKG_INFO* pPackageInfo = (SEC_PKG_INFO*) contextBuffer;
cPackages = sizeof(SEC_PKG_INFO_LIST) / sizeof(SEC_PKG_INFO*);
@ -369,8 +376,10 @@ SECURITY_STATUS QuerySecurityPackageInfo(char* pszPackageName, SEC_PKG_INFO** pp
return SEC_E_SECPKG_NOT_FOUND;
}
void FreeContextBuffer_QuerySecurityPackageInfo(SEC_PKG_INFO* pPackageInfo)
void FreeContextBuffer_QuerySecurityPackageInfo(void* contextBuffer)
{
SEC_PKG_INFO* pPackageInfo = (SEC_PKG_INFO*) contextBuffer;
if (pPackageInfo->Name)
xfree(pPackageInfo->Name);