diff options
author | elie <elie> | 2007-02-13 17:12:38 +0000 |
---|---|---|
committer | elie <elie> | 2007-02-13 17:12:38 +0000 |
commit | 2b0804e2b1fe0ac38d056cb46c65aa108b5dc571 (patch) | |
tree | 3a3e86ccdd5994a1bea07d377b3ae1a7c06d87df | |
parent | fed7dad905ff7f787994ec5a03e4cd75b27aaa85 (diff) | |
download | pysnmp-2b0804e2b1fe0ac38d056cb46c65aa108b5dc571.tar.gz |
use authentative SNMP engine params when we are authentative
-rw-r--r-- | pysnmp/proto/secmod/rfc3414/service.py | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/pysnmp/proto/secmod/rfc3414/service.py b/pysnmp/proto/secmod/rfc3414/service.py index 2b30bd6..524c949 100644 --- a/pysnmp/proto/secmod/rfc3414/service.py +++ b/pysnmp/proto/secmod/rfc3414/service.py @@ -631,18 +631,28 @@ class SnmpUSMSecurityModel(AbstractSecurityModel): debug.logger & debug.flagSM and debug.logger('processIncomingMsg: incoming msg authed') # 3.2.7 if securityLevel == 3 or securityLevel == 2: - if self.__timeline.has_key(securityEngineID): + if msgAuthoritativeEngineID == snmpEngineID: + # Authoritative SNMP engine: use local notion (SF bug #1649032) ( snmpEngineBoots, - snmpEngineTime, - latestReceivedEngineTime, - latestUpdateTimestamp ) = self.__timeline[ - msgAuthoritativeEngineID - ] - # time passed since last communication with this SNMP engine - idleTime = int(time.time())-latestUpdateTimestamp - debug.logger & debug.flagSM and debug.logger('processIncomingMsg: read timeline snmpEngineBoots %s snmpEngineTime %s for msgAuthoritativeEngineID %s, idle time %s secs' % (snmpEngineBoots, snmpEngineTime, msgAuthoritativeEngineID, idleTime)) + snmpEngineTime ) = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('__SNMP-FRAMEWORK-MIB', 'snmpEngineBoots', 'snmpEngineTime') + snmpEngineBoots = snmpEngineBoots.syntax + snmpEngineTime = snmpEngineTime.syntax + idleTime = 0 + debug.logger & debug.flagSM and debug.logger('processIncomingMsg: read snmpEngineBoots (%s), snmpEngineTime (%s) from LCD' % (snmpEngineBoots, snmpEngineTime)) else: - raise error.ProtocolError('Peer SNMP engine info missing') + # Non-authoritative SNMP engine: use cached estimates + if self.__timeline.has_key(securityEngineID): + ( snmpEngineBoots, + snmpEngineTime, + latestReceivedEngineTime, + latestUpdateTimestamp ) = self.__timeline[ + msgAuthoritativeEngineID + ] + # time passed since last talk with this SNMP engine + idleTime = int(time.time())-latestUpdateTimestamp + debug.logger & debug.flagSM and debug.logger('processIncomingMsg: read timeline snmpEngineBoots %s snmpEngineTime %s for msgAuthoritativeEngineID %s, idle time %s secs' % (snmpEngineBoots, snmpEngineTime, msgAuthoritativeEngineID, idleTime)) + else: + raise error.ProtocolError('Peer SNMP engine info missing') msgAuthoritativeEngineBoots = securityParameters.getComponentByPosition(1) msgAuthoritativeEngineTime = securityParameters.getComponentByPosition(2) |