Esempio n. 1
0
DWORD
VmDirGetMaxDbSizeMb(
    PDWORD pMaxDbSizeMb
    )
{
    DWORD keyValue = 0;
    DWORD dwError = 0;

    PVMDIR_CONFIG_CONNECTION_HANDLE pCfgHandle = NULL;

    dwError = VmDirRegConfigHandleOpen(&pCfgHandle);
    BAIL_ON_VMDIR_ERROR(dwError);

    dwError = VmDirRegConfigGetDword(
                            pCfgHandle,
                            VMDIR_CONFIG_PARAMETER_PARAMS_KEY_PATH,
                            VMDIR_REG_KEY_MAXIMUM_DB_SIZE_MB,
                            &keyValue);

    BAIL_ON_VMDIR_ERROR(dwError);
    *pMaxDbSizeMb = keyValue;

cleanup:
    if (pCfgHandle)
    {
        VmDirRegConfigHandleClose(pCfgHandle);
    }
    return dwError;
error:
    goto cleanup;
}
Esempio n. 2
0
DWORD
VmDirRegGetMultiSZ(
    PCSTR   pszKeyPath,
    PCSTR   pszKeyName,
    PVMDIR_STRING_LIST* ppStrList
    )
{
    DWORD               dwError = 0;
    PSTR                pszValue = NULL;
    PVMDIR_STRING_LIST  pStrList = NULL;

    PVMDIR_CONFIG_CONNECTION_HANDLE pCfgHandle = NULL;

    if (!pszKeyPath || !pszKeyName || !ppStrList)
    {
        dwError = VMDIR_ERROR_INVALID_PARAMETER;
        BAIL_ON_VMDIR_ERROR(dwError);
    }

    dwError = VmDirRegConfigHandleOpen(&pCfgHandle);
    BAIL_ON_VMDIR_ERROR(dwError);

    dwError = VmDirRegConfigGetMultiString(
                            pCfgHandle,
                            pszKeyPath,
                            pszKeyName,
                            &pszValue);
    BAIL_ON_VMDIR_ERROR(dwError);

    dwError = VmDirRegConfigMultiStringToStrList(pszValue, &pStrList);
    BAIL_ON_VMDIR_ERROR(dwError);

    // bail if there is no content in pStrList
    if (!pStrList || pStrList->dwCount == 0)
    {
        dwError = VMDIR_ERROR_INVALID_CONFIGURATION;
        BAIL_ON_VMDIR_ERROR(dwError);
    }

    *ppStrList = pStrList; pStrList = NULL;

cleanup:
    if (pCfgHandle)
    {
        VmDirRegConfigHandleClose(pCfgHandle);
    }
    if (pStrList)
    {
        VmDirStringListFree(pStrList);
    }
    VMDIR_SAFE_FREE_MEMORY(pszValue);

    return dwError;
error:
    goto cleanup;
}
Esempio n. 3
0
DWORD
VmDirRegConfigHandleOpen(
    PVMDIR_CONFIG_CONNECTION_HANDLE *ppCfgHandle)
{
    DWORD dwError = 0;
    PVMDIR_CONFIG_CONNECTION_HANDLE pCfgHandle = NULL;

    /* substitute for VmDirAllocateMemory() */
    pCfgHandle = calloc(1, sizeof(VMDIR_CONFIG_CONNECTION_HANDLE));
    if (!pCfgHandle)
    {
        dwError = ERROR_NO_MEMORY;
    }
    BAIL_ON_VMDIR_ERROR_NO_LINE(dwError);

#ifndef _WIN32
    dwError = RegOpenServer(&pCfgHandle->hConnection);
    BAIL_ON_VMDIR_ERROR_NO_LINE(dwError);
#endif

#ifndef _WIN32
    dwError = RegOpenKeyExA(
                pCfgHandle->hConnection,
                NULL,
                HKEY_THIS_MACHINE,
                0,
                KEY_READ,
                &pCfgHandle->hKey);
    BAIL_ON_VMDIR_ERROR_NO_LINE(dwError);
#else
        dwError = RegOpenKeyExA(
                HKEY_LOCAL_MACHINE,
                NULL,
                0,
                KEY_READ,
                &pCfgHandle->hKey);
    BAIL_ON_VMDIR_ERROR_NO_LINE(dwError);
#endif

    *ppCfgHandle = pCfgHandle;

cleanup:

    return dwError;

error:
    *ppCfgHandle = NULL;

    if (pCfgHandle)
    {
        VmDirRegConfigHandleClose(pCfgHandle);
    }

    goto cleanup;
}
Esempio n. 4
0
static
DWORD
VmDirRegConfigHandleOpen(
    PVMDIR_CONFIG_CONNECTION_HANDLE *ppCfgHandle)
{
    DWORD dwError = 0;
    PVMDIR_CONFIG_CONNECTION_HANDLE pCfgHandle = NULL;

    dwError = VmDirAllocateMemory(
                sizeof(VMDIR_CONFIG_CONNECTION_HANDLE),
                (PVOID*)&pCfgHandle);
    BAIL_ON_VMDIR_ERROR(dwError);

#ifndef _WIN32
    dwError = RegOpenServer(&pCfgHandle->hConnection);
    BAIL_ON_VMDIR_ERROR(dwError);
#endif

#ifndef _WIN32
    dwError = RegOpenKeyExA(
                pCfgHandle->hConnection,
                NULL,
                HKEY_THIS_MACHINE,
                0,
                KEY_READ,
                &pCfgHandle->hKey);
    BAIL_ON_VMDIR_ERROR(dwError);
#else
        dwError = RegOpenKeyExA(
                HKEY_LOCAL_MACHINE,
                NULL,
                0,
                KEY_READ,
                &pCfgHandle->hKey);
    BAIL_ON_VMDIR_ERROR(dwError);
#endif

    *ppCfgHandle = pCfgHandle;

cleanup:

    return dwError;

error:

    *ppCfgHandle = NULL;

    if (pCfgHandle)
    {
        VmDirRegConfigHandleClose(pCfgHandle);
    }

    goto cleanup;
}
Esempio n. 5
0
VOID
srp_reg_close_handle(
    void *phRegistry
)
{
    PVMDIR_CONFIG_CONNECTION_HANDLE hRegistry = NULL;

    if (phRegistry)
    {
        hRegistry = (PVMDIR_CONFIG_CONNECTION_HANDLE) phRegistry;
        VmDirRegConfigHandleClose(hRegistry);
    }
}
Esempio n. 6
0
DWORD
VmDirGetMdbChkptInterval(
    DWORD *pdwMdbChkptInterval
    )
{
    DWORD keyValue = 0;
    DWORD dwError = 0;
    PVMDIR_CONFIG_CONNECTION_HANDLE pCfgHandle = NULL;

    if (pdwMdbChkptInterval==NULL)
    {
        dwError = VMDIR_ERROR_INVALID_PARAMETER;
        BAIL_ON_VMDIR_ERROR(dwError);
    }

    *pdwMdbChkptInterval = VMDIR_REG_KEY_MDB_CHKPT_INTERVAL_DEFAULT;

    dwError = VmDirRegConfigHandleOpen(&pCfgHandle);
    BAIL_ON_VMDIR_ERROR(dwError);

    dwError = VmDirRegConfigGetDword(
                            pCfgHandle,
                            VMDIR_CONFIG_PARAMETER_PARAMS_KEY_PATH,
                            VMDIR_REG_KEY_MDB_CHKPT_INTERVAL,
                            &keyValue);
    BAIL_ON_VMDIR_ERROR(dwError);

    if (keyValue < VMDIR_REG_KEY_MDB_CHKPT_INTERVAL_MIN ||
        keyValue > VMDIR_REG_KEY_MDB_CHKPT_INTERVAL_MAX)
    {
        dwError = VMDIR_ERROR_INVALID_PARAMETER;
        BAIL_ON_VMDIR_ERROR(dwError);
    }

    *pdwMdbChkptInterval = keyValue;

cleanup:
    if (pCfgHandle)
    {
        VmDirRegConfigHandleClose(pCfgHandle);
    }
    return dwError;

error:
    goto cleanup;
}
Esempio n. 7
0
DWORD
VmDirGetMdbWalEnable(
    BOOLEAN *pbMdbEnableWal
    )
{
    DWORD keyValue = 1;
    DWORD dwError = 0;
    PVMDIR_CONFIG_CONNECTION_HANDLE pCfgHandle = NULL;

    if (pbMdbEnableWal==NULL)
    {
        dwError = VMDIR_ERROR_INVALID_PARAMETER;
        BAIL_ON_VMDIR_ERROR(dwError);
    }

    *pbMdbEnableWal = FALSE;

    dwError = VmDirRegConfigHandleOpen(&pCfgHandle);
    BAIL_ON_VMDIR_ERROR(dwError);

    dwError = VmDirRegConfigGetDword(
                            pCfgHandle,
                            VMDIR_CONFIG_PARAMETER_PARAMS_KEY_PATH,
                            VMDIR_REG_KEY_MDB_ENABLE_WAL,
                            &keyValue);
    BAIL_ON_VMDIR_ERROR(dwError);

    *pbMdbEnableWal = (BOOLEAN)(keyValue!=0);

cleanup:
    if (pCfgHandle)
    {
        VmDirRegConfigHandleClose(pCfgHandle);
    }
    return dwError;

error:
    goto cleanup;
}
Esempio n. 8
0
DWORD
VmDirGetLdapCopyEnable(
    BOOLEAN *pbLdapCopyEnable
    )
{
    DWORD keyValue = 0;
    DWORD dwError = 0;
    PVMDIR_CONFIG_CONNECTION_HANDLE pCfgHandle = NULL;

    if (pbLdapCopyEnable == NULL)
    {
        BAIL_WITH_VMDIR_ERROR(dwError, VMDIR_ERROR_INVALID_PARAMETER);
    }

    *pbLdapCopyEnable = FALSE;

    dwError = VmDirRegConfigHandleOpen(&pCfgHandle);
    BAIL_ON_VMDIR_ERROR(dwError);

    dwError = VmDirRegConfigGetDword(
                            pCfgHandle,
                            VMDIR_CONFIG_PARAMETER_PARAMS_KEY_PATH,
                            VMDIR_REG_KEY_LDAP_COPY_ENABLE,
                            &keyValue);
    BAIL_ON_VMDIR_ERROR(dwError);

    *pbLdapCopyEnable = (BOOLEAN)(keyValue!=0);

cleanup:
    if (pCfgHandle)
    {
        VmDirRegConfigHandleClose(pCfgHandle);
    }
    return dwError;

error:
    goto cleanup;
}
Esempio n. 9
0
static
DWORD
VmDirRegGetConfig(
    PCSTR               pszSubKey,
    PVMDIR_CONFIG_ENTRY pCfgTable,
    DWORD               dwNumEntries
    )
{
    DWORD dwError = 0;
    DWORD iEntry = 0;
    PVMDIR_CONFIG_CONNECTION_HANDLE pCfgHandle = NULL;

    dwError = VmDirRegConfigHandleOpen(&pCfgHandle);
    BAIL_ON_VMDIR_ERROR(dwError);

    for (; iEntry < dwNumEntries; iEntry++)
    {
        PVMDIR_CONFIG_ENTRY pEntry = &pCfgTable[iEntry];

        switch (pEntry->Type)
        {
            case VMDIR_CONFIG_VALUE_TYPE_STRING:

                dwError = VmDirRegConfigGetString(
                            pCfgHandle,
                            pszSubKey,
                            pEntry->pszName,
                            &pEntry->pszValue);
                if (dwError != 0)
                {   // use default value
                    dwError = VmDirAllocateStringA(
                                    pEntry->pszDefault,
                                    &pEntry->pszValue);
                    BAIL_ON_VMDIR_ERROR(dwError);
                }

                break;

            case VMDIR_CONFIG_VALUE_TYPE_MULTISTRING:

                dwError = VmDirRegConfigGetMultiString(
                            pCfgHandle,
                            pszSubKey,
                            pEntry->pszName,
                            &pEntry->pszValue);
                if (dwError != 0)
                {   // use default value

                    dwError = VmDirAllocateMultiStringA(
                                    pEntry->pszDefault,
                                    &pEntry->pszValue);
                    BAIL_ON_VMDIR_ERROR(dwError);
                }
                break;


            case VMDIR_CONFIG_VALUE_TYPE_DWORD:

                dwError = VmDirRegConfigGetDword(
                            pCfgHandle,
                            pszSubKey,
                            pEntry->pszName,
                            &pEntry->dwValue);
                if (dwError != 0)
                {   // use default value
                    pEntry->dwValue = pEntry->dwDefault;
                }

                if (pCfgTable[iEntry].dwValue > pCfgTable[iEntry].dwMax)
                {
                    VmDirLog(LDAP_DEBUG_ANY,
                            "Config [%s] value (%d) too big, using (%d).",
                            pEntry->pszName,
                            pEntry->dwValue,
                            pEntry->dwMax);

                    pEntry->dwValue = pEntry->dwMax;

                }

                if (pEntry->dwValue < pEntry->dwMin)
                {
                    VmDirLog(
                            LDAP_DEBUG_ANY,
                            "Config [%s] value (%d) too small, using (%d).",
                            pEntry->pszName,
                            pEntry->dwValue,
                            pEntry->dwMin);

                    pEntry->dwValue = pEntry->dwMin;
                }

                break;

            case VMDIR_CONFIG_VALUE_TYPE_BOOLEAN:

                dwError = VmDirRegConfigGetDword(
                            pCfgHandle,
                            pszSubKey,
                            pEntry->pszName,
                            &pEntry->dwValue);

                if (dwError != 0)
                {   // use default value
                    pEntry->dwValue = pEntry->dwDefault;
                }

                pEntry->dwValue = pEntry->dwValue == 0 ? FALSE : TRUE;

                break;

            default:

                VmDirLog(
                        LDAP_DEBUG_ANY,
                        "VmDirRegConfigProcess key [%s] type (%d) not supported.",
                        pEntry->pszName,
                        pEntry->Type);

                break;
        }
    }

    dwError = 0;

cleanup:

    if (pCfgHandle)
    {
        VmDirRegConfigHandleClose(pCfgHandle);
    }

    return dwError;

error:

    goto cleanup;
}
Esempio n. 10
0
DWORD
_VmDirDbCpReadRegistry(
    PDWORD pdwCopyDbWritesMin,
    PDWORD pdwCopyDbIntervalInSec,
    PDWORD pdwCopyDbBlockWriteInSec
    )
{
#ifndef WIN32
    DWORD dwError = 0;
    DWORD dwValue = 0;
    PSTR  pszLocalErrorMsg = NULL;
    PVMDIR_CONFIG_CONNECTION_HANDLE pCfgHandle = NULL;

    dwError = VmDirRegConfigHandleOpen(&pCfgHandle);
    BAIL_ON_VMDIR_ERROR_WITH_MSG(dwError, (pszLocalErrorMsg),
      "_VmDirDbCpReadRegistry: VmDirRegConfigHandleOpen error %d", dwError);

    dwError = VmDirRegConfigGetDword(pCfgHandle, VMDIR_CONFIG_PARAMETER_PARAMS_KEY_PATH,
            VMDIR_REG_KEY_COPY_DB_INTERVAL_IN_SEC, &dwValue);
    if (dwError)
    {
        if (dwError != LWREG_ERROR_NO_SUCH_KEY_OR_VALUE)
        {
            VMDIR_LOG_ERROR(VMDIR_LOG_MASK_ALL, "_VmDirDbCpReadRegistry %s error %d",
                  VMDIR_REG_KEY_COPY_DB_INTERVAL_IN_SEC, dwError);
        }
    } else
    {
        *pdwCopyDbIntervalInSec = dwValue;
    }

    dwError = VmDirRegConfigGetDword(pCfgHandle, VMDIR_CONFIG_PARAMETER_PARAMS_KEY_PATH,
                VMDIR_REG_KEY_COPY_DB_WRITES_MIN, &dwValue);
    if (dwError)
    {
        if (dwError != LWREG_ERROR_NO_SUCH_KEY_OR_VALUE)
        {
            VMDIR_LOG_ERROR(VMDIR_LOG_MASK_ALL, "_VmDirDbCpReadRegistry %s error %d",
                  VMDIR_REG_KEY_COPY_DB_WRITES_MIN, dwError);
        }
    } else
    {
        *pdwCopyDbWritesMin = dwValue;
    }

    dwError = VmDirRegConfigGetDword(pCfgHandle, VMDIR_CONFIG_PARAMETER_PARAMS_KEY_PATH,
            VMDIR_REG_KEY_COPY_DB_BLOCK_WRITE_IN_SEC, &dwValue);
    if (dwError)
    {
        if (dwError != LWREG_ERROR_NO_SUCH_KEY_OR_VALUE)
        {
            VMDIR_LOG_ERROR(VMDIR_LOG_MASK_ALL, "_VmDirDbCpReadRegistry %s error %d",
                  VMDIR_REG_KEY_COPY_DB_BLOCK_WRITE_IN_SEC, dwError);
        }
    } else
    {
        *pdwCopyDbBlockWriteInSec = dwValue;
    }

cleanup:
    if (pCfgHandle)
    {
        VmDirRegConfigHandleClose(pCfgHandle);
    }
    VMDIR_SAFE_FREE_MEMORY(pszLocalErrorMsg);
    return dwError;

error:
    VMDIR_LOG_ERROR(VMDIR_LOG_MASK_ALL, "%s", VDIR_SAFE_STRING(pszLocalErrorMsg));
    goto cleanup;
#else
    return 0;
#endif
}