diff options
-rw-r--r-- | pysnmp/entity/config.py | 2 | ||||
-rw-r--r-- | pysnmp/entity/engine.py | 7 | ||||
-rw-r--r-- | pysnmp/entity/rfc3413/cmdrsp.py | 11 | ||||
-rw-r--r-- | pysnmp/proto/acmod/rfc3415.py | 2 | ||||
-rw-r--r-- | pysnmp/proto/error.py | 1 | ||||
-rw-r--r-- | pysnmp/proto/mpmod/base.py | 46 | ||||
-rw-r--r-- | pysnmp/proto/mpmod/rfc2576.py | 7 | ||||
-rw-r--r-- | pysnmp/proto/mpmod/rfc3412.py | 31 | ||||
-rw-r--r-- | pysnmp/proto/proxy/rfc2576.py | 2 | ||||
-rw-r--r-- | pysnmp/proto/secmod/base.py | 8 | ||||
-rw-r--r-- | pysnmp/proto/secmod/rfc3414/priv/base.py | 6 | ||||
-rw-r--r-- | pysnmp/proto/secmod/rfc3414/service.py | 2 | ||||
-rw-r--r-- | pysnmp/smi/builder.py | 2 |
13 files changed, 78 insertions, 49 deletions
diff --git a/pysnmp/entity/config.py b/pysnmp/entity/config.py index 449d9401..d3ecefcb 100644 --- a/pysnmp/entity/config.py +++ b/pysnmp/entity/config.py @@ -109,7 +109,7 @@ def addV3User(snmpEngine, securityName, authKey=None, authProtocol=None, usmHMACMD5AuthProtocol.name ) elif string.find('SHA', string.upper(authProtocol)) != -1: - usmHMACMD5AuthProtocol, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMP-USER-BASED-SM-MIB', 'usmHMACMD5AuthProtocol') + usmHMACSHAAuthProtocol, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMP-USER-BASED-SM-MIB', 'usmHMACSHAAuthProtocol') usmUserAuthProtocol.syntax = usmUserAuthProtocol.syntax.clone( usmHMACSHAAuthProtocol.name ) diff --git a/pysnmp/entity/engine.py b/pysnmp/entity/engine.py index 14538b71..722576aa 100644 --- a/pysnmp/entity/engine.py +++ b/pysnmp/entity/engine.py @@ -7,6 +7,7 @@ from pysnmp.proto.secmod.rfc2576 import SnmpV1SecurityModel, \ SnmpV2cSecurityModel from pysnmp.proto.secmod.rfc3414 import SnmpUSMSecurityModel from pysnmp.proto.acmod import rfc3415 +from pysnmp import error class SnmpEngine: def __init__(self, snmpEngineID=None, maxMessageSize=65507): @@ -46,7 +47,7 @@ class SnmpEngine: def __receiveMessageCbFun( self, - tspDsp, + transportDispatcher, transportDomain, transportAddress, wholeMsg @@ -79,7 +80,3 @@ class SnmpEngine: self.transportDispatcher.unregisterRecvCbFun() self.transportDispatcher.unregisterTimerCbFun() self.transportDispatcher = None - - -# XXX -# fix libsmi2pysnmp to set indices to augmenting entries diff --git a/pysnmp/entity/rfc3413/cmdrsp.py b/pysnmp/entity/rfc3413/cmdrsp.py index 042535d4..2c69eebf 100644 --- a/pysnmp/entity/rfc3413/cmdrsp.py +++ b/pysnmp/entity/rfc3413/cmdrsp.py @@ -1,6 +1,5 @@ -from pysnmp.proto import rfc1157, rfc1905 +from pysnmp.proto import rfc1157, rfc1905, rfc3411, error from pysnmp.proto.api import v2c # backend is always SMIv2 compliant -from pysnmp.proto import rfc1905, rfc3411, error from pysnmp.proto.proxy import rfc2576 import pysnmp.smi.error @@ -31,6 +30,10 @@ class CmdRspBase: 'No such contextName %s' % contextName ) del self.__contextNames[contextName] + + def _handleManagementOperation( + self, snmpEngine, contextMibInstrumCtl, PDU, (acFun, acCtx) + ): pass def close(self, snmpEngine): snmpEngine.msgAndPduDsp.unregisterContextEngineId( @@ -289,8 +292,4 @@ class BulkCmdRsp(CmdRspBase): # re-work mibinstrum for return through cb fun (async mode) ? # how to pass name/index with RowStatus exception # persistent objects (key) -# each managed object should be able to access others through mibBuilder -# cleanup caches # rework linear search behind the acl -# move mib view out of manager apps -# implement one-liners diff --git a/pysnmp/proto/acmod/rfc3415.py b/pysnmp/proto/acmod/rfc3415.py index 8c006c2d..27755345 100644 --- a/pysnmp/proto/acmod/rfc3415.py +++ b/pysnmp/proto/acmod/rfc3415.py @@ -92,7 +92,7 @@ def isAccessAllowed( continue if vacmViewTreeFamilyMask.syntax: mask = [] - for c in str(vacmViewTreeFamilyMask.syntax): + for c in map(None, str(vacmViewTreeFamilyMask.syntax)): mask = mask + map(lambda b,c=ord(c): b&c, __powOfTwoSeq) m = len(mask)-1 idx = l-1 diff --git a/pysnmp/proto/error.py b/pysnmp/proto/error.py index f812ae6e..00ac5a03 100644 --- a/pysnmp/proto/error.py +++ b/pysnmp/proto/error.py @@ -8,6 +8,7 @@ class ProtocolError(PySnmpError, PyAsn1Error): pass class SnmpV3Error(ProtocolError): pass class StatusInformation(SnmpV3Error): def __init__(self, **kwargs): + SnmpV3Error.__init__(self) # print kwargs self.__errorIndication = kwargs def __str__(self): return str(self.__errorIndication) diff --git a/pysnmp/proto/mpmod/base.py b/pysnmp/proto/mpmod/base.py index 94a8a141..30923b32 100644 --- a/pysnmp/proto/mpmod/base.py +++ b/pysnmp/proto/mpmod/base.py @@ -12,12 +12,46 @@ class AbstractMessageProcessingModel: self.__expirationQueue = {} self.__expirationTimer = 0L - def prepareOutgoingMessage(self, msgAndPduDsp, mibInstrumController, - **kwargs): pass - def prepareResponseMessage(self, msgAndPduDsp, mibInstrumController, - **kwargs): pass - def prepareDataElements(self, msgAndPduDsp, mibInstrumController, - wholeMsg): pass + def prepareOutgoingMessage( + self, + snmpEngine, + transportDomain, + transportAddress, + messageProcessingModel, + securityModel, + securityName, + securityLevel, + contextEngineID, + contextName, + pduVersion, + pdu, + expectResponse, + sendPduHandle + ): pass + + def prepareResponseMessage( + self, + snmpEngine, + messageProcessingModel, + securityModel, + securityName, + securityLevel, + contextEngineID, + contextName, + pduVersion, + pdu, + maxSizeResponseScopedPDU, + stateReference, + statusInformation + ): pass + + def prepareDataElements( + self, + snmpEngine, + transportDomain, + transportAddress, + wholeMsg + ): pass def _newStateReference(self): AbstractMessageProcessingModel.__stateReference = ( diff --git a/pysnmp/proto/mpmod/rfc2576.py b/pysnmp/proto/mpmod/rfc2576.py index 163ae8c2..ce27793e 100644 --- a/pysnmp/proto/mpmod/rfc2576.py +++ b/pysnmp/proto/mpmod/rfc2576.py @@ -68,9 +68,7 @@ class SnmpV1MessageProcessingModel(AbstractMessageProcessingModel): errorIndication = 'unsupportedSecurityModel' ) - # rfc3412: 7.1.9.a & rfc2576: 5.2.1 - if rfc3411.unconfirmedClassPDUs.has_key(pdu.tagSet): - securityEngineID = snmpEngineID + # rfc3412: 7.1.9.a & rfc2576: 5.2.1 --> no-op snmpEngineMaxMessageSize, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMP-FRAMEWORK-MIB', 'snmpEngineMaxMessageSize') @@ -166,6 +164,8 @@ class SnmpV1MessageProcessingModel(AbstractMessageProcessingModel): msg.setComponentByPosition(2) msg.getComponentByPosition(2).setComponentByType(pdu.tagSet, pdu) + # att: msgId not set back to PDU as it's up to responder app + # rfc3412: 7.1.7 globalData = ( msg, ) @@ -388,4 +388,3 @@ class SnmpV2cMessageProcessingModel(SnmpV1MessageProcessingModel): # XXX # cache expiration -# why ResponsePdu accepts non ASN1 objects? diff --git a/pysnmp/proto/mpmod/rfc3412.py b/pysnmp/proto/mpmod/rfc3412.py index 9323dbdb..6b844a5f 100644 --- a/pysnmp/proto/mpmod/rfc3412.py +++ b/pysnmp/proto/mpmod/rfc3412.py @@ -162,21 +162,18 @@ class SnmpV3MessageProcessingModel(AbstractMessageProcessingModel): securityEngineID = peerSnmpEngineData['securityEngineID'] # 7.1.9.b - try: - ( securityParameters, - wholeMsg ) = smHandler.generateRequestMsg( - snmpEngine, - self.messageProcessingModelID, - msg, - snmpEngineMaxMessageSize.syntax, - securityModel, - securityEngineID, - securityName, - securityLevel, - scopedPDU - ) - except error.StatusInformation, statusInformation: - raise + ( securityParameters, + wholeMsg ) = smHandler.generateRequestMsg( + snmpEngine, + self.messageProcessingModelID, + msg, + snmpEngineMaxMessageSize.syntax, + securityModel, + securityEngineID, + securityName, + securityLevel, + scopedPDU + ) # Message size constraint verification if len(wholeMsg) > snmpEngineMaxMessageSize.syntax: @@ -385,7 +382,7 @@ class SnmpV3MessageProcessingModel(AbstractMessageProcessingModel): msg, restOfwholeMsg = decoder.decode( wholeMsg, asn1Spec=self._snmpMsgSpec ) - except PyAsn1Error, why: + except PyAsn1Error: snmpInASNParseErrs, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMPv2-MIB', 'snmpInASNParseErrs') snmpInASNParseErrs.syntax = snmpInASNParseErrs.syntax + 1 raise error.StatusInformation( @@ -606,7 +603,7 @@ class SnmpV3MessageProcessingModel(AbstractMessageProcessingModel): if rfc3411.confirmedClassPDUs.has_key(pduType): # 7.2.13a if securityEngineID != snmpEngineID: - smHandler.releaseStateInformation(securityStateRerefence) + smHandler.releaseStateInformation(securityStateReference) raise error.StatusInformation( errorIndication = 'engineIDMispatch' ) diff --git a/pysnmp/proto/proxy/rfc2576.py b/pysnmp/proto/proxy/rfc2576.py index dcab6d46..bed2a8b1 100644 --- a/pysnmp/proto/proxy/rfc2576.py +++ b/pysnmp/proto/proxy/rfc2576.py @@ -1,5 +1,5 @@ # PDU v1/v2c two-way proxy -from pysnmp.proto import rfc3411 +from pysnmp.proto import rfc3411, error from pysnmp.proto.api import v1, v2c from pysnmp.smi import exval diff --git a/pysnmp/proto/secmod/base.py b/pysnmp/proto/secmod/base.py index 8f32d711..1f691186 100644 --- a/pysnmp/proto/secmod/base.py +++ b/pysnmp/proto/secmod/base.py @@ -8,7 +8,7 @@ class AbstractSecurityModel: def processIncomingMsg( self, - mibInstrumController, + snmpEngine, messageProcessingModel, maxMessageSize, securityParameters, @@ -23,7 +23,7 @@ class AbstractSecurityModel: def generateRequestMsg( self, - minInstrController, + snmpEngine, messageProcessingModel, globalData, maxMessageSize, @@ -39,7 +39,7 @@ class AbstractSecurityModel: def generateResponseMsg( self, - minInstrController, + snmpEngine, messageProcessingModel, globalData, maxMessageSize, @@ -73,4 +73,4 @@ class AbstractSecurityModel: return securityData def releaseStateInformation(self, stateReference): - self.__cachePop(stateReference) + self._cachePop(stateReference) diff --git a/pysnmp/proto/secmod/rfc3414/priv/base.py b/pysnmp/proto/secmod/rfc3414/priv/base.py index 8690d4de..83c1b098 100644 --- a/pysnmp/proto/secmod/rfc3414/priv/base.py +++ b/pysnmp/proto/secmod/rfc3414/priv/base.py @@ -1,4 +1,6 @@ class AbstractEncryptionService: serviceID = None - def encryptData(self, encryptKey, dataToEncrypt): pass - def decryptData(self, decryptKey, privParameters, encryptedData): pass + def encryptData(self, mibInstrumController, encryptKey, + dataToEncrypt):pass + def decryptData(self, mibInstrumController, decryptKey, + privParameters, encryptedData): pass diff --git a/pysnmp/proto/secmod/rfc3414/service.py b/pysnmp/proto/secmod/rfc3414/service.py index 65dcda80..e7960394 100644 --- a/pysnmp/proto/secmod/rfc3414/service.py +++ b/pysnmp/proto/secmod/rfc3414/service.py @@ -389,7 +389,7 @@ class SnmpUSMSecurityModel(AbstractSecurityModel): securityParameters, asn1Spec=self._securityParametersSpec ) - except PyAsn1Error, why: + except PyAsn1Error: snmpInASNParseErrs, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMPv2-MIB', 'snmpInASNParseErrs') snmpInASNParseErrs.syntax = snmpInASNParseErrs.syntax + 1 raise error.StatusInformation( diff --git a/pysnmp/smi/builder.py b/pysnmp/smi/builder.py index fca5a492..84395149 100644 --- a/pysnmp/smi/builder.py +++ b/pysnmp/smi/builder.py @@ -76,7 +76,7 @@ class MibBuilder: return self - def unloadModule(self, *names): + def unloadModule(self, *modNames): return self def importSymbols(self, modName, *symNames): |