static VOID VmDirPagedSearchCacheRecordFree( PVDIR_PAGED_SEARCH_RECORD pSearchRecord ) { PVOID pvData = NULL; BOOLEAN bInLock = FALSE; if (pSearchRecord == NULL) { return; } VMDIR_LOCK_MUTEX(bInLock, gPagedSearchCache.mutex); (VOID)LwRtlHashTableRemove(gPagedSearchCache.pHashTbl, &pSearchRecord->Node); VMDIR_UNLOCK_MUTEX(bInLock, gPagedSearchCache.mutex); VmDirFreeStringA(pSearchRecord->pszGuid); DeleteFilter(pSearchRecord->pFilter); while (dequePop(pSearchRecord->pQueue, (PVOID*)&pvData) == 0) { VmDirFreeMemory(pvData); } dequeFree(pSearchRecord->pQueue); VmDirFreeMutex(pSearchRecord->mutex); VmDirFreeCondition(pSearchRecord->pDataAvailable); VmDirSrvThrFree(pSearchRecord->pThreadInfo); VmDirFreeMemory(pSearchRecord); }
int wmain(int argc, wchar_t* argv[]) { DWORD dwError = 0; PSTR* ppszArgs = NULL; int iArg = 0; dwError = VmDirAllocateMemory(sizeof(PSTR) * argc, (PVOID*)&ppszArgs); BAIL_ON_VMDIR_ERROR(dwError); for (; iArg < argc; iArg++) { dwError = VmDirAllocateStringAFromW(argv[iArg], &ppszArgs[iArg]); BAIL_ON_VMDIR_ERROR(dwError); } dwError = VmDirMain(argc, ppszArgs); BAIL_ON_VMDIR_ERROR(dwError); error: if (ppszArgs) { for (iArg = 0; iArg < argc; iArg++) { VMDIR_SAFE_FREE_MEMORY(ppszArgs[iArg]); } VmDirFreeMemory(ppszArgs); } return dwError; }
static VOID VmDirSrvFreeAccessToken( PVMDIR_SRV_ACCESS_TOKEN pAccessToken ) { VMDIR_SAFE_FREE_MEMORY(pAccessToken->pszUPN); VmDirFreeMemory(pAccessToken); }
static int GenerateDeleteAttrsMods( PVDIR_OPERATION pOperation, VDIR_ENTRY * pEntry ) { int retVal = 0; VDIR_MODIFICATION * delMod = NULL; VDIR_ATTRIBUTE * attr = NULL; PVDIR_ATTRIBUTE objectGuidAttr = NULL; VDIR_BERVALUE deletedObjDN = VDIR_BERVALUE_INIT; ModifyReq * modReq = &(pOperation->request.modifyReq); for ( attr = pEntry->attrs; attr != NULL; attr = attr->next ) { // Retain the following kind of attributes if (attr->pATDesc->usage != VDIR_ATTRIBUTETYPE_USER_APPLICATIONS || VmDirStringCompareA( attr->type.lberbv.bv_val, ATTR_OBJECT_CLASS, FALSE ) == 0) { continue; } retVal = VmDirAllocateMemory( sizeof( VDIR_MODIFICATION ), (PVOID *)&(delMod) ); BAIL_ON_VMDIR_ERROR( retVal ); delMod->operation = MOD_OP_DELETE; delMod->attr.next = NULL; delMod->attr.type = attr->type; delMod->attr.pATDesc = attr->pATDesc; delMod->attr.vals = NULL; delMod->attr.numVals = 0; delMod->next = modReq->mods; modReq->mods = delMod; modReq->numMods++; } // Add mod to set new DN. objectGuidAttr = VmDirEntryFindAttribute(ATTR_OBJECT_GUID, pEntry); assert( objectGuidAttr ); retVal = constructDeletedObjDN( &pOperation->request.deleteReq.dn, objectGuidAttr->vals[0].lberbv.bv_val, &deletedObjDN ); BAIL_ON_VMDIR_ERROR( retVal ); retVal = VmDirAppendAMod( pOperation, MOD_OP_REPLACE, ATTR_DN, ATTR_DN_LEN, deletedObjDN.lberbv.bv_val, deletedObjDN.lberbv.bv_len ); BAIL_ON_VMDIR_ERROR( retVal ); cleanup: VmDirFreeMemory( deletedObjDN.lberbv.bv_val ); return retVal; error: goto cleanup; }
VOID VmDirStringListFree( PVMDIR_STRING_LIST pStringList ) { if (pStringList != NULL) { VmDirStringListFreeContent(pStringList); VMDIR_SAFE_FREE_MEMORY(pStringList->pStringList); VmDirFreeMemory(pStringList); } }
static VOID _VmDirPagedSearchEntryListFree( PVDIR_PAGED_SEARCH_ENTRY_LIST pEntryList ) { if (pEntryList) { VMDIR_SAFE_FREE_MEMORY(pEntryList->pEntryIds); VmDirFreeMemory(pEntryList); } }
static VOID VmDirFreeArgs( PVMDIR_QUERY_ARGS pArgs ) { if (pArgs) { VMDIR_SAFE_FREE_MEMORY(pArgs->pszHostname); VMDIR_SAFE_FREE_MEMORY(pArgs->pszBindDN); VMDIR_SAFE_FREE_MEMORY(pArgs->pszPassword); VMDIR_SAFE_FREE_MEMORY(pArgs->pszBaseDN); VMDIR_SAFE_FREE_MEMORY(pArgs->pszFilter); VmDirFreeMemory(pArgs); } }
VOID VmDirFreeStringArrayW( PWSTR* ppwszStrings, DWORD dwCount ) { if (ppwszStrings) { DWORD idx = 0; for (; idx < dwCount; idx++) { VMDIR_SAFE_FREE_MEMORY(ppwszStrings[idx]); } VmDirFreeMemory(ppwszStrings); } }
DWORD VmwDeployGetPartnerSiteName( PCSTR pszServer, PSTR* ppszSite ) { DWORD dwError = 0; PSTR pszVmDirSite = NULL; PSTR pszSite = NULL; if (IsNullOrEmptyString(pszServer)) { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_DEPLOY_ERROR(dwError); } dwError = VmDirGetPartnerSiteName(pszServer, &pszVmDirSite); BAIL_ON_DEPLOY_ERROR(dwError); dwError = VmwDeployAllocateStringA(pszVmDirSite, &pszSite); BAIL_ON_DEPLOY_ERROR(dwError); *ppszSite = pszSite; cleanup: if (pszVmDirSite) { VmDirFreeMemory(pszVmDirSite); } return dwError; error: if (ppszSite) { *ppszSite = NULL; } goto cleanup; }
DWORD VmDirKrbRealmNameNormalize( PCSTR pszName, PSTR* ppszNormalizeName ) { DWORD dwError = 0; PSTR pszRealmName = NULL; if ( !pszName || !ppszNormalizeName) { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMDIR_ERROR(dwError); } dwError = VmDirAllocateStringA(pszName, &pszRealmName); BAIL_ON_VMDIR_ERROR(dwError); { size_t iCnt=0; size_t iLen = VmDirStringLenA(pszRealmName); for (iCnt = 0; iCnt < iLen; iCnt++) { VMDIR_ASCII_LOWER_TO_UPPER(pszRealmName[iCnt]); } } *ppszNormalizeName = pszRealmName; cleanup: return dwError; error: VmDirFreeMemory(pszRealmName); goto cleanup; }
static DWORD constructDeletedObjDN( VDIR_BERVALUE * dn, const char * objectGuidStr, VDIR_BERVALUE * deletedObjDN ) { DWORD dwError = 0; VDIR_BERVALUE parentDN = VDIR_BERVALUE_INIT; size_t deletedObjDNLen = 0; size_t delObjsConatinerDNLength = gVmdirServerGlobals.delObjsContainerDN.lberbv.bv_len; char * delObjsConatinerDN = gVmdirServerGlobals.delObjsContainerDN.lberbv.bv_val; deletedObjDN->lberbv.bv_val = NULL; deletedObjDN->lberbv.bv_len = 0; if (!delObjsConatinerDN) { dwError = VMDIR_ERROR_ENTRY_NOT_FOUND; BAIL_ON_VMDIR_ERROR( dwError ); } dwError = VmDirGetParentDN( dn, &parentDN ); BAIL_ON_VMDIR_ERROR( dwError ); // Format of the DN of a deleted object is: // <original RDN>#objectGUID:<object GUID string>,<DN of the Deleted objects container> deletedObjDNLen = (parentDN.lberbv.bv_len ? dn->lberbv.bv_len - parentDN.lberbv.bv_len - 1 /* Count out RDN separator */ : dn->lberbv.bv_len) + 1 /* for # */ + ATTR_OBJECT_GUID_LEN + 1 /* for : */ + VmDirStringLenA( objectGuidStr ) + 1 /* for , */ + delObjsConatinerDNLength; dwError = VmDirAllocateMemory( deletedObjDNLen + 1, (PVOID *)&deletedObjDN->lberbv.bv_val ); BAIL_ON_VMDIR_ERROR( dwError ); deletedObjDN->lberbv.bv_len = parentDN.lberbv.bv_len ? dn->lberbv.bv_len - parentDN.lberbv.bv_len - 1 /* Count out RDN separator */ : dn->lberbv.bv_len; // TODO: how do we know the actual buffer size ? dwError = VmDirCopyMemory( deletedObjDN->lberbv.bv_val, deletedObjDN->lberbv.bv_len, dn->lberbv.bv_val, deletedObjDN->lberbv.bv_len ); BAIL_ON_VMDIR_ERROR( dwError ); deletedObjDN->lberbv.bv_val[deletedObjDN->lberbv.bv_len] = '#'; deletedObjDN->lberbv.bv_len++; // TODO: how do we know the actual buffer size ? dwError = VmDirCopyMemory( deletedObjDN->lberbv.bv_val + deletedObjDN->lberbv.bv_len, ATTR_OBJECT_GUID_LEN, ATTR_OBJECT_GUID, ATTR_OBJECT_GUID_LEN ); BAIL_ON_VMDIR_ERROR( dwError ); deletedObjDN->lberbv.bv_len += ATTR_OBJECT_GUID_LEN; deletedObjDN->lberbv.bv_val[deletedObjDN->lberbv.bv_len] = ':'; deletedObjDN->lberbv.bv_len++; // TODO: how do we know the actual buffer size ? dwError = VmDirCopyMemory( deletedObjDN->lberbv.bv_val + deletedObjDN->lberbv.bv_len, VmDirStringLenA( objectGuidStr ), (PVOID)objectGuidStr, VmDirStringLenA( objectGuidStr ) ); BAIL_ON_VMDIR_ERROR( dwError ); deletedObjDN->lberbv.bv_len += VmDirStringLenA( objectGuidStr ); // TODO: how do we know the actual buffer size ? VmDirStringPrintFA( deletedObjDN->lberbv.bv_val + deletedObjDN->lberbv.bv_len, delObjsConatinerDNLength + 2, ",%s", delObjsConatinerDN ); deletedObjDN->lberbv.bv_len += delObjsConatinerDNLength + 1 /* for , */; cleanup: VmDirFreeBervalContent( &parentDN ); return dwError; error: if (deletedObjDN->lberbv.bv_val != NULL) { VmDirFreeMemory( deletedObjDN->lberbv.bv_val ); deletedObjDN->lberbv.bv_val = NULL; } deletedObjDN->lberbv.bv_len = 0; goto cleanup; }