tog-pegasus/pegasus-2.14.1-snmpv3-trap.patch
DistroBaker 081267dc43 Merged update from upstream sources
This is an automated DistroBaker update from upstream sources.
If you do not know what this is about or would like to opt out,
contact the OSCI team.

Source: https://src.fedoraproject.org/rpms/tog-pegasus.git#6e556193473e062db027bdb29c0ffc2cbfb5e7c4
2020-12-16 23:01:21 +00:00

360 lines
14 KiB
Diff

diff -up pegasus/src/Pegasus/Handler/snmpIndicationHandler/snmpDeliverTrap_netsnmp.cpp.orig pegasus/src/Pegasus/Handler/snmpIndicationHandler/snmpDeliverTrap_netsnmp.cpp
--- pegasus/src/Pegasus/Handler/snmpIndicationHandler/snmpDeliverTrap_netsnmp.cpp.orig 2013-01-21 06:00:43.000000000 +0100
+++ pegasus/src/Pegasus/Handler/snmpIndicationHandler/snmpDeliverTrap_netsnmp.cpp 2015-05-25 15:11:02.368906571 +0200
@@ -228,9 +228,138 @@ void snmpDeliverTrap_netsnmp::_createSes
(const char*)targetHostCStr,
portNumber);
}
+ }
+
+ switch (snmpVersion)
+ {
+ case _SNMPv1_TRAP:
+ {
+ snmpSession.version = SNMP_VERSION_1;
+ _addCommunity(snmpSession,securityName);
+ break;
+ }
+ case _SNMPv2C_TRAP:
+ {
+ snmpSession.version = SNMP_VERSION_2c;
+ _addCommunity(snmpSession,securityName);
+ break;
+ }
+#ifdef PEGASUS_ENABLE_NET_SNMPV3
+ case _SNMPv3_TRAP:
+ {
+ snmpSession.version = SNMP_VERSION_3;
+ CString securityNameCStr = securityName.getCString();
+ size_t securityNameLen = strlen(securityNameCStr);
+ SNMP_FREE(snmpSession.securityName);
+ snmpSession.securityName = (char *)calloc(1,securityNameLen+1);
+ snmpSession.securityNameLen = securityNameLen;
+ memcpy(snmpSession.securityName, (const char*)securityNameCStr,
+ securityNameLen);
+
+ CString engineIdCStr = engineID.getCString();
+ size_t engineIdHexLen = strlen(engineIdCStr);
+ size_t engineIdBinLen = 0;
+ u_char *engineIdBin = (u_char *)calloc(1,engineIdHexLen);
+ free(snmpSession.securityEngineID);
+ if(!snmp_hex_to_binary(&engineIdBin, &engineIdHexLen,
+ &engineIdBinLen, 1,engineIdCStr))
+ {
+ PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,
+ "Snmp Indication Handler failed to generate binary"
+ " engine ID for sending the SNMPv3 trap.");
+ throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,
+ MessageLoaderParms(
+ "Handler.snmpIndicationHandler."
+ "snmpIndicationHandler."
+ "FAILED_TO_DELIVER_TRAP",
+ "Failed to deliver trap."));
+ }
+ snmpSession.securityEngineIDLen = engineIdBinLen;
+ snmpSession.securityEngineID = engineIdBin;
+
+ switch(snmpSecLevel)
+ {
+ case 1:
+ snmpSession.securityLevel = SNMP_SEC_LEVEL_NOAUTH;
+ break;
+ case 2:
+ snmpSession.securityLevel = SNMP_SEC_LEVEL_AUTHNOPRIV;
+ break;
+ case 3:
+ snmpSession.securityLevel = SNMP_SEC_LEVEL_AUTHPRIV;
+ break;
+ default:
+ //use the dedault in the net-snmp conf file.
+ break;
+ }
+
+ SNMP_FREE(snmpSession.securityAuthProto);
+ if(snmpSecAuthProto == 1) // MD5
+ {
+ snmpSession.securityAuthProto = snmp_duplicate_objid(
+ usmHMACMD5AuthProtocol,
+ USM_AUTH_PROTO_MD5_LEN);
+ snmpSession.securityAuthProtoLen = USM_AUTH_PROTO_MD5_LEN;
+ }
+ else if(snmpSecAuthProto == 2)// SHA
+ {
+ snmpSession.securityAuthProto = snmp_duplicate_objid(
+ usmHMACSHA1AuthProtocol,
+ USM_AUTH_PROTO_SHA_LEN);
+ snmpSession.securityAuthProtoLen = USM_AUTH_PROTO_SHA_LEN;
+ }
+ // use the default in net-snmp conf files.
- sessionHandle = snmp_sess_open(&snmpSession);
+ if(snmpSecAuthKey.size() > 0)
+ {
+ for(Uint32 i=0;i<snmpSecAuthKey.size();i++)
+ {
+ snmpSession.securityAuthKey[i] = snmpSecAuthKey[i];
+ }
+ snmpSession.securityAuthKeyLen = snmpSecAuthKey.size();
+ }
+
+ SNMP_FREE(snmpSession.securityPrivProto);
+ //Privacy
+ if(snmpSecPrivProto == 1) //DES
+ {
+ snmpSession.securityPrivProto = snmp_duplicate_objid(
+ usmDESPrivProtocol,
+ USM_PRIV_PROTO_DES_LEN);
+ snmpSession.securityPrivProtoLen = USM_PRIV_PROTO_DES_LEN;
+ }
+ else if(snmpSecPrivProto == 2) // AES
+ {
+ snmpSession.securityPrivProto = snmp_duplicate_objid(
+ usmAESPrivProtocol,
+ USM_PRIV_PROTO_AES_LEN);
+ snmpSession.securityPrivProtoLen = USM_PRIV_PROTO_AES_LEN;
+ }
+ // use the defaults in net-snmp conf files
+
+ // Privacy Key
+ if(snmpSecPrivKey.size() > 0)
+ {
+ for(Uint32 j=0;j<snmpSecPrivKey.size();j++)
+ {
+ snmpSession.securityPrivKey[j] = snmpSecPrivKey[j];
+ }
+ snmpSession.securityPrivKeyLen = snmpSecPrivKey.size();
+ }
+ break;
+ }
+#endif // ifdef PEGASUS_ENABLE_NET_SNMPV3
+ default:
+ {
+ PEG_METHOD_EXIT();
+ throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_NOT_SUPPORTED,
+ MessageLoaderParms(
+ _MSG_VERSION_NOT_SUPPORTED_KEY,
+ _MSG_VERSION_NOT_SUPPORTED));
+ }
}
+
+ sessionHandle = snmp_sess_open(&snmpSession);
if (sessionHandle == NULL)
{
@@ -244,6 +373,12 @@ void snmpDeliverTrap_netsnmp::_createSes
free(errStr);
free(snmpSession.peername);
+ free(snmpSession.community);
+
+#ifdef PEGASUS_ENABLE_NET_SNMPV3
+ free(snmpSession.securityName);
+ free(snmpSession.securityEngineID);
+#endif // ifdef PEGASUS_ENABLE_NET_SNMPV3
PEG_METHOD_EXIT();
@@ -267,6 +402,12 @@ void snmpDeliverTrap_netsnmp::_createSes
free(errStr);
free(snmpSession.peername);
+ free(snmpSession.community);
+
+#ifdef PEGASUS_ENABLE_NET_SNMPV3
+ free(snmpSession.securityName);
+ free(snmpSession.securityEngineID);
+#endif // ifdef PEGASUS_ENABLE_NET_SNMPV3
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, MessageLoaderParms(
_MSG_GET_SESSION_POINTER_FAILED_KEY,
@@ -274,136 +415,12 @@ void snmpDeliverTrap_netsnmp::_createSes
}
free(snmpSession.peername);
+ free(snmpSession.community);
- switch (snmpVersion)
- {
- case _SNMPv1_TRAP:
- {
- sessionPtr->version = SNMP_VERSION_1;
- _addCommunity(sessionPtr,securityName);
- break;
-
- }
- case _SNMPv2C_TRAP:
- {
- sessionPtr->version = SNMP_VERSION_2c;
- _addCommunity(sessionPtr,securityName);
- break;
- }
-#ifdef PEGASUS_ENABLE_NET_SNMPV3
- case _SNMPv3_TRAP:
- {
- sessionPtr->version = SNMP_VERSION_3;
- CString securityNameCStr = securityName.getCString();
- size_t securityNameLen = strlen(securityNameCStr);
- SNMP_FREE(sessionPtr->securityName);
- sessionPtr->securityName = (char *)calloc(1,securityNameLen+1);
- sessionPtr->securityNameLen = securityNameLen;
- memcpy(sessionPtr->securityName, (const char*)securityNameCStr,
- securityNameLen);
-
- CString engineIdCStr = engineID.getCString();
- size_t engineIdHexLen = strlen(engineIdCStr);
- size_t engineIdBinLen = 0;
- u_char *engineIdBin = (u_char *)calloc(1,engineIdHexLen);
- free(sessionPtr->securityEngineID);
- if(!snmp_hex_to_binary(&engineIdBin, &engineIdHexLen,
- &engineIdBinLen, 1,engineIdCStr))
- {
- PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,
- "Snmp Indication Handler failed to generate binary"
- " engine ID for sending the SNMPv3 trap.");
- throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,
- MessageLoaderParms(
- "Handler.snmpIndicationHandler."
- "snmpIndicationHandler."
- "FAILED_TO_DELIVER_TRAP",
- "Failed to deliver trap."));
- }
- sessionPtr->securityEngineIDLen = engineIdBinLen;
- sessionPtr->securityEngineID = engineIdBin;
-
- switch(snmpSecLevel)
- {
- case 1:
- sessionPtr->securityLevel = SNMP_SEC_LEVEL_NOAUTH;
- break;
- case 2:
- sessionPtr->securityLevel = SNMP_SEC_LEVEL_AUTHNOPRIV;
- break;
- case 3:
- sessionPtr->securityLevel = SNMP_SEC_LEVEL_AUTHPRIV;
- break;
- default:
- //use the dedault in the net-snmp conf file.
- break;
- }
-
- SNMP_FREE(sessionPtr->securityAuthProto);
- if(snmpSecAuthProto == 1) // MD5
- {
- sessionPtr->securityAuthProto = snmp_duplicate_objid(
- usmHMACMD5AuthProtocol,
- USM_AUTH_PROTO_MD5_LEN);
- sessionPtr->securityAuthProtoLen = USM_AUTH_PROTO_MD5_LEN;
- }
- else if(snmpSecAuthProto == 2)// SHA
- {
- sessionPtr->securityAuthProto = snmp_duplicate_objid(
- usmHMACSHA1AuthProtocol,
- USM_AUTH_PROTO_SHA_LEN);
- sessionPtr->securityAuthProtoLen = USM_AUTH_PROTO_SHA_LEN;
- }
- // use the default in net-snmp conf files.
-
- if(snmpSecAuthKey.size() > 0)
- {
- for(Uint32 i=0;i<snmpSecAuthKey.size();i++)
- {
- sessionPtr->securityAuthKey[i] = snmpSecAuthKey[i];
- }
- sessionPtr->securityAuthKeyLen = snmpSecAuthKey.size();
- }
-
- SNMP_FREE(sessionPtr->securityPrivProto);
- //Privacy
- if(snmpSecPrivProto == 1) //DES
- {
- sessionPtr->securityPrivProto = snmp_duplicate_objid(
- usmDESPrivProtocol,
- USM_PRIV_PROTO_DES_LEN);
- sessionPtr->securityPrivProtoLen = USM_PRIV_PROTO_DES_LEN;
- }
- else if(snmpSecPrivProto == 2) // AES
- {
- sessionPtr->securityPrivProto = snmp_duplicate_objid(
- usmAESPrivProtocol,
- USM_PRIV_PROTO_AES_LEN);
- sessionPtr->securityPrivProtoLen = USM_PRIV_PROTO_AES_LEN;
- }
- // use the defaults in net-snmp conf files
-
- // Privacy Key
- if(snmpSecPrivKey.size() > 0)
- {
- for(Uint32 j=0;j<snmpSecPrivKey.size();j++)
- {
- sessionPtr->securityPrivKey[j] = snmpSecPrivKey[j];
- }
- sessionPtr->securityPrivKeyLen = snmpSecPrivKey.size();
- }
- break;
- }
+#ifdef PEGASUS_ENABLE_NET_SNMPV3
+ free(snmpSession.securityName);
+ free(snmpSession.securityEngineID);
#endif // ifdef PEGASUS_ENABLE_NET_SNMPV3
- default:
- {
- PEG_METHOD_EXIT();
- throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_NOT_SUPPORTED,
- MessageLoaderParms(
- _MSG_VERSION_NOT_SUPPORTED_KEY,
- _MSG_VERSION_NOT_SUPPORTED));
- }
- }
}
catch (...)
@@ -418,7 +435,7 @@ void snmpDeliverTrap_netsnmp::_createSes
}
void snmpDeliverTrap_netsnmp::_addCommunity(
- struct snmp_session*& sessionPtr,
+ struct snmp_session& snmpSession,
const String& securityName)
{
PEG_METHOD_ENTER(TRC_IND_HANDLER,
@@ -435,17 +452,17 @@ void snmpDeliverTrap_netsnmp::_addCommun
communityName = securityName;
}
- free(sessionPtr->community);
+ free(snmpSession.community);
CString communityNameCStr = communityName.getCString();
size_t communityNameLen = strlen(communityNameCStr);
- sessionPtr->community = (u_char*)calloc(1,communityNameLen+1);
+ snmpSession.community = (u_char*)calloc(1,communityNameLen+1);
- memcpy(sessionPtr->community, (const char*)communityNameCStr,
+ memcpy(snmpSession.community, (const char*)communityNameCStr,
communityNameLen);
- sessionPtr->community_len = communityNameLen;
+ snmpSession.community_len = communityNameLen;
PEG_METHOD_EXIT();
}
diff -up pegasus/src/Pegasus/Handler/snmpIndicationHandler/snmpDeliverTrap_netsnmp.h.orig pegasus/src/Pegasus/Handler/snmpIndicationHandler/snmpDeliverTrap_netsnmp.h
--- pegasus/src/Pegasus/Handler/snmpIndicationHandler/snmpDeliverTrap_netsnmp.h.orig 2010-12-22 13:19:06.000000000 +0100
+++ pegasus/src/Pegasus/Handler/snmpIndicationHandler/snmpDeliverTrap_netsnmp.h 2015-05-25 15:12:24.908290090 +0200
@@ -200,12 +200,11 @@ private:
/**
Add the community string to the snmp session for V1 and V2C
- @param sessionPtr the SNMP session pointer to its associated
- struct snmp_session
+ @param snmpSession struct snmp_session
@param securityName the human readable community name
*/
void _addCommunity(
- struct snmp_session*& sessionPtr,
+ struct snmp_session& snmpSession,
const String& securityName);
/**