186 lines
3.6 KiB
C
186 lines
3.6 KiB
C
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 2000.
|
||
|
//
|
||
|
// File: ldaputils.c
|
||
|
//
|
||
|
// Contents: Utilities for LDAP.
|
||
|
//
|
||
|
//
|
||
|
// History: KrishnaG
|
||
|
// AbhisheV
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
|
||
|
#include "precomp.h"
|
||
|
|
||
|
|
||
|
void
|
||
|
FreeLDAPModWs(
|
||
|
struct ldapmodW ** AttributeList
|
||
|
)
|
||
|
{
|
||
|
DWORD i = 0;
|
||
|
PLDAPModW attr = NULL;
|
||
|
DWORD dwValCount = 0;
|
||
|
PLDAP_BERVAL berValue = NULL;
|
||
|
PWCHAR strValue = NULL;
|
||
|
|
||
|
|
||
|
if (AttributeList == NULL) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
while (AttributeList[i] != NULL) {
|
||
|
|
||
|
attr = AttributeList[i++];
|
||
|
|
||
|
if (attr->mod_type != NULL) {
|
||
|
FreePolStr(attr->mod_type);
|
||
|
}
|
||
|
|
||
|
if (attr->mod_op & LDAP_MOD_BVALUES) {
|
||
|
|
||
|
if (attr->mod_vals.modv_bvals != NULL) {
|
||
|
|
||
|
dwValCount = 0;
|
||
|
|
||
|
while (attr->mod_vals.modv_bvals[dwValCount]) {
|
||
|
|
||
|
berValue = attr->mod_vals.modv_bvals[dwValCount++];
|
||
|
FreePolMem(berValue);
|
||
|
|
||
|
}
|
||
|
|
||
|
FreePolMem(attr->mod_vals.modv_bvals);
|
||
|
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
|
||
|
if (attr->mod_vals.modv_strvals != NULL) {
|
||
|
|
||
|
dwValCount = 0;
|
||
|
|
||
|
while (attr->mod_vals.modv_strvals[dwValCount]) {
|
||
|
|
||
|
strValue = attr->mod_vals.modv_strvals[dwValCount];
|
||
|
FreePolMem(strValue);
|
||
|
dwValCount++;
|
||
|
|
||
|
}
|
||
|
|
||
|
FreePolMem(attr->mod_vals.modv_strvals);
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
FreePolMem(AttributeList[0]);
|
||
|
|
||
|
FreePolMem(AttributeList);
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
AllocateLDAPStringValue(
|
||
|
LPWSTR pszString,
|
||
|
PLDAPOBJECT * ppLdapObject
|
||
|
)
|
||
|
{
|
||
|
PLDAPOBJECT pLdapObject = NULL;
|
||
|
DWORD dwError = 0;
|
||
|
LPWSTR pszNewString = NULL;
|
||
|
|
||
|
pLdapObject = (PLDAPOBJECT)AllocPolMem(
|
||
|
(1 + 1)*sizeof(LDAPOBJECT)
|
||
|
);
|
||
|
if (!pLdapObject) {
|
||
|
dwError = ERROR_OUTOFMEMORY;
|
||
|
BAIL_ON_WIN32_ERROR(dwError);
|
||
|
}
|
||
|
|
||
|
dwError = AllocatePolString(
|
||
|
pszString,
|
||
|
&pszNewString
|
||
|
);
|
||
|
BAIL_ON_WIN32_ERROR(dwError);
|
||
|
|
||
|
LDAPOBJECT_STRING(pLdapObject) = pszNewString;
|
||
|
|
||
|
*ppLdapObject = pLdapObject;
|
||
|
|
||
|
return(dwError);
|
||
|
|
||
|
error:
|
||
|
|
||
|
*ppLdapObject = NULL;
|
||
|
if (pLdapObject) {
|
||
|
FreePolMem(
|
||
|
pLdapObject
|
||
|
);
|
||
|
}
|
||
|
|
||
|
return(dwError);
|
||
|
}
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
AllocateLDAPBinaryValue(
|
||
|
LPBYTE pByte,
|
||
|
DWORD dwNumBytes,
|
||
|
PLDAPOBJECT * ppLdapObject
|
||
|
)
|
||
|
{
|
||
|
PLDAPOBJECT pLdapObject = NULL;
|
||
|
DWORD dwError = 0;
|
||
|
LPBYTE pNewMem = NULL;
|
||
|
|
||
|
pLdapObject = (PLDAPOBJECT)AllocPolMem(
|
||
|
(1 + 1)*sizeof(LDAPOBJECT)
|
||
|
);
|
||
|
if (!pLdapObject) {
|
||
|
dwError = ERROR_OUTOFMEMORY;
|
||
|
BAIL_ON_WIN32_ERROR(dwError);
|
||
|
}
|
||
|
|
||
|
|
||
|
LDAPOBJECT_BERVAL(pLdapObject) =
|
||
|
(struct berval *) AllocPolMem( sizeof(struct berval) + dwNumBytes );
|
||
|
|
||
|
if (!LDAPOBJECT_BERVAL(pLdapObject)) {
|
||
|
dwError = ERROR_OUTOFMEMORY;
|
||
|
BAIL_ON_WIN32_ERROR(dwError);
|
||
|
}
|
||
|
|
||
|
|
||
|
LDAPOBJECT_BERVAL_LEN(pLdapObject) = dwNumBytes;
|
||
|
LDAPOBJECT_BERVAL_VAL(pLdapObject) = (CHAR *) ((LPBYTE) LDAPOBJECT_BERVAL(pLdapObject) + sizeof(struct berval));
|
||
|
|
||
|
memcpy( LDAPOBJECT_BERVAL_VAL(pLdapObject),
|
||
|
pByte,
|
||
|
dwNumBytes );
|
||
|
|
||
|
*ppLdapObject = pLdapObject;
|
||
|
|
||
|
return(dwError);
|
||
|
|
||
|
error:
|
||
|
|
||
|
*ppLdapObject = NULL;
|
||
|
if (pLdapObject) {
|
||
|
FreePolMem(
|
||
|
pLdapObject
|
||
|
);
|
||
|
}
|
||
|
|
||
|
return(dwError);
|
||
|
}
|
||
|
|