forked from etingof/pysnmp
-
Notifications
You must be signed in to change notification settings - Fork 1
/
CHANGES.txt
1450 lines (1316 loc) · 72.4 KB
/
CHANGES.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Revision 5.0.0, released 2019-09-XX
-----------------------------------
- Python 2.6 becomes the minimum supported Python version! \o/
- SNMPv3 crypto operations that require external dependencies
made dependent on the optional external
package -- pysnmpcrypto.
- By switching to pysnmpcrypto, pysnmp effectively migrates from
PyCryptodomex to pyca/cryptography whenever available on the
platform.
- Many really old backward-compatibility code snippets removed.
Most importantly:
* `pysnmp.entity.rfc3413.oneliner` and everything related
to the (non-standard) UNIX domain socket transport is gone
* `pysnmp.carrier.asynsock` backward-compatible wrapper over
`pysnmp.carrier.asyncore` is gone
- The MIB instrumentation API overhauled in backward incompatible
way:
* MIB instrumentation methods signatures simplified to accept
just var-binds (as var-arg), the rest of the parameters packed
into opaque kwargs
* The `readVars`, `readNextVars` and `writeVars` methods of MIB
instrumentation controller return immediately and deliver their
results via a call back. These methods have been renamed into
`read/readNext/writeMibObjects`.
* The `read*`, `write*`, `create*` and `destroy*` methods of
the `SNMPv2-SMI` MIB objects redesigned to return immediately
and deliver their results via a call back.
* The `readNext*` methods of the `SNMPv2-SMI` MIB objects redesigned
to return the very next object even if it is not readable. In this
case the `noSuchObject` or `noSuchInstance` SNMP exception values
are returned. The motivation is to avoid deep stack recursion on
MIB walk. The caller is expected to watch these SNMP sentinels
and repeat the call.
* SMI tables manipulation mechanics (`create*` and `destroy*` methods)
of the `SNMPv2-SMI` MIB objects redesigned for simplicity and
asynchronous use.
* Redesigned SMI tables can be created either by:
- Sending many PDUs carrying columnar objects followed by a PDU
that bring the `RowStatus` object into the `active` state.
- Or by sending a single PDU first having columnar objects initialized
followed by the `RowStatus` object.
* Scalar SMI objects changed to instantiate automatically on write.
* CommandResponder application passes `snmpEngine` and optionally
user-supplied `cbCtx` object throughout the MIB instrumentation
methods. The goal is to let MIB objects access/modify whatever
custom Python objects they need while being called back.
* CommandResponder refactored to facilitate asynchronous
MIB instrumentation routines.
- The high-level API (`hlapi`) extended to cover lightweight SNMP v1arch
in hope to ease the use of packet-level SNMP API.
By way of introducing v1arch hlapi, the sub-packages layout changed
so that `pysnmp.hlapi` is moved to `pysnmp.hlapi.v3arch` and the new
v1arch layer is introduced in `pysnmp.hlapi.v1arch`. This change does
NOT break backward compatibility as `pysnmp.hlapi` still defaults to
`pysnmp.hlapi.v3arch`.
The `pysnmp.hlapi.v1arch` is designed to be as much similar in use
to `pysnmp.hlapi.v3arch`, but with high-performance in mind. One of
the consequences of this higher performance focus is that various
automation around building well-formed SNMP messages is and mediating
differences between SNMP versions is not present in this new `v1arch`
layer.
The same SMI MIB services that exist for v3arch high-level API can be
used with all v1arch calls.
- New high-level `asyncio` bindings to the lightweight v1arch layer
have been introduced as `pysnmp.hlapi.v1arch.asyncio` sub-package. The
goal being to provide fast SNMP manager within `asyncio` framework at
the expense of limiting its functionality to SNMP v1 and v2c support.
- The signature of the hlapi `.sendNotification()` call has changed
to accept `*varBinds` instead of a sequence of `varBinds`. The rationale
is to unify this method call with similar methods of CommandGenerator.
This change should not compromise backward compatibility with pysnmp 4.
- The whole codebase PEP-eighted, in particular:
* Global constants turned UPPER_CASED
* Long lines wrapped by more or less 80 chars
Revision 4.4.12, released 2019-09-24
------------------------------------
- Fixed broken SNMPv3 `msgFlag` initialization on authoritative SNMP
engine ID discovery. This bug causes secure communication with peer
SNMP engines to stall at SNMP engine ID discovery procedure.
Revision 4.4.11, released 2019-08-10
------------------------------------
- Added SNMPv3 USM master and localized keys support to LCD configuration
- Improved initial and runtime USM debugging
- Fixed a bug in USM configuration which did not allow the same user names
to be added under different security names
Revision 4.4.10, released 2019-07-29
------------------------------------
- Reworked VACM access control function. Most important changes include:
* Added subtree match negation support (vacmViewTreeFamilyType)
* Added subtree family mask support (vacmViewTreeFamilyMask)
* Added prefix content name matching support (vacmAccessContextMatch)
* Added key VACM tables caching for better `isAccessAllowed` lookup
performance
One potential incompatibility may be caused by the `addContext()` call
which now needs to be made explicitly during low-level VACM configuration
rather than be a side effect of `addVacmAccess()` call.
- Rebased MIB importing code onto `importlib` because `imp` is long
deprecated
- Received MIB objects resolution made more forgiving to errors, added
optional `ignoreErrors` parameter to `ObjectType.resolveWithMib()` to
control that behaviour.
- Fixed asyncore main loop to respect non-default timer resolution
- Fixed `.setTimerResolution()` behaviour of abstract main loop dispatcher
to update call intervals of the existing periodic dispatcher jobs
- Fixed `var-bindings` initialization to prevent pyasn1 encoder failures
with newer pyasn1 versions where `SequenceOf` type looses its default
initializer.
- Fixed crash on uninitialized component serialization left out in
SNMP v1 TRAP PDU to SNMPv2/3 TRAP PDU proxy translation routine.
Revision 4.4.9, released 2019-02-09
-----------------------------------
- Made MIB loader ignoring file and directory access errors
- Added missing SNMP PDU error classes and their handling in Command Responder
- Fixed crash on MIB load failure in case of directory access error
- Fixed socket transparency option (IPV6_TRANSPARENT) to make IPv6
transparent operation functional
Revision 4.4.8, released 2018-12-30
-----------------------------------
- Fixed Pythonized MIB load (in the source form) - made sure to turn
it into a code object prior to its execution
Revision 4.4.7, released 2018-12-29
-----------------------------------
- Copyright notice extended to the year 2019
- Exposed ASN.1 `Null` type through `rfc1902` module for convenience.
- Use `compile()` before `exec`'ing MIB modules to attach filename to
the stack frames (ultimately shown in traceback/debugger)
- Fixed hlapi/v3arch transport target caching to ensure transport targets
are different even if just timeout/retries options differ
- Fixed hlapi LCD configurator to include `contextName`. Prior to this fix
sending SNMPv3 TRAP with non-default `contextName` would fail.
- Fixed possible duplicate key occurrence in the `OrderedDict` following
a race condition
- Fixed undefined name references in `inet_pton`/`inet_ntop` substitute
routines for IPv6 in `TRANSPORT-ADDRESS-MIB.py`
Revision 4.4.6, released 2018-09-13
-----------------------------------
- Improved package build and dependency tracking
- Fixed missing LICENSE from the tarball distribution
- Fixed `CommandGeneratorLcdConfigurator.unconfigure()` to fully clean up
internal caches, otherwise repetitive attempts to configure the target
would fail.
- Fix to tolerate possible duplicate enumerations in `Bits` and `Integer`
SMI types.
- Fix to tolerate non-initialised entries in SNMP community table. Once a
bad entry sneaked into the SNMP community table, all the subsequent
SNMP v1/v2c operations failed. The fix ignores incomplete SNMP community
table entries in the course of building indices.
Revision 4.4.5, released 2018-08-05
-----------------------------------
- Added PySnmpError.cause attribute holding parent exception tuple
- Fixed zero SNMPv3 boots/time values put in SNMPv3 TRAP messages
- Fixed broken InetAddressType rendering caused by a pyasn1 regression
- Fixed typo in RFC1158 module
- Fixed possible infinite loop in GETBULK response PDU builder
- Fixed memory leak in the `config.delContext()` VACM management harness
- Fixed `Bits` class initialization when enumeration values are given
- Fixed crash caused by incoming SNMPv3 message requesting SNMPv1/v2c
security model
- Fixed out-of-scope OIDs leaking at the end of SNMP table at hlapi
`nextCmd` and `bulkCmd` calls when `lexicographicMode = False`
Revision 4.4.4, released 2018-01-03
-----------------------------------
- Copyright notice extended to the year 2018
- Fixed short local key expansion at 3DES key localization
implementation.
Revision 4.4.3, released 2017-12-22
-----------------------------------
- Migrated references from SourceForge
- Added missing SHA2 support for Blumenthal key localization
- Fixed named bits handling at rfc1902.Bits
- Fixed missing SmiError exception class at pysnmp.proto.rfc1155
- Fixed SNMP v1->v2c PDU proxy -- error-status & error-index fields
from v1 PDU get copied over to v2c PDU in addition to the exception
sentinels being set
Revision 4.4.2, released 2017-11-11
-----------------------------------
- The pysnmp version being used gets exposed to the MIB modules
via the `MibBuilder` instance
- The .setObjects() method of the SMI types now accepts
`append=False` parameter to let the caller adding more
than 255 elements over the course of multiple calls
- Added support for some more missing fields of SMIv2 MACRO types
- Example scripts rearranged in a way that IPv6 requirement is
clearly encoded in the script's name
- Fixed SNMPv2-SMI.NotificationType to expose .set/getReference()
instead of .set/getRevision() which should not be there in the
first place
- Fixed non-implied-OID encoding in SNMP table indices
- Fixed inconsistent SNMPv3 discovery and retrying algorithm
Revision 4.4.1, released 2017-10-23
-----------------------------------
- HMAC-SHA-2 Authentication Protocols support added (RFC-7860)
- The pycryptodome dependency replaced with pycryptodomex as
it is recommended by the upstream to avoid unwanted interference
with PyCrypto package should it also be installed
- Sphinx theme changed to Alabaster in the documentation
- Minor adjustments towards pyasn1 0.4.x compatibility
- Fixed ObjectIdentifier-into-ObjectIdentity casting at
rfc1902.ObjectType MIB resolution harness
- Fixed NetworkAddress object handling in SNMP table indices
- Fixed MIB lookup by module:object.indices MIB object with
InetAddressIPv{4,6} objects being in the index
- Fixed non-translated PDU being retries at CommandGenerator what
leads to wrong PDU version being sent and even a crash on
incompatible PDU/SNMP message combination
Revision 4.3.10, released 2017-10-06
------------------------------------
- Refactored partial SNMP message decoding to make it less dependent
on unpublished pyasn1 API features.
- Fix to MibTableRow.setFromName() to keep the input parameter type when
it propagates to the return value. Before this fix
ObjectIdentity.prettyPrint() may crash when rendering malformed SNMP
table indices.
- Fixed NotificationReceiver to include SNMPv1 TRAP Message community
string into SNMPv2c/v3 TRAP PDU
- Fixed multiple bugs in SNMP table indices rendering, especially
the InetAddressIPv6 type which was severely broken.
- Fixed crashing Bits.prettyPrint() implementation
- Fixed crashing Bits.clone()/subtype() implementation
- Fixed leaking exceptions bubbling up from the asyncio and Twisted adapters
Revision 4.3.9, released 2017-07-26
-----------------------------------
- Deprecated UsmUserData initializaton parameters removed
- Adapted to pyasn1 API changes introduced by release 0.3.1
- Fix to a crash happening on inbound SNMP message having non-initialized fields
- Fix to (persistent SNMP engine ID) file writing on Windows
Revision 4.3.8, released 2017-06-15
-----------------------------------
- Security fix to the bug introduced in 4.3.6: msgAuthoritativeEngineTime
stopped changing over time and was returning the same timestamp (process
start time). This fix makes it growing as it should.
Revision 4.3.7, released 2017-05-29
-----------------------------------
* Fixed import error in legacy NotificationOriginator implementation
Revision 4.3.6, released 2017-05-28
-----------------------------------
- More instrumentation hooks added addressing security failures
auditing needs.
- SNMP table indices correlation implemented within SMI framework.
The opaque InetAddress type implemented. INET-ADDRESS-MIB included
into the distribution.
- SNMP table indices resolution logic made more robust against
malformed indices.
- Fixes to *lexicographicMode* option documentation to make it
unambiguous.
- The `ErrorIndication` object is now derived from `Exception` so
that it could be raised in exceptions.
- The `errorIndication` values produced by various parts of
SNMP engine unified to be `ErrorIndication` instances. This fixes
an issue with Twisted.
- Embedded MIB modules rebuilt with the latest pysmi adding previously
missing attributes like `status`, `description` etc.
- Fixed potential SNMP engine crash on handling incoming message
at unsupported security level
Revision 4.3.5, released 2017-03-24
-----------------------------------
- The getNext() and getBulk() calls of Twisted interface.
now support ignoreNonIncreasingOid option.
- TextualConvention is now a new-style class.
- Fix to accidentally reset error-status when building confirmed class
SNMPv1 PDU.
- Fix to possible infinite recursion in TextualConvention.prettyIn().
- Fixed crash when attempting to report unsupported request/notification
PDU back to sender.
Revision 4.3.4, released 2017-03-01
-----------------------------------
- Fix to low-level SNMP API example to accommodate changed pyasn1
SEQUENCE supporting iterator protocol.
- The pyasn1 version dependency bumped (0.2.3), SEQUENCE/SEQUENCE OF
API calls adjusted to accommodate changed pyasn1 API (in part
of .setComponentBy*() kw flags).
- Fixed crash on SNMP engine's invalid message counter increment.
Revision 4.3.3, released 2017-02-04
-----------------------------------
- Switched from now unmaintained PyCrypto to PyCryptodome.
- Switched to new-style classes.
- NotificationType now allows additional var-binds specified as
MIB objects. A side effect of this change is that additional
var-binds can only be added prior to .resolveMibObjects() is
run.
- Non-standard (but apparently used by many vendors) Reeder AES192/256
key localization algorithm implemented and set as default for
USM_PRIV_CFB192_AES and USM_PRIV_CFB256_AES identifiers.
Original and more standard implementation can still be used
with the USM_PRIV_CFB192_AES_BLUMENTHAL and
USM_PRIV_CFB192_AES_BLUMENTHAL IDs respectively.
- TextualConvention.prettyOut() improved to produce prettier and
more SMI-compliant output.
- TextualConvention.prettyIn() implemented to handle DISPLAY-HINT
based value parsing.
- Fix to NotificationType to make additional var-binds overriding
MIB objects implicitly included through NOTIFICATION-TYPE OBJECTS.
- Fix to SNMP engine boots counter persistence on Python 3.
- Fix to Pythonized MIBs loading when only .pyc files are
present (e.g. py2exe/cx_freeze environments).
- Fix broken 3DES key localization and encryption procedures.
- Updated IP address for demo.snmplabs.com in examples.
- Missing index added to bundled RFC1213::atEntry MIB table.
- Twisted integration made Python3 compatible.
- Accommodated ASN.1 SEQUENCE iteration rules change in upcoming pyasn1 version.
- Author's email changed, copyright extended to 2017.
Revision 4.3.2, released 2016-02-12
-----------------------------------
- Copyright notice added to non-trivial source code files.
- SNMP table row consistency check added. This change may break
valid SNMP SET operations on tables if RowStatus column is not
passed at the very end of var-binds.
- All SNMP counters now incremented via '+= 1' rather than 'x = x + 1'
to simplify their tracking by third-party code.
- Notification originator examples re-pointed to Notification Receiver
at demo.snmplabs.com.
- Two more execution observer points added: rfc2576.processIncomingMsg
and rfc3414.processIncomingMsg to give an insignt on security modules
internals.
- TEXTUAL-CONVENTION's DISPLAY-HINT text formatting reworked for better
performance and encoding accurancy of 'a' and 't' formats.
- WARNING: security fix to USM - extra user entry clone removed on
incoming message processing. It made USM accepting SNMPv3 TRAPs
from unknown SNMP engine IDs.
- Fix to snmpInvalidMsgs and snmpUnknownSecurityModels MIB symbols
import at SNMPv3 MP model.
- Fix to NotificationOriginator to cope with unspecified user callable.
- Fix to OctetString.prettyOut() to pretty-print Python 3 bytes without
'b' qualifier.
- Fix to better pysmi import errors handling.
- Fix to missing next() in Python 2.5 at pysnmp.hlapi
Revision 4.3.1, released 2015-11-12
-----------------------------------
- Added recursive resolution of ObjectIdentifier values at ObjectType
by converting it to ObjectIdentity.
- A bunch of convenience shortcuts to rfc1902.ObjectIdentity added
from rfc1902.ObjectType and rfc1902.NotificationType
(.addAsn1MibSource(), .addMibSource(), .loadMibs())
- When pretty printing indices at rfc1902.ObjectType, quote only strings.
- SNMP overview and PySNMP hlapi tutorial added to documentation.
- Fix to __doc__ use in setup.py to make -O0 installation mode working.
- Fix to ObjectIdentity->ObjectIdentifier attributes handover
- Fixed crash at oneliner compatibility code on EOM response.
- Fixed crash in hlapi.transport module.
- Fixed OID resolution issues that roots at node 0 and 2.
- Fix to MIB builder to fail gracefully on corrupted MIB package encounter.
- Fix to docs distribution -- now the are Sphinx-buildable out-of-the-box.
- Source code re-linted
Revision 4.3.0, released 2015-09-28
-----------------------------------
- Critical error fixed in key localization procedure for AES192/AES256/3DES
cyphers. Previous versions might never worked properly in this respect.
- Initial PySMI integration. Original ASN.1 MIBs could now be parsed, stored
at a local pysnmp MIBs repository and loaded into SNMP Engine. Relevant
example scripts added. Obsolete libsmi-based scripts removed.
- Major rewrite of native SNMPv3 CommandGenerator and NotificationOriginator
applications towards the following goals:
* avoid binding to specific SNMP engine instance to promote single
SNMP app instance using many SNMP engine instances
* support two APIs for working with request data: one operates on the
whole PDU object while the other on PDU contents
* keep callback context data in stack rather than in stateful application
cache
* newly introduced sendVarBinds() method offers a more functional and
logical signatures.
* Promote the use of dedicated classes for dealing with OID-value pairs.
Instances of those classes resemble OBJECT-IDENTITY, OBJECT-TYPE and
NOTIFICATION-TYPE MIB structures.
* Oneliner API reworked to become more generic: its LCD configuration
shortcuts and and var-bindings processing code split off SNMP apps
classes to stand-alone objects. The whole API also moved up in package
naming hierarchy and becomes 'pysnmp.hlapi.asyncore' (hlapi is
apparently an African fish). Old oneliner API remains fully operational
at its original location.
* Synchronous oneliner apps redesigned to offer Python generator-based
API along with a more comprehensive set of accepted parameters.
* Asyncore-based asynchronous apps reworked to become functions.
* Twisted API moved entirely into high-level domain to be aligned with
other high-level APIs. This WILL BREAK backward compatibility for
those apps that use Twisted API.
* Keep backward compatibility for all existing major/documented interfaces
- Sphinx documentation added to source code and example scripts. Library
documentation converted from .html into RsT markup.
- Execution Observer facility implemented to give app an inside view
of SNMP engine inner workings. This is thought to be a generic
framework for viewing (and modifying) various internal states
of pysnmp engine. Previously introduced non-standard APIs (like
getting peer's transport endpoint which is not suggested in RFCs)
will be gradually migrated to this new framework.
- Initial support for the asyncio & Trollius frameworks and
coroutines-based SNMP Applications interfaces added. Both IPv4 and IPv6
datagram transports are currently supported.
- Original asynsock transport and AsyncsockDispatcher renamed into
asyncore and AsyncoreDispatcher respectively to provide better hint
to fellow devs on the underlying transport being used. Backward
compatibility preserved.
- The asyncore-based transport subsystem extended to support POSIX
sendmsg()/recvmsg() based socket communication what could be used,
among other things, in the context of a transparent SNMP proxy
application. Technically, the following features were brought
into pysnmp with this update:
* Sending SNMP packets from a non-local IP address
* Receiving IP packets for non-local IP addresses
* Responding to SNMP requests from exactly the same IP address
the query was sent to. This proves to be useful when listening
on both primary and secondary IP interfaces.
- Internal oneliner apps configuration cache moved from respective
apps objects to [a singular] snmpEngine "user context" object.
That would allow for better cache reuse and allow for a single app
working with many snmpEngine instances.
- Oneliner GETBULK Command Generator now strips possible excessive OIDs
off the bottom of returned var-binds table.
- Constraints assignment shortcut added to some base rfc1902 types (Integer,
Integer32, OctetString, Bits). That formally constitutes ASN.1 sub-typing.
- Built-in debugging is now based on Python logging module.
- Examples on a single Transport Dispatcher use with multiple SnmpEngine
instances applicatons added.
- Example script on transport timeout & retries manipulation added.
- Example script explaining incoming message's communityName re-mapping added.
- Broadcast socket option can now be enabled with the .enableBroadcast()
call for any datagram-based transport (namely, UDP and UDP6).
- AbstractTransportDispatcher's jobStarted() and jobFinished() methods
now accept optional 'count' parameter which is a way for an app to indicate
how many responses are expected or have been processed in bulk.
- Example script on SNMP Agents UDP broadcast-based discovery added.
- Oneliner transport object now supports setLocalAddress() method to
force socket binding to specified local interface.
- New public DgramSocketTransport.getLocalAddress() returns local endpoint
address underlying BSD socket is currently bound to.
- Passing request details to access control callback at CommandResponder
reworked towards more robust and simple design with the execution observer
facility.
- All MIBs rebuilt with pysmi.
- MIB instrumentation example improved to cover table index building facility.
- Handle the case of null writer at Debug printer.
- Do not cache snmpEngineId & snmpAdminString at CommandGenerator to let it
be reused with many different snmpEngines.
- TRAP PDU agent address evaluation at proto.api made lazy to improve
startup time.
- Multiple fixes to verify pyasn1 decoder.decode() return to withstand
broken SNMP messages or its components.
- First attempt made to make some of SNMP Engine settings persistent
across reboots.
- Make config.delTransport() returning detached transport object. Asyncio
examples now use this facility to explicitly shutdown transport object.
- Parts of SMIv1 remnant MIBs (RFC1213-MIB, RFC1158-MIB) added to provide
complete compatibility with SMIv1. Symbols defined in these MIBs only
present in SMIv1 so they can't be substituted with their SMIv2 analogues.
- MibBuilder.addMibSources() convenience method added.
- The smi.MibBuilder() will now raise more specific exceptions (MibLoadError,
MibNotFoundError) on MIB loading problems rather than more generic
SmiError.
- The oneliner's MibVariable MIB lookup subsystem redesigned for more
generality to mimic OBJECT-TYPE macro capabilities related to SNMP
PDU handling. The two new classed are ObjectIdentity and ObjectType.
The ObjectIdentity class additionally supports just a MIB module name
initializer in which case if resolves into either first or last symbol
in given MIB. Another option is just a MIB symbol initializer without
specifying MIB module.
This new subsystem is moved from the scope of oneliner to more common
pysnmp.smi.rfc1903 scope to more naturally invoke it from whatever
part of pysnmp requires MIB services.
- MibBuilder now prepends the contents of environment variables it
recognizes (PYSNMP_MIB_DIR, PYSNMP_MIB_DIRS, PYSNMP_MIB_PKGS) rather
than using them instead of its default core MIBs.
- Removed RowStatus default value as it may collide with possible subclass
constraints.
- A few additional MIB tree management methods added to MibViewController
to better address ordered nature of MIB tree nodes (namely, getFirst*,
getLast* family of methods).
- Wheel distribution format now supported.
- Fix to authoritative engine side snmpEngineID discovery procedure:
respond with notInTimeWindows rather then with unsupportedSecurityLevel
at time synchronization phase.
- Fix to rfc1902.Bits type to make it accepting hex and binary initializers,
cope with missing bits identifieirs at prettyPrint().
- Memory leak fixed in CommandForwarder examples.
- Fix to BULK CommandGenerator to use the same nonRepeaters OIDs across
multiple GETBULK iterations so returned table for nonRepeaters columns
would hold the same var-bind.
- Fix to CommandGenerator to make sendRequestHandle persistent across
multiple iterations of GETNEXT/GETBULK queries.
- Fix to sendNotification() error handling at NotificationOriginator.
- Fix to preserve possible 'fixed length' setting atrfc1902.OctetString
on clone()'ing and subtype()'ing.
- Fix to rfc1902.OctetString & Bits to base them on OctetString class to
make the 'fixed length' property working.
- Fix to .clone() method of rfc1902.Bits class to make its signature
matching the rest of classes. This may broke code which used to pass
namedValue parameter positionally rather than binding it by name.
- Fix to PDU translation service (proto.proxy.rfc2576) to make it
initializing errorIndex & errorStatus components of the resulting PDU.
- Fix to MsgAndPduDispatcher.sendPdu() to clean up request queue on
pysnmp-level processing failure.
- Fix to SNMPv1/v2c message processing subsystem to make it serving
unique PDU request-id's in both outgoing and incoming confirmed
and response PDU types. Duplicate request-id's in unrelated PDUs may
cause cache errors otherwise.
- Fix to licensing terms of multiple twisted backend modules to make
the whole pysnmp package licensed under BSD 2-Clause license. This
change has been explicitly permitted by the original modules authors.
- Fix to asyncore-based transport not to use asyncore's cheap inheritance
from socket object what caused warnings.
- Fix at NotificationOriginator to make is using MibInstrumentationController
when expanding Notification OBJECTS into Managed Objects Instances.
- Missing wrongLength and wrongEncoding SMI errors added.
- Fix to file descriptor leak at MibBuilder.
- Fix to rfc2576.v2ToV1() to ignore impossible errorStatus.
- Fix to rfc2576.v1ToV2() to reset ErrorStatus==noSuchName on proxying.
- Fix to smi.builder to explicitly fail on any MIB file access error
(but ENOENT) and raise IOError uniformly on any directory/egg access
failure.
- Fix to infinite loop at config.delV3User().
Revision 4.2.5, released 2013-10-02
-----------------------------------
- License updated to vanilla BSD 2-Clause to ease package use
(http://opensource.org/licenses/BSD-2-Clause).
- A dozen of lightweight Twisted-based example scripts replaced more
complex example implementations used previously.
- SNMP Proxy example apps separated into a larger set of more specialized
ones.
- Most of Command Generator examples re-pointed to a live SNMP Agent
at demo.snmplabs.com to ease experimentation and adoption.
- Multithreaded oneliner CommandGenerator example added.
- Packet-level SNMP API (pysnmp.proto.api) getErrorIndex() method can now
be instructed to ignore portentially malformed errorIndex SNMP packet
value what sometimes happens with buggy SNMP implementations.
- Standard SNMP Apps and built-in proxy now ignores malformed errorIndex
value.
- Built-in logging now includes timestamps.
- Multi-lingual capabilities of all CommandGenerator & NotificationOriginator
apps re-worked and improved. For instance it is now it's possible to run
getBulk() against a SNMPv1 Agent invoking built-in SNMP Proxy behind the
scene.
- The $PYSNMP_MIB_DIR & $PYSNMP_MIB_DIRS & $PYSNMP_MIB_PKGS path separator
made platform-specific.
- Change to rfc2576.v1tov2() logic: errorStatus = noSuchName is now
translated into rfc1905.noSuchObject exception value for *all* var-bindings
at once. Although RFC2576 does not suggest error-status -> v2c exception
translation, historically pysnmp used to perform it for a long time so we
can't easily stop doing that.
- Exception re-raising improved at MibInstrumController.flipFlopFsm() and
asynsock/twisted dispatchers so that original traceback is preserved.
- A single instance of transport dispatcher can now serve multiple
receivers (identified by IDs) chosen by a public data routing method.
- SnmpEngine.[un]registerTransportDispatcher() methods now accept optional
receiver ID token to be used by transport dispatcher's data router. This
allows for multiple SNMP engines registration with a single transport
dispatcher.
- Distribute is gone, switched to setuptools completely.
- The snmpCommunityTable row selection improved to follow RFC2576, clause
5.2.1.
- Asyncore-based dispatcher attempts to use poll() whenever available
on the platform. It would help handling a really large number (>1024)
of file descriptors.
- AsynCommandGenerator.makeReadVarBinds() generalized into a new
makeVarBinds() method which replaces somewhat redundant code at setCmd()
and AsynNotificationOriginator.sendNotification().
- AsynCommandGenerator.uncfgCmdGen() & AsynNotificationOriginator.uncfgCmdGen()
methods now accept optional authData parameter to remove specific entries
from LCD. This can be useful for modifying security parameters for
specific securityName.
- SNMP credentials management reworked to separate userName from securityName
in snmpCommunityEntry and usmUserEntry tables. Changes made to addV1System(),
addV3User() functions as well as to their oneliner's wrappers.
- The contextEngineId parameter of config.addV3User() and auth.UsmUserData()
renamed into securityEngineId as it's semantically correct
- Oneliner UsmUserData() and CommunityData() classes now support clone()'ing
to facilitate authentication data management in user applications.
- Oneliner transport target classes now support the getTransportInfo()
method that returns network addresses used on protocol level.
- Oneliner CommandGenerator.getNext() & .getBulk() methods now support the
maxCalls kwarg to limit the maximum number of iterations to perform.
- The config.addSocketTransport() helper renamed into config.addTransport()
and improved by automatically instantiating compatible TransportDispatcher
making it dispatcher-agnostic. As an additional bonus, application may not
call registerTransportDispatcher() as it would be called by addTransport().
- The SnmpV3MessageProcessingModel.getPeerEngineInfo() method is implemented
to communicate discovered peer SNMP engine information to SNMP apps what
can be used for fine usmUserTable configuration.
- AsynNotificationOriginator.cfgCmdGen() does not take into account
securityModel & securityLevel when reducing LCD access via addTrapUser().
This improves LCD consistency on sparse add/del operatons but also
does not let you to configure different securityModels per securityname
at VACM though the cfgCmdGen() wrapper.
- MIB builder traceback formatting and reporting improved.
- SNMP Engine object now has a snmpEngineID attribute exposed.
- Fix to inet_ntop()/inet_pton() support on Windows at TRANSPORT-ADDRESS-MIB.
- Fix to usmUserSecurityName table column implementation -- automatic value
generation from index value removed.
- Fix and significant logic rework of snmpCommunityTable to make it working
in both Generator and Responder modes and better follow RFC2576
requirements on sequential entries lookup and selection. As a side effect,
untagged snmpCommunityTable entries will *not* match tagged
snmpTargetAddrTable entries and vice versa.
- Fix to Twisted-based NotificationOriginator to make it serving INFORMs again.
- Fix to rfc2576.v1tov2() logic: errorStatus = noSuchName is now translated
into rfc1905.noSuchObject exception value for *all* var-bindings. Although
this is not mentioned in RFC, it looks as a more consistent approach.
- Fix of rounding error to base I/O dispatcher's next timer call calculation.
- Explicit twisted dispatcher's timer resolution (of 1 sec) removed to make
use of global default of 0.5 sec.
- Fix to twisted/udp non-default local endpoint binding features. Common
socket ('host', port) notation is now supported.
- Fix to Twisted-based transport to make it closing UDP port / UNIX pipe
on shutdown.
- Fix to Twisted-based dispatcher not to close transport on unregistration
at dispatcher as transports can potentially be reused elsewhere.
- Fix to asyncore-based transport to work only with AsynsockDispatcher's
socket map and not to touch default asyncore's one. The latter have caused
dispatcher/transport restarting issues.
- The delV3User() function improved to drop all rows from USM table that
were cloned from the target one.
- Fix to exceptions handling at MsgAndPduDispatcher.sendPdu() to avoid
sendPduHandle miss (followed by system crash) on cache expiration run.
- Break cyclic references at CommandResponder and NotificationReceiver apps
through close() method.
- Fix to octet string typing at 3DES codec (used to throw an exception).
- Fix to SnmpAdminString, SnmpTagList, SnmpTagValue types to make them
supporting UTF-8 initializers.
- Fix to v1/v2c message processing module which used to refer to a
bogus stateReference in some cases what causes SNMP engine crashes.
- Fix to IPv6 transport to zero ZoneID, FlowID and ScopeID components
sometimes coming along with incoming packet.
- Fix to SNMPv1 MP module to pass stateReference to registered app on
unconfirmed notifications reception (to let NotificationReceiver
Apps browsing request details).
(transport information at the moment) at SNMP engine.
- Asyncsock sockets now configured with SO_REUSEADDR option to fix possible
Windows error 10048.
- Gracefully handle malformed SnmpEngineID at USM coming from SNMPv3 header.
- Typos fixed in error-status constants at CommandResponder
- Missing import added to oneliner auth module.
- Cosmetic changes to v3arch example scripts.
Revision 4.2.4, released 2013-01-30
-----------------------------------
- SNMPv3 high-level and native API examples reworked and extended to cover
many use cases.
- The missing functionality of NOTIFICATION-TYPE objects being looked up
at local Management Instrumentation and attached to TRAP/INFORM message
by Notification Originator is now fully implemented.
- The missing functionality of passing Response PDU contents of INFORM
request is now implemented at Notification Originator app. The return
value of NotificationOriginator.sendNotification is now a composite object
that includes errorStatus, errorIndex and varBinds.
- The missing functionality of passing lookupNames & lookupValues params
to Notification Originator is now implemented. It may make sense for
INFORMs.
- The missing functionality of passing contextName to oneliner
version of NotificationOriginator.sendNotification is now implemented.
- Oneliner example apps now include cases where non-default SNMP
ContextEngineId/ContextName/SecurityEngineId is used.
- The contextName parameter of SnmpContext.getMibInstrum made optional.
- AbstractMibInstrumController class added as a base class for all possible
kinds of Management Instrumentation controllers.
- Report package version on debugging code initialization.
- MibInstrumController.getMibBuilder() added.
- I/O sockets buffer sizes made configurable, minimum default is now
forced to be no less than 2**17 (to fit two huge datagrams).
- Catch possible exceptions on pyasn1 encoder invocation.
- VACM modules converted from a function into an object to let it keep
state (caches) in the future.
- Unnecessary MibSource explicit initialization calls removed at MibBuilder.
- Example configuration for Net-SNMP's snmptrapd added.
- Cast additionalVarBinds into ObjectIdentifier type at
NotificationOriginator.sendNotification()
- Standard SNMPv3 Apps hardened to catch protocol-related exceptions and
report them as errorIndication's.
- Catch and mute possible failure of getsockname(), that seems to happen
on Windows only so far.
- Memory leak fixed at oneliner cache of already configured targets.
- Fixes to at AsynNotificationOriginator.sendNotification() to make
a) the notificationType param mandatory b)t e varBinds param really
optional
- Fixes to ContextEngineId/ContextName support at the oneliner API: now
both items should be passed to request PDU through Cmd() request
initiation method, the items of authData object should be used only for
LCD configuration.
- Fix to MibVariable handling of the MIB, <empty-symbol> initializers.
- Fix to outgoing queue processing order at socket transport. Now
it's a FIFO discipline rather than LIFO.
- Fix to NotificationOriginator's additionalVarBinds parameter - it is
not mandatory anymore with the oneliner API. Also additionalVarBinds
defaulted value changed from None to () meaning no var-binds.
- Attempt to convert Windows style EOL into UNIX ones in MIB source
modules appeared to be unnecessary and even destructive to modules
data in some cases. So the conversion code removed altogether.
- Fix to isAccessAllowed() error handling at NotificationOriginator. System
used to crash on access denied condition.
- Fix to NotificationOriginator to make it use system uptime and trap OID
values from SNMP engine's instrumentation rather then from SNMP context.
- Fix a couple of bugs at MibTable* logic involved for table instances
creation.
- Fix to Management Instrumentation code to handle cases of non-initialized
or not-compliant-to-constraints Managed Objects Instances.
- Fix to Management Instrumentation code to make table row removal through
SNMP working again. Wrong method (instumClone) was probed at terminal
MIB nodes values instead of the right one (setValue).
Revision 4.2.3, released 2012-09-06
-----------------------------------
- SECURITY FIX: USM subsystem did not verify securityLevel of a request
to an authoritative SNMP engine against auth/priv protocols
configured for the user in question. That allowed unauthenticated/unciphered
access to pysnmp-based Agent even if USM user is configured to provide one.
- Oneliner [Asyn]CommandGenerator now supports optional keyword args
lookupNames, lookupValues that enable response OID / value looked up at
MIB and reported as a MibVariable container object carrying relevant
MIB info.
- Oneliner [Asyn]CommandGenerator now supports symbolic MIB object names to be
passed within a MibVariable container object which would do a deferred
MIB lookup for name resolution. This is a new and preferred API which
obsoletes the tuple-based one (it is still suppored though).
- Oneliner CommandGenerator's class attributes lexicographicMode, maxRows
and ignoreNonIncreasingOid moved to optional keyword args of nextGen()
and bulkGen() methods.
- IPv6/UDP and Local Domain Socket transport interfaces added to the
oneliner API.
- Mib Instrumentation subsystem re-worked to replace excessive
MibNode's smiCreate()/smiWrite()/smiDestroy() methods with
MibScalarInstance's getValue()/setValue()
- MibTree.readTest[Get]Next() reworked to be called uniformely so
user could tap on these methods at any level of the MIB tree.
- MibTableColumn.getNextNodeWithValue() unpublished API method obsoleted
and removed for clarity.
- Hex dumps of binary parts of the protocol added to ease system
operations analysis.
- SnmpEngineId autogeneration does not call DNS resolver but uses
local hostname not to depend upon local IP availability and performance.
- Example apps reworked, additional SNMPv3 auth/priv protocols and transports
added.
- Package version is now available as __init__.__version__ and it is
in-sync with distutils.
- Package meta-information updated.
- The __init__.py's made non-empty (rumors are that they may be optimized
out by package managers).
- Multiple fixes to UNIX domain socket transport to make it fully
operational again.
- Use sysUpTime value whenever it is included in Notification PDU, otheriwese
resort to SNMP engine uptime reading.
- SNMPv2c Message is now defined in rfc1901.py what matches standard
definition.
- Types defined within SNMPv1/v2c data structures (rfc1157.py/rfc1905.py)
moved to module scope to become accessible by wrapper routines
(v1.py/v2c.py). This is used for setting strictly typed default values
to corresponding SNMP data structures.
- The obsolete and unpublished MibInstrumController.readVarsFast() method
removed for API clarity.
- MibBuilder now distinguishes case of MIB modules filenames even if
underlying OS does not.
- LCD configuration caching is implemented at pysnmp.entity.rfc3413.config
that improves performance of repetitive calls by 10% and might hugely
improve NotificationOriginator's performance when working on a large
number of targets.
- A caching maps implemented at rfc2576 subsystem to speed-up communityName
to/from securityName resolution. The also makes transport tags processing
better compliant to the standard.
- Community and Transport tags processing changed at the oneliner interface
to make the whole mechanism more compliant with the standard. Most
importantly, it is now possible to tag authentication and transport
information separately.
- The NoSuchInstanceError exception class is no more inherits from
NoSuchObjectError to make class hierarchy closer to SNMP specification
which states that these errors are separate and independent.
- The Next & BulkCommandGenerator's split onto single-run and iterative
impementations. The former just process a single interaction and complete
while the latter run as many interactions as user callback function
indicates to.
- The pysnmp.entity.rfc3413.mibvar module is now obsolete by
pysnmp.entity.rfc3413.oneliner.mibvar featuring basically the same
features but within a stateful, dedicated object.
- Auth & target configuration container classes moved to their separate
modules at oneliner API.
- The notificationType parameter of AsynNotificationOriginator.sendNotification
made defaulted to reflect its optional nature.
- Oneliner UsmUserData, UdpTransportTarget, Udp6TransportTarget instances
are not hashable anymore as they are intended to act more like a data
structure than object.
- Built-in debugger now supports negating debugging categories.
- An async/getgen.py example script added.
- Fix to MIB data reading routine to make it working with possible
Windows end-of-line's.
- Fix to CommandGenerator's SNMPv3 engine autodiscovery algorithm
when retryCount is administratively set to 0.
- Fix to Notification Originator to make it communicating a single
sendPduHandle to an application even when multiple INFORMs are triggered
and processed by a single call by way of transport tagging feature.
- Fix to rfc2576:processIncomingMessage() to take SecurityModel into account
when lookup up SecurityName by CommunityName. This allows mixed SNMPv1/v2c
communication with the same target.
- Fix to internal MessageProcessing and SecurityModel timers so they become
dependant on system timer resolution.
- Fix to v1.PDUAPI.setDefaults() method that used to set wrongly typed
time-stamp component.
- Fix to IPv6 address handling to prevent system from crashing whilst
running Python3.
- Fix to SNMPv2 exception objects translation into SNMPv1 PDU and NEXT
OIDs calculation.
- Fix to MibTree class to properly report noSuchObject & noSuchInstance
SNMP special values.
- Fix to libsmi2pysnmp tool to make it working again in Python < 2.7
- Fix to exception handling at decodeMessageVersion() caller to prevent
ASN.1 parsing errors crashing the whole app.
- Fix to GenericTrap type processing at rfc2576:v1Tov2c() which used to
crash the whole SNMP engine.
- Fix to [possibly uninizilaized] pyasn1 objects printouts at
MibInstrumController.__indexMib()
- Fix to maxSizeResponseScopedPDU calculation at rfc3414/service.py.
- Dedicated 'withmib' example set is obsolete and removed.
- Another SNMP proxy example app added (1to3.py).
- Fix to MIB modules loading code to make it using __import__() properly.
This also makes pysnmp working again with Python 3.3rc0.
- Typo fix to snmpInASNParseErrs MIB instance object.
- Typo fix to errind.EngineIdMismatch class and its instance.
Revision 4.2.2, released 2012-04-21
-----------------------------------
- Oneliner CommandGenerator can now limit the number of SNMP table
rows returned by nextCmd()/bulkCmd() methods.
- Oneliner CommunityData configuration object can now be initialized
with community name only, security name will be chosen automatically.
- Oneliner LCD configuration routines reworked towards clarity. The
side-effect of this change is that repetitive oneliner call with the same
securityName and different configuration options will only honor
the first settings. Previous implementation would override older settings.
- Transport dispatcher now provides its own time expressed in
fractions of second. SNMP engine uses this notion of time for
handling requests timeout to make packet flow time bound
to async I/O core operations rather than to real time.
- The libsmi2pysnmp tool improved to handle incomplete SMI v1->v2
conversion performed by smidump. The remaining core SMIv1 modules
excluded from the core MIB set.
- The pyasn1 constraint and enumeration objects put into ASN1-*
MIB modules what appears to be more in-line with SMI. Existing
MIB modules as well as libsmi2pysnmp tool corrected accordingly.
- SMIv1 MIB modules (including RFC1155 and RFC1213) were moved to
pysnmp-mibs as pysnmp is SMIv2-based.
- The MibBuilder.importSymbols() now takes optional kwargs and
push them into MIB modules globals(). This is to facilitate
passing user infomation, such as DB connection handler, to MIB
module namespace so it could be used by ManagedObjects implementations.
- When running on Python3, SMI will re-raise exceptions with the original
traceback for easier diagnostics.
- Out of PYTHONPATH MIB paths now supported.
- Added pyasn1 decoder failures diagnistics in debug mode.
- Fix to non-MT-safe class attributes at SNMPv3 MP & SEC modules.
- Fix to ContextName handling in bytes form whilst running Python3. Data
mismatch error would return otherwise.
- Fix to SNMPv3 MP peer engine ID discovery not to learn and use
user-specified ContextEngineId.
- Fix to socket.error processing at Py3 on Windows.
- Fix to oneliner GETNEXT/GETBULK implementation to properly support
ignoreNonIncreasingOIDs option.
- Fix to setEndOfMibError()/setNoSuchInstanceError() at v1 PDU not to
loose errorIndex.
- Fix to api.v2c.getVarBindTable() to ignore possible non-rectangular GETBULK
response tables.
- Fix to oneliner getnext/getbulk response table rectangulation procedure
to gracefully handle an empty column condition.
- Fix to legacy MibBuilder.getMibPath() to prevent it from missing
.egg-based components in path.
- Fix to oneliner configuration routine that used to implicitly
tag SNMPv1/v2c auth and transport LCD rows what resulted in
huge delays when processing incoming messages with large number
of peers configured.
- Fix to UDP6 transport handling at rfc2576 security module.
- Fix to SnmpEngineID value autogeneration (used to fail on Mac).
- SNMPv2-SMI.ObjectType.__repr__() fixed to do a repr() on its components.
- All SNMPv2-SMI.MibNode-based objects, once exported to a mibBuilder, will
carry an embedded label symbol.
- Exlicit repr() calls replaced with '%r'
- Fix to error processing at GETNEXT & GETBULK apps response handlers.
- Fix to libsmi2pysnmp to make it supporting long (256+) list of function
params.
- Fix to libsmi2pysnmp to support inheritance of MIB types.
Revision 4.2.1, released 2011-11-07
-----------------------------------
- Support string OIDs at one-liner API.
- Code quality of libsmi2pysnmp tool improved, MIBs re-built.
- SNMP-PROXY-MIB & SNMP-USER-BASED-SM-3DES-MIB added
- v1arch bulkgen.py example added
- Major overhawl for Python 2.4 -- 3.2 compatibility:
+ get rid of old-style types
+ drop string module usage
+ switch to rich comparation
+ drop explicit long integer type use
+ map()/filter() replaced with list comprehension
+ apply() replaced with var-args
+ dictionary operations made 2K/3K compatible
+ division operator made 2K/3K compatible
+ sorting function now operates on key
+ iterators returned by some funcs in py3k converted to lists
+ exception syntax made 2K/3K compatible
+ tuple function arguments resolved to scalars to become py3k compatible
+ BER octetstream is now of type bytes (Py3k) or still string (Py2k)
Revision 4.1.16d, released 2011-09-22
-------------------------------------
- Fix to SNMPv1 Trap PDU agentAddress setter shortcut method.
Revision 4.1.16c, released 2011-08-14
-------------------------------------
- Missing module import fixed in privacy subsystem
Revision 4.1.16b, released 2011-08-13
-------------------------------------
- Oneliner CommandGenerator can now optionally ignore non-increasing OIDs.
- Default CommandResponder now skips non-compliant (Counter64) values
when responding to a v1 Manager.
- Fix to state information handling at CommandResponder app.
- Fix to Twisted reactor shutdown condition.
- Fix to distutils dependencies syntax.
Revision 4.1.16a, released 2011-03-17
-------------------------------------