--- 0.8.7e/configure.ac	2009-06-28 21:45:02.000000000 -0400
+++ ../branches/0.8.7/configure.ac	2009-08-18 20:51:30.000000000 -0400
@@ -351,6 +351,21 @@
   AC_MSG_RESULT([no])
 fi
 
+# ****************** Force Net-SNMP Version Checks ***********************
+# If we should use the system popen or nifty popen
+AC_MSG_CHECKING(whether to verify net-snmp library vs header versions)
+AC_ARG_ENABLE(strict-snmp,
+    [  --enable-strict-snmp    Enable checking of Net-SNMP library vs header versions  (default: disabled)],
+    [ ENABLED_SNMP_VERSION=$enableval ],
+    [ ENABLED_SNMP_VERSION=no ]
+    )
+if test "$ENABLED_SNMP_VERSION" = "yes"; then
+  AC_MSG_RESULT([yes])
+  AC_DEFINE(VERIFY_PACKAGE_VERSION, 1, If we are going to force Net-SNMP library and header versons to be the same)
+else
+  AC_MSG_RESULT([no])
+fi
+
 # ****************** gethostbyname_r Check ***********************
 # Linux Variant
 AC_MSG_CHECKING([for glibc gethostbyname_r])
--- 0.8.7e/snmp.c	2009-06-28 21:45:02.000000000 -0400
+++ ../branches/0.8.7/snmp.c	2009-08-18 20:51:30.000000000 -0400
@@ -91,7 +91,7 @@
 	netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_PRINT_BARE_VALUE, 1);
 	netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_NUMERIC_TIMETICKS, 1);
 
-	#ifdef PACKAGE_VERSION
+	#if defined(VERIFY_PACKAGE_VERSION) && defined(PACKAGE_VERSION)
 		/* check that the headers we compiled with match the library we linked with -
 		   apparently not defined in UCD-SNMP...
 		*/
@@ -215,24 +215,22 @@
 		session.securityName         = snmp_username;
 		session.securityNameLen      = strlen(session.securityName);
 
+		if (snmp_context && strlen(snmp_context)) {
 		session.contextName          = snmp_context;
 		session.contextNameLen       = strlen(session.contextName);
+		}
 
 		session.securityAuthKeyLen   = USM_AUTH_KU_LEN;
 
-		/* set the engineBoots and engineTime to null so that they are discovered */
-		session.engineBoots          = 0;
-		session.engineTime           = 0;
-
 		/* set the authentication protocol */
 		if (strcmp(snmp_auth_protocol, "MD5") == 0) {
 			/* set the authentication method to MD5 */
-			session.securityAuthProto    = snmp_duplicate_objid(usmHMACMD5AuthProtocol, OIDSIZE(usmHMACMD5AuthProtocol));
-			session.securityAuthProtoLen = OIDSIZE(usmHMACMD5AuthProtocol);
+			session.securityAuthProto    = snmp_duplicate_objid(usmHMACMD5AuthProtocol, USM_AUTH_PROTO_MD5_LEN);
+			session.securityAuthProtoLen = USM_AUTH_PROTO_MD5_LEN;
 		}else{
 			/* set the authentication method to SHA1 */
-			session.securityAuthProto    = snmp_duplicate_objid(usmHMACSHA1AuthProtocol, OIDSIZE(usmHMACSHA1AuthProtocol));
-			session.securityAuthProtoLen = OIDSIZE(usmHMACSHA1AuthProtocol);
+			session.securityAuthProto    = snmp_duplicate_objid(usmHMACSHA1AuthProtocol, USM_AUTH_PROTO_SHA_LEN);
+			session.securityAuthProtoLen = USM_AUTH_PROTO_SHA_LEN;
 		}
 
 		/* set the authentication key to the hashed version. The password must me at least 8 char */
@@ -255,16 +253,16 @@
 			session.securityLevel        = SNMP_SEC_LEVEL_AUTHNOPRIV;
 		}else{
 			if (strcmp(snmp_priv_protocol, "DES") == 0) {
-				session.securityPrivProto    = snmp_duplicate_objid(usmDESPrivProtocol, OIDSIZE(usmDESPrivProtocol));
-				session.securityPrivProtoLen = OIDSIZE(usmDESPrivProtocol);
+				session.securityPrivProto    = snmp_duplicate_objid(usmDESPrivProtocol, USM_PRIV_PROTO_DES_LEN);
+				session.securityPrivProtoLen = USM_PRIV_PROTO_DES_LEN;
 				session.securityPrivKeyLen   = USM_PRIV_KU_LEN;
 
 				/* set the security level to authenticate, and encrypted */
 				session.securityLevel        = SNMP_SEC_LEVEL_AUTHPRIV;
 			}else{
-				#if defined(usmAESPrivProtocol) && SNMP_DEFAULT_PRIV_PROTO == usmAESPrivProtocol
-				session.securityPrivProto    = snmp_duplicate_objid(usmAESPrivProtocol, OIDSIZE(usmAESPrivProtocol));
-				session.securityPrivProtoLen = OIDSIZE(usmAESPrivProtocol);
+				#if defined(USM_PRIV_PROTO_AES_LEN)
+				session.securityPrivProto    = snmp_duplicate_objid(usmAESPrivProtocol, USM_PRIV_PROTO_AES_LEN);
+				session.securityPrivProtoLen = USM_PRIV_PROTO_AES_LEN;
 				session.securityPrivKeyLen   = USM_PRIV_KU_LEN;
 				#else
 				session.securityPrivProto    = snmp_duplicate_objid(usmAES128PrivProtocol, OIDSIZE(usmAES128PrivProtocol));
