PSARC 2016/344 pysnmp - an SNMP library for Python
authorLaszlo Peter <laszlo.peter@oracle.com>
Wed, 07 Sep 2016 14:48:25 -0700
changeset 6765 49d1ca37bc48
parent 6764 61145e0c8313
child 6766 fc50c2dfae1b
PSARC 2016/344 pysnmp - an SNMP library for Python 23745949 pysnmp: an SNMP library for Python
components/python/pysnmp/Makefile
components/python/pysnmp/patches/pycrypto.patch
components/python/pysnmp/pysnmp-PYVER.p5m
components/python/pysnmp/pysnmp.license
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pysnmp/Makefile	Wed Sep 07 14:48:25 2016 -0700
@@ -0,0 +1,53 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		pysnmp
+COMPONENT_VERSION=	4.3.2
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:7c2bd81df17aa7dca0057a68e7a32284a72231309a0237d66d5b803b5c118977
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	http://pysnmp.sf.net
+COMPONENT_BUGDB=	python-mod/pysnmp
+
+TPNO=			29885
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+test:		$(NO_TESTS)
+
+system-test:	$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pysnmp/patches/pycrypto.patch	Wed Sep 07 14:48:25 2016 -0700
@@ -0,0 +1,178 @@
+Remove use of pycrypto, and replace with PyCA cryptography.  This has not
+been submitted upstream.
+
+--- pysnmp-4.3.2/pysnmp/proto/secmod/eso/priv/des3.py	2016-02-13 11:38:14.000000000 -0800
++++ pysnmp-4.3.2/pysnmp/proto/secmod/eso/priv/des3.py	2016-07-01 12:44:37.333145737 -0700
+@@ -21,9 +21,12 @@
+     sha1 = sha.new
+ 
+ try:
+-    from Crypto.Cipher import DES3
++    from cryptography.hazmat.backends import default_backend
++    from cryptography.hazmat.primitives.ciphers import algorithms, modes, Cipher
+ except ImportError:
+     DES3 = None
++else:
++    DES3 = True
+ 
+ random.seed()
+ 
+@@ -109,7 +112,9 @@
+             encryptKey, snmpEngineBoots
+             )
+ 
+-        des3Obj = DES3.new(des3Key, DES3.MODE_CBC, iv)
++        des3Obj = Cipher(
++            algorithms.TripleDES(des3Key), modes.CBC(iv),
++            backend=default_backend()).encryptor()
+ 
+         privParameters = univ.OctetString(salt)
+ 
+@@ -117,11 +122,12 @@
+         cipherblock = iv
+         ciphertext = null
+         while plaintext:
+-            cipherblock = des3Obj.encrypt(
++            cipherblock = des3Obj.update(
+                 univ.OctetString(map(lambda x, y: x^y, univ.OctetString(cipherblock).asNumbers(), univ.OctetString(plaintext[:8]).asNumbers())).asOctets()
+                 )
+             ciphertext = ciphertext + cipherblock
+             plaintext = plaintext[8:]
++        ciphertext = ciphertext + des3Obj.finalize()
+ 
+         return univ.OctetString(ciphertext), privParameters
+ 
+@@ -145,14 +151,17 @@
+                 errorIndication=errind.decryptionError
+                 )
+ 
+-        des3Obj = DES3.new(des3Key, DES3.MODE_CBC, iv)
++        des3Obj = Cipher(
++            algorithms.TripleDES(des3Key), modes.CBC(iv),
++            backend=default_backend()).decryptor()
+ 
+         plaintext = null
+         ciphertext = encryptedData.asOctets()
+         cipherblock = iv
+         while ciphertext:
+-            plaintext = plaintext + univ.OctetString(map(lambda x, y: x ^ y, univ.OctetString(cipherblock).asNumbers(), univ.OctetString(des3Obj.decrypt(ciphertext[:8])).asNumbers())).asOctets()
++            plaintext = plaintext + univ.OctetString(map(lambda x, y: x ^ y, univ.OctetString(cipherblock).asNumbers(), univ.OctetString(des3Obj.update(ciphertext[:8])).asNumbers())).asOctets()
+             cipherblock = ciphertext[:8]
+             ciphertext = ciphertext[8:]
++        plaintext = plaintext + des3Obj.finalize()
+ 
+         return plaintext
+--- pysnmp-4.3.2/pysnmp/proto/secmod/rfc3414/priv/des.py	2016-02-13 11:38:14.000000000 -0800
++++ pysnmp-4.3.2/pysnmp/proto/secmod/rfc3414/priv/des.py	2016-07-01 12:48:29.221094169 -0700
+@@ -13,9 +13,12 @@
+ from sys import version_info
+ 
+ try:
+-    from Crypto.Cipher import DES
++    from cryptography.hazmat.backends import default_backend
++    from cryptography.hazmat.primitives.ciphers import algorithms, modes, Cipher
+ except ImportError:
+     DES = None
++else:
++    DES = True
+ 
+ random.seed()
+ 
+@@ -90,14 +93,18 @@
+         desKey, salt, iv = self.__getEncryptionKey(
+             encryptKey, snmpEngineBoots
+         )
++        # Use the same DES key three times and TripleDES is identical to DES
++        desKey *= 3
+ 
+         # 8.3.1.2
+         privParameters = univ.OctetString(salt)
+ 
+         # 8.1.1.2
+-        desObj = DES.new(desKey, DES.MODE_CBC, iv)
++        desObj = Cipher(
++            algorithms.TripleDES(desKey), modes.CBC(iv),
++            backend=default_backend()).encryptor()
+         plaintext = dataToEncrypt + univ.OctetString((0,) * (8 - len(dataToEncrypt) % 8)).asOctets()
+-        ciphertext = desObj.encrypt(plaintext)
++        ciphertext = desObj.update(plaintext) + desObj.finalize()
+ 
+         # 8.3.1.3 & 4
+         return univ.OctetString(ciphertext), privParameters
+@@ -121,6 +128,8 @@
+ 
+         # 8.3.2.3
+         desKey, iv = self.__getDecryptionKey(decryptKey, salt)
++        # Use the same DES key three times and TripleDES is identical to DES
++        desKey *= 3
+ 
+         # 8.3.2.4 -> 8.1.1.3
+         if len(encryptedData) % 8 != 0:
+@@ -128,7 +137,9 @@
+                 errorIndication=errind.decryptionError
+             )
+ 
+-        desObj = DES.new(desKey, DES.MODE_CBC, iv)
++        desObj = Cipher(
++            algorithms.TripleDES(desKey), modes.CBC(iv),
++            backend=default_backend()).decryptor()
+ 
+         # 8.3.2.6
+-        return desObj.decrypt(encryptedData.asOctets())
++        return desObj.update(encryptedData.asOctets()) + desObj.finalize()
+--- pysnmp-4.3.2/pysnmp/proto/secmod/rfc3826/priv/aes.py	2016-02-13 11:38:14.000000000 -0800
++++ pysnmp-4.3.2/pysnmp/proto/secmod/rfc3826/priv/aes.py	2016-07-01 12:51:20.539017683 -0700
+@@ -12,9 +12,12 @@
+ from pysnmp.proto import errind, error
+ 
+ try:
+-    from Crypto.Cipher import AES
++    from cryptography.hazmat.backends import default_backend
++    from cryptography.hazmat.primitives.ciphers import algorithms, modes, Cipher
+ except ImportError:
+     AES = None
++else:
++    AES = True
+ 
+ random.seed()
+ 
+@@ -97,12 +100,15 @@
+         )
+ 
+         # 3.3.1.3
+-        aesObj = AES.new(aesKey, AES.MODE_CFB, iv, segment_size=128)
++        # XXX segment_size=128
++        aesObj = Cipher(
++          algorithms.AES(aesKey), modes.CFB(iv),
++          backend=default_backend()).encryptor()
+ 
+         # PyCrypto seems to require padding
+         dataToEncrypt = dataToEncrypt + univ.OctetString((0,) * (16-len(dataToEncrypt)%16)).asOctets()
+ 
+-        ciphertext = aesObj.encrypt(dataToEncrypt)
++        ciphertext = aesObj.update(dataToEncrypt) + aesObj.finalize()
+ 
+         # 3.3.1.4
+         return univ.OctetString(ciphertext), univ.OctetString(salt)
+@@ -127,10 +133,13 @@
+             decryptKey, snmpEngineBoots, snmpEngineTime, salt
+         )
+ 
+-        aesObj = AES.new(aesKey, AES.MODE_CFB, iv, segment_size=128)
++        # XXX segment_size=128
++        aesObj = Cipher(
++          algorithms.AES(aesKey), modes.CFB(iv),
++          backend=default_backend()).decryptor()
+ 
+         # PyCrypto seems to require padding
+         encryptedData = encryptedData + univ.OctetString((0,) * (16-len(encryptedData)%16)).asOctets()
+ 
+         # 3.3.2.4-6
+-        return aesObj.decrypt(encryptedData.asOctets())
++        return aesObj.update(encryptedData.asOctets()) + aesObj.finalize()
+--- pysnmp-4.3.2/pysnmp.egg-info/requires.txt	2016-02-13 13:14:19.000000000 -0800
++++ pysnmp-4.3.2/pysnmp.egg-info/requires.txt	2016-07-01 12:37:23.692977024 -0700
+@@ -1,3 +1,2 @@
+ pyasn1>=0.1.8
+ pysmi
+-pycrypto>=2.4.1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pysnmp/pysnmp-PYVER.p5m	Wed Sep 07 14:48:25 2016 -0700
@@ -0,0 +1,242 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/pysnmp-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="SNMP library for Python"
+set name=pkg.description \
+    value="SNMP v1/v2c/v3 engine and applications written in pure-Python. Supports Manager/Agent/Proxy roles, scriptable MIBs, asynchronous operation and multiple transports."
+set name=com.oracle.info.description value="the Python pysnmp module"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python \
+    value="org.opensolaris.category.2008:System/Enterprise Management"
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream value="Ilya Etingof <[email protected]>"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2016/344
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp-$(COMPONENT_VERSION)-py$(PYVER).egg-info/zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/cache.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asyncio/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asyncio/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asyncio/dgram/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asyncio/dgram/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asyncio/dgram/udp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asyncio/dgram/udp6.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asyncio/dispatch.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asyncore/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asyncore/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asyncore/dgram/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asyncore/dgram/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asyncore/dgram/udp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asyncore/dgram/udp6.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asyncore/dgram/unix.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asyncore/dispatch.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asynsock/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asynsock/dgram/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asynsock/dgram/udp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asynsock/dgram/udp6.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asynsock/dgram/unix.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/asynsock/dispatch.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/error.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/sockfix.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/sockmsg.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/twisted/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/twisted/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/twisted/dgram/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/twisted/dgram/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/twisted/dgram/udp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/twisted/dgram/unix.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/carrier/twisted/dispatch.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/debug.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/entity/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/entity/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/entity/engine.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/entity/observer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/entity/rfc3413/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/entity/rfc3413/cmdgen.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/entity/rfc3413/cmdrsp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/entity/rfc3413/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/entity/rfc3413/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/entity/rfc3413/mibvar.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/entity/rfc3413/ntforg.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/entity/rfc3413/ntfrcv.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/entity/rfc3413/oneliner/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/entity/rfc3413/oneliner/ntforg.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/error.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/asyncio/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/asyncio/cmdgen.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/asyncio/ntforg.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/asyncio/transport.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/asyncore/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/asyncore/cmdgen.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/asyncore/ntforg.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/asyncore/sync/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/asyncore/sync/cmdgen.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/asyncore/sync/compat/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/asyncore/sync/compat/cmdgen.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/asyncore/sync/compat/ntforg.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/asyncore/sync/ntforg.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/asyncore/transport.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/auth.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/lcd.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/transport.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/twisted/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/twisted/cmdgen.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/twisted/ntforg.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/twisted/transport.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/hlapi/varbinds.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/nextid.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/acmod/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/acmod/rfc3415.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/acmod/void.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/api/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/api/v1.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/api/v2c.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/api/verdec.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/cache.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/errind.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/error.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/mpmod/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/mpmod/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/mpmod/cache.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/mpmod/rfc2576.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/mpmod/rfc3412.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/proxy/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/proxy/rfc2576.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/rfc1155.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/rfc1157.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/rfc1901.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/rfc1902.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/rfc1905.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/rfc3411.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/rfc3412.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/cache.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/eso/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/eso/priv/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/eso/priv/aes192.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/eso/priv/aes256.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/eso/priv/aesbase.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/eso/priv/des3.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/rfc2576.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/rfc3414/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/rfc3414/auth/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/rfc3414/auth/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/rfc3414/auth/hmacmd5.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/rfc3414/auth/hmacsha.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/rfc3414/auth/noauth.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/rfc3414/localkey.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/rfc3414/priv/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/rfc3414/priv/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/rfc3414/priv/des.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/rfc3414/priv/nopriv.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/rfc3414/service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/rfc3826/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/rfc3826/priv/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/proto/secmod/rfc3826/priv/aes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/builder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/compiler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/error.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/exval.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/indices.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/instrum.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/ASN1-ENUMERATION.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/ASN1-REFINEMENT.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/ASN1.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/PYSNMP-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/PYSNMP-SOURCE-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/PYSNMP-USM-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/RFC1158-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/RFC1213-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/SNMP-COMMUNITY-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/SNMP-FRAMEWORK-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/SNMP-MPD-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/SNMP-NOTIFICATION-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/SNMP-PROXY-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/SNMP-TARGET-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/SNMP-USER-BASED-SM-3DES-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/SNMP-USER-BASED-SM-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/SNMP-USM-AES-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/SNMP-VIEW-BASED-ACM-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/SNMPv2-CONF.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/SNMPv2-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/SNMPv2-SMI.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/SNMPv2-TC.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/SNMPv2-TM.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/TRANSPORT-ADDRESS-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/instances/__PYSNMP-USM-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/instances/__SNMP-FRAMEWORK-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/instances/__SNMP-MPD-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/instances/__SNMP-TARGET-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/instances/__SNMP-USER-BASED-SM-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/instances/__SNMP-VIEW-BASED-ACM-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/instances/__SNMPv2-MIB.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/mibs/instances/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/rfc1902.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pysnmp/smi/view.py
+#
+license pysnmp.license license=BSD
+
+# force a group dependency on the optional cryptography; pkgdepend work is
+# needed to flush this out.
+depend type=group fmri=library/python/cryptography-$(PYV)
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on ipaddress; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/ipaddress-$(PYV)
+
+# force a dependency on pyasn1; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pyasn1-$(PYV)
+
+# force a dependency on pysmi; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pysmi-$(PYV)
+
+# force a dependency on the pysnmp package
+depend type=require \
+    fmri=library/python/pysnmp@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on trollius; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/trollius-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pysnmp/pysnmp.license	Wed Sep 07 14:48:25 2016 -0700
@@ -0,0 +1,52 @@
+Copyright (c) 2005-2016, Ilya Etingof <[email protected]>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+  * Redistributions of source code must retain the above copyright notice, 
+    this list of conditions and the following disclaimer.
+
+  * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. 
+
+---
+Copyright (C) 2014, Zebra Technologies
+Authors: Matt Hooks <[email protected]>
+         Zachary Lorusso <[email protected]>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+  this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright
+  notice, this list of conditions and the following disclaimer in the
+  documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+