mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
336 lines
11 KiB
336 lines
11 KiB
/*++
|
|
|
|
Copyright (c) 1992-1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
regconf.c
|
|
|
|
Abstract:
|
|
|
|
Registry configuration routines.
|
|
|
|
Environment:
|
|
|
|
User Mode - Win32
|
|
|
|
Revision History:
|
|
|
|
10-May-1996 DonRyan
|
|
Removed banner from Technology Dynamics, Inc.
|
|
|
|
--*/
|
|
|
|
//--------------------------- WINDOWS DEPENDENCIES --------------------------
|
|
|
|
#include <windows.h>
|
|
#include <winsock.h>
|
|
#include <wsipx.h>
|
|
|
|
//--------------------------- STANDARD DEPENDENCIES -- #include<xxxxx.h> ----
|
|
|
|
#include <string.h>
|
|
#include <ctype.h>
|
|
|
|
//--------------------------- MODULE DEPENDENCIES -- #include"xxxxx.h" ------
|
|
|
|
#include <snmp.h>
|
|
#include <snmputil.h>
|
|
|
|
#include "regconf.h"
|
|
#include "evtlog.h"
|
|
#include "wellknow.h"
|
|
|
|
|
|
//--------------------------- SELF-DEPENDENCY -- ONE #include"module.h" -----
|
|
|
|
//--------------------------- PUBLIC VARIABLES --(same as in module.h file)--
|
|
|
|
BOOL enableAuthTraps = FALSE;
|
|
|
|
CfgTrapDestinations *trapDests = NULL;
|
|
INT trapDestsLen = 0;
|
|
|
|
CfgValidCommunities *validComms = NULL;
|
|
INT validCommsLen = 0;
|
|
|
|
//--------------------------- PRIVATE CONSTANTS -----------------------------
|
|
|
|
#define KEY_TRAVERSE 0
|
|
|
|
//--------------------------- PRIVATE STRUCTS -------------------------------
|
|
|
|
//--------------------------- PRIVATE VARIABLES -----------------------------
|
|
|
|
static char *pszSnmpSrvTeKey = SNMP_REG_SRV_TEKEY;
|
|
static char *pszSnmpSrvTdKey = SNMP_REG_SRV_TDKEY;
|
|
static char *pszSnmpSrvVcKey = SNMP_REG_SRV_VCKEY;
|
|
|
|
//--------------------------- PRIVATE PROTOTYPES ----------------------------
|
|
|
|
//--------------------------- PRIVATE PROCEDURES ----------------------------
|
|
|
|
// configure trap destinations
|
|
BOOL tdConfig(
|
|
OUT CfgTrapDestinations **trapDests,
|
|
OUT INT *trapDestsLen)
|
|
{
|
|
LONG status;
|
|
HKEY hkResult;
|
|
HKEY hkResult2;
|
|
DWORD iValue;
|
|
DWORD iValue2;
|
|
// DWORD dwTitle;
|
|
DWORD dwType;
|
|
TCHAR dummy[MAX_PATH+1];
|
|
DWORD dummySize;
|
|
TCHAR value[MAX_PATH+1];
|
|
DWORD valueSize;
|
|
LPSTR pTemp;
|
|
DWORD dwValue;
|
|
|
|
*trapDests = NULL;
|
|
*trapDestsLen = 0;
|
|
|
|
SNMPDBG((SNMP_LOG_TRACE, "SNMP: INIT: loading trap destinations.\n"));
|
|
enableAuthTraps = FALSE;
|
|
|
|
if ((status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, pszSnmpSrvTeKey,
|
|
0, (KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS |
|
|
KEY_TRAVERSE), &hkResult)) != ERROR_SUCCESS)
|
|
{
|
|
SNMPDBG((SNMP_LOG_ERROR, "SNMP: INIT: error %d opening EnableAuthenticationTraps subkey.\n",status));
|
|
SnmpSvcReportEvent(SNMP_EVENT_INVALID_REGISTRY_KEY, 1, &pszSnmpSrvTeKey, status);
|
|
return FALSE;
|
|
}
|
|
|
|
iValue = 0;
|
|
|
|
dummySize = MAX_PATH;
|
|
valueSize = MAX_PATH;
|
|
|
|
if ((status = RegEnumValue(hkResult, iValue, dummy, &dummySize,
|
|
NULL, &dwType, (LPBYTE)&dwValue, &valueSize))
|
|
!= ERROR_SUCCESS)
|
|
{
|
|
SNMPDBG((SNMP_LOG_ERROR, "SNMP: INIT: error %d enumerating EnableAuthenticationTraps subkey.\n",status));
|
|
SnmpSvcReportEvent(SNMP_EVENT_INVALID_REGISTRY_KEY, 1, &pszSnmpSrvTeKey, status);
|
|
RegCloseKey(hkResult);
|
|
return FALSE;
|
|
}
|
|
|
|
enableAuthTraps = dwValue ? TRUE : FALSE;
|
|
|
|
RegCloseKey(hkResult);
|
|
|
|
|
|
if ((status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, pszSnmpSrvTdKey,
|
|
0, (KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS |
|
|
KEY_TRAVERSE), &hkResult)) != ERROR_SUCCESS)
|
|
{
|
|
SNMPDBG((SNMP_LOG_ERROR, "SNMP: INIT: error %d opening TrapConfiguration subkey.\n",status));
|
|
SnmpSvcReportEvent(SNMP_EVENT_INVALID_REGISTRY_KEY, 1, &pszSnmpSrvTdKey, status);
|
|
return FALSE;
|
|
}
|
|
|
|
// traverse over keys...
|
|
|
|
iValue = 0;
|
|
|
|
valueSize = MAX_PATH;
|
|
|
|
while((status = RegEnumKey(hkResult, iValue, value, MAX_PATH)) !=
|
|
ERROR_NO_MORE_ITEMS)
|
|
{
|
|
if (status != ERROR_SUCCESS)
|
|
{
|
|
SNMPDBG((SNMP_LOG_ERROR, "SNMP: INIT: error %d enumerating TrapConfiguration subkey.\n",status));
|
|
SnmpSvcReportEvent(SNMP_EVENT_INVALID_REGISTRY_KEY, 1, &pszSnmpSrvTdKey, status);
|
|
return FALSE;
|
|
}
|
|
|
|
// save community name and init empty addr list here...
|
|
|
|
(*trapDestsLen)++;
|
|
if ((*trapDests = (CfgTrapDestinations *)SnmpUtilMemReAlloc(*trapDests,
|
|
(*trapDestsLen * sizeof(CfgTrapDestinations)))) == NULL) {
|
|
SNMPDBG((SNMP_LOG_ERROR, "SNMP: INIT: out of memory.\n"));
|
|
SnmpSvcReportEvent(SNMP_EVENT_FATAL_ERROR, 0, NULL, ERROR_NOT_ENOUGH_MEMORY);
|
|
return(FALSE);
|
|
}
|
|
|
|
if ((pTemp = (LPSTR)SnmpUtilMemAlloc(valueSize+1)) == NULL) {
|
|
SNMPDBG((SNMP_LOG_ERROR, "SNMP: INIT: out of memory.\n"));
|
|
SnmpSvcReportEvent(SNMP_EVENT_FATAL_ERROR, 0, NULL, ERROR_NOT_ENOUGH_MEMORY);
|
|
return(FALSE);
|
|
}
|
|
value[valueSize] = TEXT('\0');
|
|
#ifdef UNICODE
|
|
SnmpUtilUnicodeToAnsi(&pTemp, value, FALSE);
|
|
#else
|
|
memcpy(pTemp, value, valueSize+1);
|
|
#endif
|
|
|
|
SNMPDBG((SNMP_LOG_TRACE, "SNMP: INIT: processing community %s\n", pTemp));
|
|
(*trapDests)[iValue].communityName = pTemp;
|
|
(*trapDests)[iValue].addrLen = 0;
|
|
(*trapDests)[iValue].addrList = NULL;
|
|
|
|
if ((status = RegOpenKeyEx(hkResult, value, 0, (KEY_QUERY_VALUE |
|
|
KEY_ENUMERATE_SUB_KEYS | KEY_TRAVERSE),
|
|
&hkResult2)) != ERROR_SUCCESS)
|
|
{
|
|
SNMPDBG((SNMP_LOG_ERROR, "SNMP: INIT: error %d opening %s subkey.\n", status, value));
|
|
pTemp = value; // make pointer for event api
|
|
SnmpSvcReportEvent(SNMP_EVENT_INVALID_REGISTRY_KEY, 1, &pTemp, status);
|
|
return FALSE;
|
|
}
|
|
|
|
iValue2 = 0;
|
|
|
|
dummySize = MAX_PATH;
|
|
valueSize = MAX_PATH;
|
|
|
|
while((status = RegEnumValue(hkResult2, iValue2, dummy, &dummySize,
|
|
NULL, &dwType, (LPBYTE)value, &valueSize))
|
|
!= ERROR_NO_MORE_ITEMS)
|
|
{
|
|
if (status != ERROR_SUCCESS)
|
|
{
|
|
SNMPDBG((SNMP_LOG_ERROR, "SNMP: INIT: error %d enumerating %s subkey.\n", status, value));
|
|
pTemp = value; // make pointer for event api
|
|
SnmpSvcReportEvent(SNMP_EVENT_INVALID_REGISTRY_KEY, 1, &pTemp, status);
|
|
return FALSE;
|
|
}
|
|
|
|
(*trapDests)[iValue].addrLen++;
|
|
if (((*trapDests)[iValue].addrList =
|
|
(AdrList *)SnmpUtilMemReAlloc((*trapDests)[iValue].addrList,
|
|
((*trapDests)[iValue].addrLen * sizeof(AdrList)))) == NULL) {
|
|
SNMPDBG((SNMP_LOG_ERROR, "SNMP: INIT: out of memory.\n"));
|
|
SnmpSvcReportEvent(SNMP_EVENT_FATAL_ERROR, 0, NULL, ERROR_NOT_ENOUGH_MEMORY);
|
|
return(FALSE);
|
|
}
|
|
|
|
if ((pTemp = (LPSTR)SnmpUtilMemAlloc(valueSize+1)) == NULL) {
|
|
SNMPDBG((SNMP_LOG_ERROR, "SNMP: INIT: out of memory.\n"));
|
|
SnmpSvcReportEvent(SNMP_EVENT_FATAL_ERROR, 0, NULL, ERROR_NOT_ENOUGH_MEMORY);
|
|
return(FALSE);
|
|
}
|
|
value[valueSize] = TEXT('\0');
|
|
#ifdef UNICODE
|
|
SnmpUtilUnicodeToAnsi(&pTemp, value, FALSE);
|
|
#else
|
|
memcpy(pTemp, value, valueSize+1);
|
|
#endif
|
|
|
|
SNMPDBG((SNMP_LOG_TRACE, "SNMP: INIT: processing trap destination %s\n", pTemp));
|
|
(*trapDests)[iValue].addrList[(*trapDests)[iValue].addrLen-1].addrText = pTemp;
|
|
|
|
if (!SnmpSvcAddrToSocket((*trapDests)[iValue].addrList[(*trapDests)[iValue].addrLen-1].addrText,
|
|
&((*trapDests)[iValue].addrList[(*trapDests)[iValue].addrLen-1].addrEncoding))) {
|
|
|
|
(*trapDests)[iValue].addrLen--;
|
|
if (((*trapDests)[iValue].addrList =
|
|
(AdrList *)SnmpUtilMemReAlloc((*trapDests)[iValue].addrList,
|
|
((*trapDests)[iValue].addrLen * sizeof(AdrList)))) == NULL) {
|
|
SNMPDBG((SNMP_LOG_ERROR, "SNMP: INIT: out of memory.\n"));
|
|
SnmpSvcReportEvent(SNMP_EVENT_FATAL_ERROR, 0, NULL, ERROR_NOT_ENOUGH_MEMORY);
|
|
return(FALSE);
|
|
}
|
|
|
|
SNMPDBG((SNMP_LOG_ERROR, "SNMP: INIT: invalid trap destination %s.\n", pTemp));
|
|
SnmpSvcReportEvent(SNMP_EVENT_INVALID_TRAP_DESTINATION, 1, &pTemp, NO_ERROR);
|
|
SnmpUtilMemFree(pTemp);
|
|
}
|
|
|
|
dummySize = MAX_PATH;
|
|
valueSize = MAX_PATH;
|
|
|
|
iValue2++;
|
|
}
|
|
|
|
valueSize = MAX_PATH;
|
|
|
|
iValue++;
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
} // end tdConfig()
|
|
|
|
|
|
BOOL vcConfig(
|
|
OUT CfgValidCommunities **validComms,
|
|
OUT INT *validCommsLen)
|
|
{
|
|
LONG status;
|
|
HKEY hkResult;
|
|
DWORD iValue;
|
|
// DWORD dwTitle;
|
|
DWORD dwType;
|
|
TCHAR dummy[MAX_PATH+1];
|
|
DWORD dummySize;
|
|
TCHAR value[MAX_PATH+1];
|
|
DWORD valueSize;
|
|
LPSTR pTemp;
|
|
|
|
*validComms = NULL;
|
|
*validCommsLen = 0;
|
|
|
|
SNMPDBG((SNMP_LOG_TRACE, "SNMP: INIT: loading valid communities.\n"));
|
|
|
|
if ((status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, pszSnmpSrvVcKey,
|
|
0, (KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS |
|
|
KEY_TRAVERSE), &hkResult)) != ERROR_SUCCESS)
|
|
{
|
|
SNMPDBG((SNMP_LOG_ERROR, "SNMP: INIT: error %d opening ValidCommunities subkey.\n", status));
|
|
SnmpSvcReportEvent(SNMP_EVENT_INVALID_REGISTRY_KEY, 1, &pszSnmpSrvVcKey, status);
|
|
return FALSE;
|
|
}
|
|
|
|
iValue = 0;
|
|
|
|
dummySize = MAX_PATH;
|
|
valueSize = MAX_PATH;
|
|
|
|
while((status = RegEnumValue(hkResult, iValue, dummy, &dummySize,
|
|
NULL, &dwType, (LPBYTE)value, &valueSize))
|
|
!= ERROR_NO_MORE_ITEMS)
|
|
{
|
|
if (status != ERROR_SUCCESS)
|
|
{
|
|
SNMPDBG((SNMP_LOG_ERROR, "SNMP: INIT: error %d enumerating ValidCommunities subkey.\n", status));
|
|
SnmpSvcReportEvent(SNMP_EVENT_INVALID_REGISTRY_KEY, 1, &pszSnmpSrvVcKey, status);
|
|
RegCloseKey(hkResult);
|
|
return FALSE;
|
|
}
|
|
|
|
SNMPDBG((SNMP_LOG_TRACE, "SNMP: INIT: processing community %s\n", value));
|
|
(*validCommsLen)++;
|
|
*validComms = (CfgValidCommunities *)SnmpUtilMemReAlloc(*validComms,
|
|
(*validCommsLen * sizeof(CfgValidCommunities)));
|
|
|
|
pTemp = (LPSTR)SnmpUtilMemAlloc(valueSize+1);
|
|
value[valueSize] = TEXT('\0');
|
|
#ifdef UNICODE
|
|
SnmpUtilUnicodeToAnsi(&pTemp, value, FALSE);
|
|
#else
|
|
memcpy(pTemp, value, valueSize+1);
|
|
#endif
|
|
|
|
(*validComms)[iValue].communityName = pTemp;
|
|
|
|
dummySize = MAX_PATH;
|
|
valueSize = MAX_PATH;
|
|
|
|
iValue++;
|
|
}
|
|
|
|
RegCloseKey(hkResult);
|
|
|
|
return TRUE;
|
|
|
|
} // end vcConfig()
|
|
|
|
//-------------------------------- END --------------------------------------
|