コード例 #1
0
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;
}
コード例 #2
0
ファイル: sourceip.c プロジェクト: vmware/lightwave
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;
}