diff options
author | Ilya Etingof <etingof@gmail.com> | 2018-04-24 11:24:06 +0200 |
---|---|---|
committer | Ilya Etingof <etingof@gmail.com> | 2018-08-06 09:16:50 +0200 |
commit | a57dc324309e76d0cb7673868a6f86c69d895581 (patch) | |
tree | baf80714a32ad8c41a31f8c63974e739476882c8 /pysnmp/entity | |
parent | 3b514f9aec31723587caa1475d38d836bf300563 (diff) | |
download | pysnmp-git-a57dc324309e76d0cb7673868a6f86c69d895581.tar.gz |
VACM contextName memory leak fix
Diffstat (limited to 'pysnmp/entity')
-rw-r--r-- | pysnmp/entity/config.py | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/pysnmp/entity/config.py b/pysnmp/entity/config.py index ce6e9b07..2caa20f5 100644 --- a/pysnmp/entity/config.py +++ b/pysnmp/entity/config.py @@ -396,14 +396,31 @@ delSocketTransport = delTransport # VACM shortcuts -def addContext(snmpEngine, contextName): +def __cookVacmContextInfo(snmpEngine, contextName): mibBuilder = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder - vacmContextEntry, = mibBuilder.importSymbols('SNMP-VIEW-BASED-ACM-MIB', 'vacmContextEntry') tblIdx = vacmContextEntry.getInstIdFromIndices(contextName) + return vacmContextEntry, tblIdx + + +def addContext(snmpEngine, contextName): + vacmContextEntry, tblIdx = __cookVacmContextInfo(snmpEngine, contextName) + + snmpEngine.msgAndPduDsp.mibInstrumController.writeVars( + ((vacmContextEntry.name + (5,) + tblIdx, 'destroy'),) + ) snmpEngine.msgAndPduDsp.mibInstrumController.writeVars( (vacmContextEntry.name + (1,) + tblIdx, contextName), - ** dict(snmpEngine=snmpEngine) + (vacmContextEntry.name + (2,) + tblIdx, 'createAndGo'), + **dict(snmpEngine=snmpEngine) + ) + + +def delContext(snmpEngine, contextName): + vacmContextEntry, tblIdx = __cookVacmContextInfo(snmpEngine, contextName) + + snmpEngine.msgAndPduDsp.mibInstrumController.writeVars( + ((vacmContextEntry.name + (5,) + tblIdx, 'destroy'),) ) @@ -459,7 +476,7 @@ def addVacmAccess(snmpEngine, groupName, contextName, securityModel, contextName, securityModel, securityLevel) - addContext(snmpEngine, contextName) # this is leaky + addContext(snmpEngine, contextName) snmpEngine.msgAndPduDsp.mibInstrumController.writeVars( (vacmAccessEntry.name + (9,) + tblIdx, 'destroy'), @@ -483,6 +500,9 @@ def delVacmAccess(snmpEngine, groupName, contextName, securityModel, vacmAccessEntry, tblIdx = __cookVacmAccessInfo(snmpEngine, groupName, contextName, securityModel, securityLevel) + + delContext(snmpEngine, contextName) + snmpEngine.msgAndPduDsp.mibInstrumController.writeVars( (vacmAccessEntry.name + (9,) + tblIdx, 'destroy'), **dict(snmpEngine=snmpEngine) |