VOID LsaFreeStatus( PLSASTATUS pLsaStatus ) { DWORD iCount = 0; for (iCount = 0; iCount < pLsaStatus->dwCount; iCount++) { PLSA_AUTH_PROVIDER_STATUS pStatus = &pLsaStatus->pAuthProviderStatusList[iCount]; LW_SAFE_FREE_STRING(pStatus->pszId); LW_SAFE_FREE_STRING(pStatus->pszDomain); LW_SAFE_FREE_STRING(pStatus->pszForest); LW_SAFE_FREE_STRING(pStatus->pszSite); LW_SAFE_FREE_STRING(pStatus->pszCell); if (pStatus->pTrustedDomainInfoArray) { LsaFreeDomainInfoArray( pStatus->dwNumTrustedDomains, pStatus->pTrustedDomainInfoArray); } } LW_SAFE_FREE_MEMORY(pLsaStatus->pAuthProviderStatusList); LwFreeMemory(pLsaStatus); }
DWORD LsaSrvCopyTrustedDomainInfoArray( DWORD dwNumDomains, PLSA_TRUSTED_DOMAIN_INFO pSrcDomainInfoArray, PLSA_TRUSTED_DOMAIN_INFO* ppDomainInfoArray ) { DWORD dwError = 0; PLSA_TRUSTED_DOMAIN_INFO pDomainInfoArray = NULL; DWORD iDomain = 0; dwError = LwAllocateMemory( dwNumDomains * sizeof(LSA_TRUSTED_DOMAIN_INFO), (PVOID*)&pDomainInfoArray); BAIL_ON_LSA_ERROR(dwError); for (; iDomain < dwNumDomains; iDomain++) { PLSA_TRUSTED_DOMAIN_INFO pSrcDomainInfo = &pSrcDomainInfoArray[iDomain]; PLSA_TRUSTED_DOMAIN_INFO pDestDomainInfo = &pDomainInfoArray[iDomain]; dwError = LwStrDupOrNull( pSrcDomainInfo->pszDnsDomain, &pDestDomainInfo->pszDnsDomain); BAIL_ON_LSA_ERROR(dwError); dwError = LwStrDupOrNull( pSrcDomainInfo->pszNetbiosDomain, &pDestDomainInfo->pszNetbiosDomain); BAIL_ON_LSA_ERROR(dwError); dwError = LwStrDupOrNull( pSrcDomainInfo->pszDomainSID, &pDestDomainInfo->pszDomainSID); BAIL_ON_LSA_ERROR(dwError); dwError = LwStrDupOrNull( pSrcDomainInfo->pszDomainGUID, &pDestDomainInfo->pszDomainGUID); BAIL_ON_LSA_ERROR(dwError); dwError = LwStrDupOrNull( pSrcDomainInfo->pszTrusteeDnsDomain, &pDestDomainInfo->pszTrusteeDnsDomain); BAIL_ON_LSA_ERROR(dwError); pDestDomainInfo->dwTrustFlags = pSrcDomainInfo->dwTrustFlags; pDestDomainInfo->dwTrustType = pSrcDomainInfo->dwTrustType; pDestDomainInfo->dwTrustAttributes = pSrcDomainInfo->dwTrustAttributes; pDestDomainInfo->dwTrustDirection = pSrcDomainInfo->dwTrustDirection; pDestDomainInfo->dwTrustMode = pSrcDomainInfo->dwTrustMode; dwError = LwStrDupOrNull( pSrcDomainInfo->pszForestName, &pDestDomainInfo->pszForestName); BAIL_ON_LSA_ERROR(dwError); dwError = LwStrDupOrNull( pSrcDomainInfo->pszClientSiteName, &pDestDomainInfo->pszClientSiteName); BAIL_ON_LSA_ERROR(dwError); pDestDomainInfo->dwDomainFlags = pSrcDomainInfo->dwDomainFlags; if (pSrcDomainInfo->pDCInfo) { dwError = LsaSrvCopyDCInfo( pSrcDomainInfo->pDCInfo, &pDestDomainInfo->pDCInfo); BAIL_ON_LSA_ERROR(dwError); } if (pSrcDomainInfo->pGCInfo) { dwError = LsaSrvCopyDCInfo( pSrcDomainInfo->pGCInfo, &pDestDomainInfo->pGCInfo); BAIL_ON_LSA_ERROR(dwError); } } *ppDomainInfoArray = pDomainInfoArray; cleanup: return dwError; error: *ppDomainInfoArray = NULL; if (pDomainInfoArray) { LsaFreeDomainInfoArray(dwNumDomains, pDomainInfoArray); } goto cleanup; }