summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelie <elie>2007-02-13 17:12:38 +0000
committerelie <elie>2007-02-13 17:12:38 +0000
commit2b0804e2b1fe0ac38d056cb46c65aa108b5dc571 (patch)
tree3a3e86ccdd5994a1bea07d377b3ae1a7c06d87df
parentfed7dad905ff7f787994ec5a03e4cd75b27aaa85 (diff)
downloadpysnmp-2b0804e2b1fe0ac38d056cb46c65aa108b5dc571.tar.gz
use authentative SNMP engine params when we are authentative
-rw-r--r--pysnmp/proto/secmod/rfc3414/service.py30
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)