DWORD
LwpsLegacyGetJoinedDomainTrustEnumerationWaitTime(
    IN PLWPS_LEGACY_STATE pContext,
    IN OPTIONAL PCSTR pszDomainName,
    OUT PDWORD* ppdwTrustEnumerationWaitSeconds,
    OUT PDWORD* ppdwTrustEnumerationWaitEnabled    
    )
{
    DWORD dwError = 0;
    int EE = 0;
    PSTR pszRegistryPath = NULL;
    PVOID dwValue = NULL;
    PVOID dwValue1 = NULL;
    REG_DATA_TYPE readType = 0;
    DWORD dwValueSize = 0;
    DWORD dwValueSize1 = 0;

    if (pszDomainName)
    {
        dwError = LwAllocateStringPrintf(
                  &pszRegistryPath,
                  "%s\\%s",
                  PSTOREDB_REGISTRY_AD_KEY,
                  pszDomainName);
        GOTO_CLEANUP_ON_WINERROR_EE(dwError, EE);
        dwError = RegUtilGetValue(
                      pContext->hReg,
                      HKEY_THIS_MACHINE,
                      pszRegistryPath,
                      NULL,
                      PSTOREDB_REGISTRY_TRUSTENUMERATIONWAIT_VALUE,
                      &readType,
                      &dwValue,
                      &dwValueSize);
        GOTO_CLEANUP_ON_WINERROR_EE(dwError, EE);
        dwError = RegUtilGetValue(
                      pContext->hReg,
                      HKEY_THIS_MACHINE,
                      pszRegistryPath,
                      NULL,
                      PSTOREDB_REGISTRY_TRUSTENUMERATIONWAITSECONDS_VALUE,
                      &readType,
                      &dwValue1,
                      &dwValueSize1);
        GOTO_CLEANUP_ON_WINERROR_EE(dwError, EE);

        *ppdwTrustEnumerationWaitSeconds = (PDWORD) dwValue1;
        *ppdwTrustEnumerationWaitEnabled = (PDWORD) dwValue;      
    }

cleanup:
   
    LW_SAFE_FREE_MEMORY(pszRegistryPath);
    LSA_PSTORE_LOG_LEAVE_ERROR_EE(dwError, EE);
    return dwError;
}
DWORD
LwpsLegacyGetDefaultJoinedDomain(
    IN PLWPS_LEGACY_STATE pContext,
    OUT PSTR* ppszDomainName
    )
{
    DWORD dwError = 0;
    int EE = 0;
    PSTR pszDomainName = NULL;
    DWORD dwValueLen = 0;

    dwError = RegUtilGetValue(
                  pContext->hReg,
                  HKEY_THIS_MACHINE,
                  PSTOREDB_REGISTRY_AD_KEY,
                  NULL,
                  PSTOREDB_REGISTRY_DEFAULT_VALUE,
                  NULL,
                  (PVOID) &pszDomainName,
                  &dwValueLen);
    if (dwError == LWREG_ERROR_NO_SUCH_KEY_OR_VALUE)
    {
        // Treat as no default domain set
        assert(!pszDomainName);
        dwError = 0;
        GOTO_CLEANUP_EE(EE);
    }
    GOTO_CLEANUP_ON_WINERROR_EE(dwError, EE);

    dwError = LwpsLegacyReadPassword(
                    pContext,
                    pszDomainName,
                    NULL);
    if (dwError == NERR_SetupNotJoined)
    {
        // TODO-INCONSISTENT-FREE-FUNCTION!!!
        LW_SAFE_FREE_MEMORY(pszDomainName);
        dwError = 0;
        GOTO_CLEANUP_EE(EE);
    }
    GOTO_CLEANUP_ON_WINERROR_EE(dwError, EE);

cleanup:
    if (dwError)
    {
        // TODO-INCONSISTENT-FREE-FUNCTION!!!
        LW_SAFE_FREE_MEMORY(pszDomainName);
    }

    *ppszDomainName = pszDomainName;

    LSA_PSTORE_LOG_LEAVE_ERROR_EE(dwError, EE);
    return dwError;
}
Example #3
0
DWORD
LwCAGetRegKeyValueDword(
    PCSTR   pszConfigParamKeyPath,
    PCSTR   pszKey,
    PDWORD  pdwValue,
    DWORD   dwDefaultValue
    )
{
    DWORD dwError = 0;
    DWORD dwValue = 0;
    REG_DATA_TYPE RegType = 0;

    if (pszConfigParamKeyPath == NULL || pszKey == NULL || pdwValue == NULL)
    {
        dwError = LWCA_ERROR_INVALID_PARAMETER;
        BAIL_ON_LWCA_ERROR(dwError);
    }

    LWCA_LOG_VERBOSE("Reading Reg: %s", pszKey);

    *pdwValue = dwDefaultValue;

    dwError = RegUtilGetValue(
                NULL,
                HKEY_THIS_MACHINE,
                NULL,
                pszConfigParamKeyPath,
                pszKey,
                &RegType,
                (PVOID*)&dwValue,
                NULL);
    BAIL_ON_LWCA_ERROR(dwError);

    if (RegType != REG_DWORD)
    {
        dwError = LWCA_ERROR_INVALID_PARAMETER;
        BAIL_ON_LWCA_ERROR(dwError);
    }

    *pdwValue = dwValue;

cleanup:
    return dwError;

error:
    LWCA_LOG_VERBOSE(
         "VmDirGetRegKeyValueDword failed with error (%u)(%s)",
          dwError,
          LWCA_SAFE_STRING(pszKey));
    goto cleanup;
}
Example #4
0
DWORD
LwCAGetRegKeyValue(
    PCSTR   pszConfigParamKeyPath,
    PCSTR   pszKey,
    PSTR    pszValue,
    size_t  valueLen
    )
{
    DWORD   dwError = 0;
    PSTR    pszLocalValue = NULL;
    DWORD   dwLocalValueLen = 0;

    if (pszValue == NULL)
    {
        dwError = LWCA_ERROR_INVALID_PARAMETER;
        BAIL_ON_LWCA_ERROR(dwError);
    }

    dwError = RegUtilGetValue(
        NULL,
        HKEY_THIS_MACHINE,
        NULL,
        pszConfigParamKeyPath,
        pszKey,
        NULL,
        (PVOID*)&pszLocalValue,
        &dwLocalValueLen);
    BAIL_ON_LWCA_ERROR(dwError);

    if (dwLocalValueLen > valueLen) // in case of string values, dwLocalValueLen includes '\0' and therefore valueLen
        // should also include space for '\0'
    {
        dwError = LWCA_ERROR_INVALID_PARAMETER; // TBD: Better error code??
        BAIL_ON_LWCA_ERROR(dwError);
    }


    memcpy( pszValue, pszLocalValue, dwLocalValueLen );

cleanup:
    if (pszLocalValue)
    {
        RegFreeMemory(pszLocalValue);
    }
    return dwError;

error:

    goto cleanup;
}