windows-nt/Source/XPSP1/NT/net/layer2svc/wlstore/ldaputils.c
2020-09-26 16:20:57 +08:00

186 lines
4 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);
}