Changelog¶
Generated from the commit history at release time. The narrative history through 5.x is in CHANGES.md.
6.0.0-rc.11 (2026-09-11)¶
⚠ BREAKING CHANGES¶
secmod: passwordToKeySHA() returns a different key for the same passphrase and engine ID. Callers who stored keys derived from it must re-derive them. The keys it returned before could not be used against any other implementation.
smi: pysnmp-pysmi is no longer installed with pysnmplib. Code that relied on pysnmp pulling pysmi in – importing pysmi directly, or calling addMibCompiler() – must install pysnmplib[compile] or depend on pysnmp-pysmi explicitly. addMibCompiler() already raised SmiError when pysmi was missing, so what changed is who reaches that path, not what they see on it.
smi: PYSNMP-USM-MIB’s pass-phrase columns report not-accessible where the 2017 rendering left them at MibTableColumn’s read-only default: pysnmpUsmSecretUserName, pysnmpUsmSecretAuthKey, pysnmpUsmSecretPrivKey, pysnmpUsmKeyAuthLocalized, pysnmpUsmKeyPrivLocalized, pysnmpUsmKeyAuth and pysnmpUsmKeyPriv. Every one is not-accessible in the module’s own MAX-ACCESS clause, so a manager could read stored authentication and privacy pass-phrases that the MIB never offered. pysnmp’s internal writes are unaffected: they go through the instrumentation controller with no access-control function, which is where max-access is enforced.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com
smi: SNMP-TARGET-MIB::snmpTargetAddrName and snmpTargetParamsName report not-accessible where the 2017 copy said read-only. RFC 3413 declares both IMPLIED INDEX columns and RFC 2578 section 7.3 requires it; nothing becomes unobtainable, since an index column’s value travels in the OID suffix of every row.
smi: SnmpTagValue and SnmpTagList reject an ASCII CR in a tag. RFC 3413 section 4.1.1 defines the delimiters as space, tab, CR and LF; the 2017 copy listed tab twice and omitted CR, so “a\rb” was accepted as a single tag value. Nothing else about the validation changes.
smi: SNMP-FRAMEWORK-MIB::snmpEngineTime has syntax Integer32 rather than a class named SnmpEngineTime. RFC 3411 declares it SYNTAX INTEGER (0..2147483647) and defines no such textual convention – the module’s only TCs are SnmpEngineID, SnmpSecurityModel, SnmpMessageProcessingModel, SnmpSecurityLevel and SnmpAdminString.
Fixes an InetAddress index crash along the way: cloneAsName now clones from the octets rather than an ascii decode of them, so an InetAddress carrying raw address bytes no longer fails its DISPLAY-HINT with “Display format eval failure”.
Features¶
entity: make v1/v2c a runtime policy rather than a packaging split (9ab8727), closes #108 #111
smi: delete the last five hand-edited base modules (98967d2), closes pysnmp/pysmi#231 #232 pysnmp/pysmi#236 #198
smi: make pysnmp-pysmi an optional dependency (0d148fb), closes 197/#198 #196
smi: own MIB runtime behavior and render pysnmp’s MIBs from ASN.1 (7579867), closes pysnmp/pysmi#236
smi: read PYSNMP_MIB_SOURCES for where the ASN.1 is (d5481be), closes #144
smi: report which source a module came from, and what it shadowed (85a7062)
smi: resolve an unknown OID by loading the module a corpus names (41d1521), closes #144
smi: resolve MIBs from a corpus, when asked to (f90f956), closes pysnmp/pysnmp#199 pysnmp/pysnmp#144 pysnmp/pysnmp#145 pysnmp/pysnmp#196
smi: search several MIB corpora as one, ordered by precedence (20f1ef3)
Bug Fixes¶
deps: put the pyasn1 floor back on a GA (278fc80), closes pysnmp/pysmi#236 #196
secmod: derive the SHA-1 key from a SHA-1 hash of the passphrase (515c51b), closes #225
smi: drop SNMP-USER-BASED-SM-3DES-MIB (a27bc4b)
smi: give augmenting rows their index names, and guard the corpus paths (12ed810), closes pysnmp/pysnmp#199 pysnmp/pysnmp#145
smi: let a compiler render the texts a corpus cannot carry (d0fffd4), closes #217
smi: raise SmiError for a corpus path SQLite cannot open (6fe848b)
smi: rank a contested arc by the corpus rule, not by revision alone (0b9b813)
smi: resolve a type IMPORTS points at the wrong module for (d9f1050), closes pysnmp/pysnmp#145 pysnmp/pysnmp#199
smi: satisfy mypy on the corpus reader’s two optional paths (14967ff)
tests: do not name a directory “we?ird” on a platform that forbids it (401d73e), closes #211 #211
tests: make the corpus suite run in CI instead of skipping itself (29df876), closes pysnmp/pysnmp#199 pysnmp/pysmi#184
6.0.0-rc.10 (2026-09-08)¶
⚠ BREAKING CHANGES¶
entity: seven INDEX columns of SNMP-VIEW-BASED-ACM-MIB report not-accessible where the 2017 copy said read-only, per RFC 2578 section 7.3: vacmAccessContextPrefix, vacmAccessSecurityLevel, vacmAccessSecurityModel, vacmSecurityModel, vacmSecurityName, vacmViewTreeFamilySubtree and vacmViewTreeFamilyViewName. Nothing becomes unobtainable – an index column’s value travels in the OID suffix of every row it appears in. The fabricated vacmContextStatus column is gone; nothing outside this repository could have addressed it by name, since it was never in the MIB.
smi: INDEX columns report
not-accessiblewhere the 2017 base layer reportedread-only, which RFC 2578 section 7.3 requires; sixteen columns across six modules, SNMPv2-MIB::sysORIndex among them. Nothing becomes unobtainable – an index column’s value travels in the OID suffix of every row it appears in, so a manager reading the column can read it out of the row identifier instead.RFC1213-MIB::TtcpInSegs(a misspelling of tcpInSegs),RFC1158-MIB::snmpInBadTypesandRFC1158-MIB::snmpOutReadOnlysare gone, none of them declared by any published ASN.1.SNMPv2-MIB::snmpBasicComplianceis nowdeprecatedandsnmpObsoleteGroupobsolete, per RFC 3418, andRFC1213-MIB::atNetAddresshas syntaxIpAddressrather thanNetworkAddress, the single arm RFC 1155 defines that CHOICE to have.
Features¶
entity: create VACM context rows without a column RFC 3415 omits (e9563a6), closes #198 #205
smi: delete the 2017 base layer so pysmi’s modules are the ones that load (59e68ba), closes #205 #198 #205
smi: publish and version the MIB module loader contract (e044df2), closes #197
smi: resolve a module by best match, not by which source answers first (f380447), closes #198
Bug Fixes¶
carrier: report the family wildcard for an unbound datagram socket (ab23e50), closes #173
smi: do not reload a module a newer source appeared for (b954c75), closes #198
smi: name the archive a zip-imported MIB module came from (a9b19ba), closes #198
smi: read a zip archive’s directory under its 3.14 name (62237aa)
Performance Improvements¶
6.0.0-rc.9 (2026-09-06)¶
⚠ BREAKING CHANGES¶
deps: pysnmp-pyasn1 must now be >=2.0.0,<3.0.0.
Bug Fixes¶
debug: make the debug switch callable whether or not debugging is on (921b720)
deps: track pysmi and pyasn1 release candidates (c0a116d)
smi: make index iteration agree with keys() (ac4354d)
typing: declare the carrier, mpmod and secmod base attributes (37bbf9a)
typing: give abstract base attributes the type their subclasses use (6c28cbc)
typing: stop except: targets shadowing names the function still uses (8bec4fa)
typing: type-clean the package and enable the mypy pre-commit hook (bbe8983), closes pysnmp/pyasn1#165 #178
Miscellaneous Chores¶
deps: bump pysnmp-pyasn1 to 2.0.0 and pysnmp-pysmi to 2.1.0 (bd3a7e1)
6.0.0-rc.8 (2026-09-06)¶
Bug Fixes¶
ci: publish docs from a branch, not a detached HEAD (9002196)