summaryrefslogtreecommitdiff
path: root/pysnmp/entity
diff options
context:
space:
mode:
authorIlya Etingof <etingof@gmail.com>2018-04-24 11:24:06 +0200
committerIlya Etingof <etingof@gmail.com>2018-08-06 09:16:50 +0200
commita57dc324309e76d0cb7673868a6f86c69d895581 (patch)
treebaf80714a32ad8c41a31f8c63974e739476882c8 /pysnmp/entity
parent3b514f9aec31723587caa1475d38d836bf300563 (diff)
downloadpysnmp-git-a57dc324309e76d0cb7673868a6f86c69d895581.tar.gz
VACM contextName memory leak fix
Diffstat (limited to 'pysnmp/entity')
-rw-r--r--pysnmp/entity/config.py28
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)