//---------------------------------------------------------------------------- // // 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); }