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.
313 lines
9.2 KiB
313 lines
9.2 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 --------------------------
|
|
|
|
// microsoft has indicated that registry requires unicode strings
|
|
#if 0
|
|
#define UNICODE
|
|
#endif
|
|
|
|
#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 "..\common\evtlog.h"
|
|
#include "..\common\wellknow.h"
|
|
|
|
|
|
//--------------------------- SELF-DEPENDENCY -- ONE #include"module.h" -----
|
|
|
|
//--------------------------- PUBLIC VARIABLES --(same as in module.h file)--
|
|
|
|
CfgExtensionAgents *extAgents = NULL;
|
|
INT extAgentsLen = 0;
|
|
|
|
CfgPermittedManagers *permitMgrs = NULL;
|
|
INT permitMgrsLen = 0;
|
|
|
|
//--------------------------- PRIVATE CONSTANTS -----------------------------
|
|
|
|
// OPENISSUE - microsoft changed this, dont know what it should be?
|
|
#define KEY_TRAVERSE 0
|
|
|
|
|
|
//--------------------------- PRIVATE STRUCTS -------------------------------
|
|
|
|
//--------------------------- PRIVATE VARIABLES -----------------------------
|
|
|
|
static char *pszSnmpSrvEaKey = SNMP_REG_SRV_EAKEY;
|
|
static char *pszSnmpSrvPmKey = SNMP_REG_SRV_PMKEY;
|
|
|
|
//--------------------------- PRIVATE PROTOTYPES ----------------------------
|
|
|
|
//--------------------------- PRIVATE PROCEDURES ----------------------------
|
|
|
|
|
|
BOOL eaConfig(
|
|
OUT CfgExtensionAgents **extAgents,
|
|
OUT INT *extAgentsLen)
|
|
{
|
|
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 valueReqSize;
|
|
LPSTR pTempExp;
|
|
|
|
*extAgents = NULL;
|
|
*extAgentsLen = 0;
|
|
|
|
SNMPDBG((SNMP_LOG_TRACE, "SNMP: INIT: loading extension agents.\n"));
|
|
|
|
if ((status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, pszSnmpSrvEaKey,
|
|
0, (KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS |
|
|
KEY_TRAVERSE), &hkResult)) != ERROR_SUCCESS)
|
|
{
|
|
SNMPDBG((SNMP_LOG_ERROR, "SNMP: INIT: error %d opening ExtensionAgents subkey.\n", status));
|
|
SnmpSvcReportEvent(SNMP_EVENT_INVALID_REGISTRY_KEY, 1, &pszSnmpSrvEaKey, 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 ExtensionAgents subkey.\n", status));
|
|
SnmpSvcReportEvent(SNMP_EVENT_INVALID_REGISTRY_KEY, 1, &pszSnmpSrvEaKey, status);
|
|
RegCloseKey(hkResult);
|
|
return FALSE;
|
|
}
|
|
|
|
SNMPDBG((SNMP_LOG_TRACE, "SNMP: INIT: processing %s.\n", value));
|
|
if ((status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, value, 0,
|
|
(KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS
|
|
| KEY_TRAVERSE), &hkResult2)) != ERROR_SUCCESS)
|
|
{
|
|
SNMPDBG((SNMP_LOG_ERROR, "SNMP: INIT: error %d opening registy key %s.\n", status, value));
|
|
pTemp = value; // make pointer for event api
|
|
SnmpSvcReportEvent(SNMP_EVENT_INVALID_EXTENSION_AGENT_KEY, 1, &pTemp, status);
|
|
goto process_next; // ignore bogus registry key and process next one...
|
|
}
|
|
|
|
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 registry key %s.\n", status, value));
|
|
pTemp = value; // make pointer for event api
|
|
SnmpSvcReportEvent(SNMP_EVENT_INVALID_EXTENSION_AGENT_KEY, 1, &pTemp, status);
|
|
break; // ignore bogus registry key and process next one...
|
|
}
|
|
|
|
if (!lstrcmpi(dummy, TEXT("Pathname")))
|
|
{
|
|
(*extAgentsLen)++;
|
|
*extAgents = (CfgExtensionAgents *) SnmpUtilMemReAlloc(*extAgents,
|
|
(*extAgentsLen * sizeof(CfgExtensionAgents)));
|
|
|
|
pTemp = (LPSTR)SnmpUtilMemAlloc(valueSize+1);
|
|
#ifdef UNICODE
|
|
SnmpUtilUnicodeToAnsi(&pTemp, value, FALSE);
|
|
#else
|
|
memcpy(pTemp, value, valueSize+1);
|
|
#endif
|
|
|
|
valueReqSize = valueSize + 10;
|
|
pTempExp = NULL;
|
|
do {
|
|
pTempExp = (LPSTR)SnmpUtilMemReAlloc(pTempExp, valueReqSize);
|
|
valueSize = valueReqSize;
|
|
valueReqSize = ExpandEnvironmentStringsA(
|
|
pTemp,
|
|
pTempExp,
|
|
valueSize);
|
|
|
|
} while (valueReqSize > valueSize );
|
|
if (valueReqSize == 0) {
|
|
SNMPDBG((SNMP_LOG_TRACE, "SNMP: INIT: error %d expanding %s.\n", GetLastError(), value));
|
|
(*extAgents)[(*extAgentsLen)-1].pathName = pTemp;
|
|
} else {
|
|
SNMPDBG((SNMP_LOG_TRACE, "SNMP: INIT: processing %s.\n", pTempExp));
|
|
(*extAgents)[(*extAgentsLen)-1].pathName = pTempExp;
|
|
SnmpUtilMemFree(pTemp);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
dummySize = MAX_PATH;
|
|
valueSize = MAX_PATH;
|
|
|
|
iValue2++;
|
|
} // end while()
|
|
|
|
RegCloseKey(hkResult2);
|
|
|
|
process_next:
|
|
|
|
dummySize = MAX_PATH;
|
|
valueSize = MAX_PATH;
|
|
|
|
iValue++;
|
|
} // end while()
|
|
|
|
RegCloseKey(hkResult);
|
|
|
|
return TRUE;
|
|
|
|
} // end eaConfig()
|
|
|
|
|
|
BOOL pmConfig(
|
|
OUT CfgPermittedManagers **permitMgrs,
|
|
OUT INT *permitMgrsLen)
|
|
{
|
|
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;
|
|
|
|
*permitMgrs = NULL;
|
|
*permitMgrsLen = 0;
|
|
|
|
SNMPDBG((SNMP_LOG_TRACE, "SNMP: INIT: loading permitted managers.\n"));
|
|
|
|
if ((status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, pszSnmpSrvPmKey,
|
|
0, (KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS |
|
|
KEY_TRAVERSE), &hkResult)) != ERROR_SUCCESS)
|
|
{
|
|
SNMPDBG((SNMP_LOG_ERROR, "SNMP: INIT: error %d opening PermittedManagers subkey.\n", status));
|
|
SnmpSvcReportEvent(SNMP_EVENT_INVALID_REGISTRY_KEY, 1, &pszSnmpSrvPmKey, 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 PermittedManagers subkey.\n", status));
|
|
SnmpSvcReportEvent(SNMP_EVENT_INVALID_REGISTRY_KEY, 1, &pszSnmpSrvPmKey, status);
|
|
RegCloseKey(hkResult);
|
|
return FALSE;
|
|
}
|
|
|
|
SNMPDBG((SNMP_LOG_TRACE, "SNMP: INIT: processing permitted manager %s\n", value));
|
|
(*permitMgrsLen)++;
|
|
*permitMgrs = (CfgPermittedManagers *)SnmpUtilMemReAlloc(*permitMgrs,
|
|
(*permitMgrsLen * sizeof(CfgPermittedManagers)));
|
|
|
|
pTemp = (LPSTR)SnmpUtilMemAlloc(valueSize+1);
|
|
value[valueSize] = TEXT('\0');
|
|
#ifdef UNICODE
|
|
SnmpUtilUnicodeToAnsi(&pTemp, value, FALSE);
|
|
#else
|
|
memcpy(pTemp, value, valueSize+1);
|
|
#endif
|
|
|
|
(*permitMgrs)[iValue].addrText = pTemp;
|
|
SnmpSvcAddrToSocket((*permitMgrs)[iValue].addrText,
|
|
&((*permitMgrs)[iValue].addrEncoding));
|
|
|
|
dummySize = MAX_PATH;
|
|
valueSize = MAX_PATH;
|
|
|
|
iValue++;
|
|
}
|
|
|
|
RegCloseKey(hkResult);
|
|
|
|
return TRUE;
|
|
|
|
} // end pmConfig()
|
|
|
|
|
|
//--------------------------- PUBLIC PROCEDURES -----------------------------
|
|
|
|
|
|
BOOL regconf(VOID)
|
|
{
|
|
SNMPDBG((SNMP_LOG_TRACE, "SNMP: INIT: reading registry parameters.\n"));
|
|
if (pmConfig(&permitMgrs, &permitMgrsLen) &&
|
|
eaConfig(&extAgents, &extAgentsLen)) {
|
|
|
|
SNMPDBG((SNMP_LOG_TRACE, "SNMP: INIT: registry parameters successfully read.\n"));
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
SNMPDBG((SNMP_LOG_TRACE, "SNMP: INIT: unable to successfully read registry parameters.\n"));
|
|
return FALSE;
|
|
}
|
|
|
|
} // end regconf()
|
|
|
|
|
|
//-------------------------------- END --------------------------------------
|