DWORD VmAfdGetMachineInfo( PVMAFD_REG_ARG *ppArgs ) { DWORD dwError = 0; PWSTR pwszAccountName = NULL; PWSTR pwszPassword = NULL; PWSTR pwszAccountDN = NULL; PWSTR pwszDomain = NULL; PWSTR pwszAccount = NULL; PVMAFD_REG_ARG pArgs = NULL; VMAFD_DOMAIN_STATE domainState = VMAFD_DOMAIN_STATE_NONE ; dwError = VmAfSrvGetDomainState(&domainState); BAIL_ON_VMAFD_ERROR(dwError); if (domainState == VMAFD_DOMAIN_STATE_NONE) { dwError = ERROR_NOT_JOINED; BAIL_ON_VMAFD_ERROR_NO_LOG(dwError); } dwError = VmAfSrvGetMachineAccountInfo( &pwszAccount, &pwszPassword, &pwszAccountDN, NULL); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfdAllocateMemory( sizeof(VMAFD_REG_ARG), (PVOID*)&pArgs); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfdAllocateStringAFromW( pwszAccountDN, &pArgs->pszAccountDN); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfdAllocateStringAFromW( pwszPassword, &pArgs->pszPassword); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfdAllocateStringAFromW( pwszAccount, &pArgs->pszAccount); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfSrvGetDomainName(&pwszDomain); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfdAllocateStringAFromW( pwszDomain, &pArgs->pszDomain); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfdAllocateStringPrintf( &(pArgs->pszAccountUPN), "%s@%s", pArgs->pszAccount, pArgs->pszDomain); BAIL_ON_VMAFD_ERROR(dwError); if (IsNullOrEmptyString(pArgs->pszAccountDN) || IsNullOrEmptyString(pArgs->pszPassword)) { dwError = VECS_MISSING_CREDS; BAIL_ON_VMAFD_ERROR(dwError); } *ppArgs = pArgs; cleanup: VMAFD_SAFE_FREE_MEMORY(pwszAccountName); VMAFD_SAFE_FREE_MEMORY(pwszPassword); VMAFD_SAFE_FREE_MEMORY(pwszAccountDN); VMAFD_SAFE_FREE_MEMORY(pwszDomain); VMAFD_SAFE_FREE_MEMORY(pwszAccount); return dwError; error : *ppArgs = NULL; if (pArgs) { VmAfdFreeRegArgs(pArgs); } switch (dwError) { case VECS_MISSING_CREDS: VmAfdLog(VMAFD_DEBUG_ANY, "Account DN / Password missing"); break; case VECS_MISSING_DC_NAME: VmAfdLog(VMAFD_DEBUG_ANY, "Invalid domain controller name"); break; default: VmAfdLog( VMAFD_DEBUG_ANY, "Error [%d] getting machine Info", dwError); break; } goto cleanup; }
DWORD VmAfdInitSourceIpThread( PSOURCE_IP_CONTEXT* ppSourceIpContext ) { DWORD dwError = 0; DWORD sourceIpSocket = 0; PSOURCE_IP_CONTEXT pSourceIpContext = NULL; VMAFD_DOMAIN_STATE domainState = VMAFD_DOMAIN_STATE_NONE; if(!ppSourceIpContext) { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR(dwError); } dwError = VmAfSrvGetDomainState(&domainState); if(dwError || domainState != VMAFD_DOMAIN_STATE_CONTROLLER) { VmAfdLog(VMAFD_DEBUG_ANY, "Source IP thread nt started"); return 0; } dwError = VmAfdAllocateMemory( sizeof(SOURCE_IP_CONTEXT), (PVOID *)&pSourceIpContext ); BAIL_ON_VMAFD_ERROR(dwError); sourceIpSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if(sourceIpSocket < 0) { #ifndef _WIN32 dwError = LwErrnoToWin32Error(errno); #endif BAIL_ON_VMAFD_ERROR(dwError); } #ifndef _WIN32 dwError = pthread_create( &pSourceIpContext->srcIpThread, NULL, &VmAfdSourceIpWorker, (PVOID)pSourceIpContext ); if(dwError) { dwError = LwErrnoToWin32Error(dwError); BAIL_ON_VMAFD_ERROR(dwError); } #endif *ppSourceIpContext = pSourceIpContext; cleanup: return dwError; error: if(pSourceIpContext) { VmAfdShutdownSrcIpThread(pSourceIpContext); } if(ppSourceIpContext) { *ppSourceIpContext = NULL; } goto cleanup; }