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; }
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; }
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; }
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; }
VOID srp_reg_close_handle( void *phRegistry ) { PVMDIR_CONFIG_CONNECTION_HANDLE hRegistry = NULL; if (phRegistry) { hRegistry = (PVMDIR_CONFIG_CONNECTION_HANDLE) phRegistry; VmDirRegConfigHandleClose(hRegistry); } }
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; }
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; }
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; }
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; }
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 }