DWORD VmAfdConnectLdapWithMachineAccount( LDAP** ppLotus ) { DWORD dwError = 0; LDAP* pLotus = NULL; PSTR pszUpn = NULL; PVMAFD_REG_ARG pArgs = NULL; PWSTR pwszDCName = NULL; PSTR pszDCName = NULL; dwError = VmAfdGetMachineInfo(&pArgs); BAIL_ON_VMAFD_ERROR_NO_LOG(dwError); dwError = VmAfSrvGetAffinitizedDC(&pwszDCName); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfdAllocateStringAFromW(pwszDCName, &pszDCName); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfdAllocateStringPrintf( &pszUpn, "%s@%s", pArgs->pszAccount, pArgs->pszDomain); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfdLDAPConnect( pszDCName, LDAP_PORT, pszUpn, pArgs->pszPassword, &pLotus); BAIL_ON_VMAFD_ERROR_NO_LOG(dwError); *ppLotus = pLotus; cleanup: VMAFD_SAFE_FREE_STRINGA(pszUpn); VMAFD_SAFE_FREE_STRINGA(pszDCName); VMAFD_SAFE_FREE_STRINGW(pwszDCName); VmAfdFreeRegArgs(pArgs); return dwError; error: if (pLotus) { VmAfdLdapClose(pLotus); } goto cleanup; }
static DWORD VmAfSrvCheckDC( PDNS_SERVER_INFO pServerInfo, PCSTR pszDomain, PCSTR pszUPN, PCSTR pszPassword, PSTR* ppszHostname, PSTR* ppszNetworkAddress ) { DWORD dwError = 0; PSTR pszHostname = NULL; PSTR pszNetworkAddress = NULL; PSTR pszDomainOther = NULL; LDAP* pLd = NULL; dwError = VmAfdLDAPConnect( pServerInfo->pszAddress, 0, pszUPN, pszPassword, &pLd); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfdGetDefaultDomainName(pLd, &pszDomainOther); BAIL_ON_VMAFD_ERROR(dwError); if (VmAfdStringCompareA(pszDomain, pszDomainOther, FALSE) != 0) { dwError = ERROR_DC_NOT_FOUND; BAIL_ON_VMAFD_ERROR(dwError); } dwError = VmAfdAllocateStringA(pServerInfo->pszName, &pszHostname); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfdAllocateStringA(pServerInfo->pszAddress, &pszNetworkAddress); BAIL_ON_VMAFD_ERROR(dwError); *ppszHostname = pszHostname; *ppszNetworkAddress = pszNetworkAddress; cleanup: if (pLd) { VmAfdLdapClose(pLd); } VMAFD_SAFE_FREE_MEMORY(pszDomainOther); return dwError; error: *ppszNetworkAddress = NULL; *ppszHostname = NULL; VMAFD_SAFE_FREE_MEMORY(pszHostname); VMAFD_SAFE_FREE_MEMORY(pszNetworkAddress); goto cleanup; }