diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..670eaf6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+SOURCES/net-snmp-5.9.1.tar.gz
diff --git a/.net-snmp.metadata b/.net-snmp.metadata
new file mode 100644
index 0000000..d239cb0
--- /dev/null
+++ b/.net-snmp.metadata
@@ -0,0 +1 @@
+0326d0e07c86f52100ceadd42c875a446309a846 SOURCES/net-snmp-5.9.1.tar.gz
diff --git a/SOURCES/IETF-MIB-LICENSE.txt b/SOURCES/IETF-MIB-LICENSE.txt
new file mode 100644
index 0000000..5fd2a6a
--- /dev/null
+++ b/SOURCES/IETF-MIB-LICENSE.txt
@@ -0,0 +1,41 @@
+MIBs included in this software taken from IETF Documents are considered 
+Code Components in accordance with the IETF Trust License Policy, as found
+here:
+
+http://trustee.ietf.org/license-info/
+
+They are available under the terms of the Simplified BSD license, a copy of
+which is included below.
+
+*****
+
+Copyright (c) 2013 IETF Trust and the persons identified as authors of 
+the code.  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.
+
+· Neither the name of Internet Society, IETF or IETF Trust, nor the 
+names of specific contributors, may be used to endorse or promote 
+products derived from this software without specific prior written 
+permission.
+
+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 OWNER 
+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.
diff --git a/SOURCES/net-snmp-5.7.2-cert-path.patch b/SOURCES/net-snmp-5.7.2-cert-path.patch
new file mode 100644
index 0000000..495fccb
--- /dev/null
+++ b/SOURCES/net-snmp-5.7.2-cert-path.patch
@@ -0,0 +1,30 @@
+1134475 - dependency in perl package
+
+Use hardcoded path to configuration directories instead of net-snmp-config.
+net-snmp-config is in net-snmp-devel package and we do not want net-snmp-perl
+depending on -devel.
+
+diff -up net-snmp-5.7.2/local/net-snmp-cert.cert-path net-snmp-5.7.2/local/net-snmp-cert
+--- net-snmp-5.7.2/local/net-snmp-cert.cert-path	2012-10-10 00:28:58.000000000 +0200
++++ net-snmp-5.7.2/local/net-snmp-cert	2014-09-01 12:05:10.582427036 +0200
+@@ -819,8 +819,7 @@ sub set_default {
+ sub cfg_path {
+   my $path;
+ 
+-  $path = `$NetSNMP::Cert::CFGTOOL --snmpconfpath`;
+-  chomp $path;
++  $path = "/etc/snmp:/usr/share/snmp:/usr/lib64/snmp:/home/jsafrane/.snmp:/var/lib/net-snmp";
+   return (wantarray ? split(':', $path) : $path);
+ }
+ 
+@@ -1414,8 +1413,8 @@ sub checkReqs {
+   die("$NetSNMP::Cert::OPENSSL (v$ossl_ver): must be $ossl_min_ver or later")
+     if ($ossl_ver cmp $ossl_min_ver) < 0;
+ 
+-  die("$NetSNMP::Cert::CFGTOOL not found: please install")
+-    if system("$NetSNMP::Cert::CFGTOOL > /dev/null 2>&1");
++#  die("$NetSNMP::Cert::CFGTOOL not found: please install")
++#    if system("$NetSNMP::Cert::CFGTOOL > /dev/null 2>&1");
+ }
+ 
+ sub initOpts {
diff --git a/SOURCES/net-snmp-5.7.3-iterator-fix.patch b/SOURCES/net-snmp-5.7.3-iterator-fix.patch
new file mode 100644
index 0000000..fb34caf
--- /dev/null
+++ b/SOURCES/net-snmp-5.7.3-iterator-fix.patch
@@ -0,0 +1,14 @@
+diff -urNp old/agent/mibgroup/host/data_access/swrun.c new/agent/mibgroup/host/data_access/swrun.c
+--- old/agent/mibgroup/host/data_access/swrun.c	2017-07-18 09:44:00.626109526 +0200
++++ new/agent/mibgroup/host/data_access/swrun.c	2017-07-19 15:27:50.452255836 +0200
+@@ -102,6 +102,10 @@ swrun_count_processes_by_name( char *nam
+         return 0;    /* or -1 */
+ 
+     it = CONTAINER_ITERATOR( swrun_container );
++    if((entry  = (netsnmp_swrun_entry*)ITERATOR_FIRST( it )) != NULL) {
++        if (0 == strcmp( entry->hrSWRunName, name ))
++            i++;
++    }
+     while ((entry = (netsnmp_swrun_entry*)ITERATOR_NEXT( it )) != NULL) {
+         if (0 == strcmp( entry->hrSWRunName, name ))
+             i++;
diff --git a/SOURCES/net-snmp-5.8-Remove-U64-typedef.patch b/SOURCES/net-snmp-5.8-Remove-U64-typedef.patch
new file mode 100644
index 0000000..75a2c6d
--- /dev/null
+++ b/SOURCES/net-snmp-5.8-Remove-U64-typedef.patch
@@ -0,0 +1,12 @@
+diff -urNp a/include/net-snmp/library/int64.h b/include/net-snmp/library/int64.h
+--- a/include/net-snmp/library/int64.h	2018-07-18 14:37:16.543348832 +0200
++++ b/include/net-snmp/library/int64.h	2018-07-18 15:31:31.516999288 +0200
+@@ -10,7 +10,7 @@ extern          "C" {
+      * Note: using the U64 typedef is deprecated because this typedef conflicts
+      * with a typedef with the same name defined in the Perl header files.
+      */
+-    typedef struct counter64 U64;
++//    typedef struct counter64 U64;
+ #endif
+ 
+ #define I64CHARSZ 21
diff --git a/SOURCES/net-snmp-5.8-clientaddr-error-message.patch b/SOURCES/net-snmp-5.8-clientaddr-error-message.patch
new file mode 100644
index 0000000..7ea9752
--- /dev/null
+++ b/SOURCES/net-snmp-5.8-clientaddr-error-message.patch
@@ -0,0 +1,35 @@
+diff -urNp a/snmplib/snmp_api.c b/snmplib/snmp_api.c
+--- a/snmplib/snmp_api.c	2020-11-26 11:05:51.084788775 +0100
++++ b/snmplib/snmp_api.c	2020-11-26 11:08:27.850751397 +0100
+@@ -235,7 +235,7 @@ static const char *api_errors[-SNMPERR_M
+     "No error",                 /* SNMPERR_SUCCESS */
+     "Generic error",            /* SNMPERR_GENERR */
+     "Invalid local port",       /* SNMPERR_BAD_LOCPORT */
+-    "Unknown host",             /* SNMPERR_BAD_ADDRESS */
++    "Invalid address",          /* SNMPERR_BAD_ADDRESS */
+     "Unknown session",          /* SNMPERR_BAD_SESSION */
+     "Too long",                 /* SNMPERR_TOO_LONG */
+     "No socket",                /* SNMPERR_NO_SOCKET */
+@@ -1662,7 +1662,9 @@ _sess_open(netsnmp_session * in_session)
+         DEBUGMSGTL(("_sess_open", "couldn't interpret peername\n"));
+         in_session->s_snmp_errno = SNMPERR_BAD_ADDRESS;
+         in_session->s_errno = errno;
+-        snmp_set_detail(in_session->peername);
++        if (!netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
++                                    NETSNMP_DS_LIB_CLIENT_ADDR))
++            snmp_set_detail(in_session->peername);
+         return NULL;
+     }
+ 
+diff -ruNp a/snmplib/transports/snmpUDPIPv4BaseDomain.c b/snmplib/transports/snmpUDPIPv4BaseDomain.c
+--- a/snmplib/transports/snmpUDPIPv4BaseDomain.c	2021-01-06 12:51:51.948106797 +0100
++++ b/snmplib/transports/snmpUDPIPv4BaseDomain.c	2021-01-06 14:17:31.029745744 +0100
+@@ -209,6 +209,8 @@ netsnmp_udpipv4base_transport_bind(netsn
+         DEBUGMSGTL(("netsnmp_udpbase",
+                     "failed to bind for clientaddr: %d %s\n",
+                     errno, strerror(errno)));
++        NETSNMP_LOGONCE((LOG_ERR, "Cannot bind for clientaddr: %s\n",
++                    strerror(errno)));
+         goto err;
+     }
+
diff --git a/SOURCES/net-snmp-5.8-duplicate-ipAddress.patch b/SOURCES/net-snmp-5.8-duplicate-ipAddress.patch
new file mode 100644
index 0000000..075976a
--- /dev/null
+++ b/SOURCES/net-snmp-5.8-duplicate-ipAddress.patch
@@ -0,0 +1,11 @@
+diff -urNp a/agent/mibgroup/ip-mib/data_access/ipaddress_common.c b/agent/mibgroup/ip-mib/data_access/ipaddress_common.c
+--- a/agent/mibgroup/ip-mib/data_access/ipaddress_common.c	2020-06-10 13:27:03.213904398 +0200
++++ b/agent/mibgroup/ip-mib/data_access/ipaddress_common.c	2020-06-10 13:28:41.025863050 +0200
+@@ -121,6 +121,7 @@ _remove_duplicates(netsnmp_container *co
+ 	for (entry = ITERATOR_FIRST(it); entry; entry = ITERATOR_NEXT(it)) {
+ 		if (prev_entry && _access_ipaddress_entry_compare_addr(prev_entry, entry) == 0) {
+ 			/* 'entry' is duplicate of the previous one -> delete it */
++            NETSNMP_LOGONCE((LOG_ERR, "Duplicate IPv4 address detected, some interfaces may not be visible in IP-MIB\n"));
+ 			netsnmp_access_ipaddress_entry_free(entry);
+ 		} else {
+ 			CONTAINER_INSERT(ret, entry);
diff --git a/SOURCES/net-snmp-5.8-expand-SNMPCONFPATH.patch b/SOURCES/net-snmp-5.8-expand-SNMPCONFPATH.patch
new file mode 100644
index 0000000..a812cf4
--- /dev/null
+++ b/SOURCES/net-snmp-5.8-expand-SNMPCONFPATH.patch
@@ -0,0 +1,12 @@
+diff -ruNp a/snmplib/read_config.c b/snmplib/read_config.c
+--- a/snmplib/read_config.c	2020-06-10 09:51:57.184786510 +0200
++++ b/snmplib/read_config.c	2020-06-10 09:53:13.257507112 +0200
+@@ -1642,7 +1642,7 @@ snmp_save_persistent(const char *type)
+      * save a warning header to the top of the new file 
+      */
+     snprintf(fileold, sizeof(fileold),
+-            "%s%s# Please save normal configuration tokens for %s in SNMPCONFPATH/%s.conf.\n# Only \"createUser\" tokens should be placed here by %s administrators.\n%s",
++            "%s%s# Please save normal configuration tokens for %s in /etc/snmp/%s.conf.\n# Only \"createUser\" tokens should be placed here by %s administrators.\n%s",
+             "#\n# net-snmp (or ucd-snmp) persistent data file.\n#\n############################################################################\n# STOP STOP STOP STOP STOP STOP STOP STOP STOP \n",
+             "#\n#          **** DO NOT EDIT THIS FILE ****\n#\n# STOP STOP STOP STOP STOP STOP STOP STOP STOP \n############################################################################\n#\n# DO NOT STORE CONFIGURATION ENTRIES HERE.\n",
+             type, type, type,
diff --git a/SOURCES/net-snmp-5.8-ipAddress-faster-load.patch b/SOURCES/net-snmp-5.8-ipAddress-faster-load.patch
new file mode 100644
index 0000000..db95998
--- /dev/null
+++ b/SOURCES/net-snmp-5.8-ipAddress-faster-load.patch
@@ -0,0 +1,82 @@
+diff -urNp a/agent/mibgroup/mibII/ipAddr.c b/agent/mibgroup/mibII/ipAddr.c
+--- a/agent/mibgroup/mibII/ipAddr.c	2020-06-10 14:14:30.113696471 +0200
++++ b/agent/mibgroup/mibII/ipAddr.c	2020-06-10 14:27:15.345354018 +0200
+@@ -495,14 +495,16 @@ Address_Scan_Next(Index, Retin_ifaddr)
+ }
+ 
+ #elif defined(linux)
++#include <errno.h>
+ static struct ifreq *ifr;
+ static int ifr_counter;
+ 
+ static void
+ Address_Scan_Init(void)
+ {
+-    int num_interfaces = 0;
++    int i;
+     int fd;
++    int lastlen = 0;
+ 
+     /* get info about all interfaces */
+ 
+@@ -510,28 +512,45 @@ Address_Scan_Init(void)
+     SNMP_FREE(ifc.ifc_buf);
+     ifr_counter = 0;
+ 
+-    do
+-    {
+ 	if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
+ 	{
+ 	    DEBUGMSGTL(("snmpd", "socket open failure in Address_Scan_Init\n"));
+ 	    return;
+ 	}
+-	num_interfaces += 16;
+ 
+-	ifc.ifc_len = sizeof(struct ifreq) * num_interfaces;
+-	ifc.ifc_buf = (char*) realloc(ifc.ifc_buf, ifc.ifc_len);
+-	
+-	    if (ioctl(fd, SIOCGIFCONF, &ifc) < 0)
+-	    {
+-		ifr=NULL;
+-		close(fd);
+-	   	return;
+-	    }
+-	    close(fd);
++    /*
++     * Cope with lots of interfaces and brokenness of ioctl SIOCGIFCONF
++     * on some platforms; see W. R. Stevens, ``Unix Network Programming
++     * Volume I'', p.435...
++     */
++
++    for (i = 8;; i *= 2) {
++        ifc.ifc_len = sizeof(struct ifreq) * i;
++        ifc.ifc_req = calloc(i, sizeof(struct ifreq));
++
++        if (ioctl(fd, SIOCGIFCONF, &ifc) < 0) {
++            if (errno != EINVAL || lastlen != 0) {
++                /*
++                 * Something has gone genuinely wrong...
++                 */
++                snmp_log(LOG_ERR, "bad rc from ioctl, errno %d", errno);
++                SNMP_FREE(ifc.ifc_buf);
++                close(fd);
++                return;
++            }
++        } else {
++            if (ifc.ifc_len == lastlen) {
++                /*
++                 * The length is the same as the last time; we're done...
++                 */
++                break;
++            }
++            lastlen = ifc.ifc_len;
++        }
++        free(ifc.ifc_buf); /* no SNMP_FREE, getting ready to reassign */
+     }
+-    while (ifc.ifc_len >= (sizeof(struct ifreq) * num_interfaces));
+-    
++
++    close(fd);
+     ifr = ifc.ifc_req;
+ }
+ 
diff --git a/SOURCES/net-snmp-5.8-man-page.patch b/SOURCES/net-snmp-5.8-man-page.patch
new file mode 100644
index 0000000..dc78e14
--- /dev/null
+++ b/SOURCES/net-snmp-5.8-man-page.patch
@@ -0,0 +1,36 @@
+diff -urNp a/man/net-snmp-create-v3-user.1.def b/man/net-snmp-create-v3-user.1.def
+--- a/man/net-snmp-create-v3-user.1.def	2020-06-10 13:43:18.443070961 +0200
++++ b/man/net-snmp-create-v3-user.1.def	2020-06-10 13:49:25.975363441 +0200
+@@ -3,7 +3,7 @@
+ net-snmp-create-v3-user \- create a SNMPv3 user in net-snmp configuration file
+ .SH SYNOPSIS
+ .PP
+-.B net-snmp-create-v3-user [-ro] [-a authpass] [-x privpass] [-X DES|AES]
++.B net-snmp-create-v3-user [-ro] [-A authpass] [-a MD5|SHA] [-X privpass] [-x DES|AES]
+ .B [username]
+ .SH DESCRIPTION
+ .PP
+@@ -16,13 +16,16 @@ new user in net-snmp configuration file
+ displays the net-snmp version number
+ .TP
+ \fB\-ro\fR
+-create an user with read-only permissions
++creates a user with read-only permissions
+ .TP
+-\fB\-a authpass\fR
+-specify authentication password
++\fB\-A authpass\fR
++specifies the authentication password
+ .TP
+-\fB\-x privpass\fR
+-specify encryption password
++\fB\-a MD5|SHA\fR
++specifies the authentication password hashing algorithm
+ .TP
+-\fB\-X DES|AES\fR
+-specify encryption algorithm
++\fB\-X privpass\fR
++specifies the encryption password
++.TP
++\fB\-x DES|AES\fR
++specifies the encryption algorithm
diff --git a/SOURCES/net-snmp-5.8-modern-rpm-api.patch b/SOURCES/net-snmp-5.8-modern-rpm-api.patch
new file mode 100644
index 0000000..93fcc63
--- /dev/null
+++ b/SOURCES/net-snmp-5.8-modern-rpm-api.patch
@@ -0,0 +1,83 @@
+diff -urNp a/agent/mibgroup/host/data_access/swinst_rpm.c b/agent/mibgroup/host/data_access/swinst_rpm.c
+--- a/agent/mibgroup/host/data_access/swinst_rpm.c	2018-07-18 16:12:19.583503903 +0200
++++ b/agent/mibgroup/host/data_access/swinst_rpm.c	2018-07-18 16:50:38.599703588 +0200
+@@ -102,7 +102,6 @@ netsnmp_swinst_arch_load( netsnmp_contai
+     rpmtd                 td_name, td_version, td_release, td_group, td_time;
+ #else
+     char                 *n, *v, *r, *g;
+-    int32_t              *t;
+ #endif
+     time_t                install_time;
+     size_t                date_len;
+@@ -146,14 +145,13 @@ netsnmp_swinst_arch_load( netsnmp_contai
+         install_time = rpmtdGetNumber(td_time);
+         g = rpmtdGetString(td_group);
+ #else
+-        headerGetEntry( h, RPMTAG_NAME,        NULL, (void**)&n, NULL);
+-        headerGetEntry( h, RPMTAG_VERSION,     NULL, (void**)&v, NULL);
+-        headerGetEntry( h, RPMTAG_RELEASE,     NULL, (void**)&r, NULL);
+-        headerGetEntry( h, RPMTAG_GROUP,       NULL, (void**)&g, NULL);
+-        headerGetEntry( h, RPMTAG_INSTALLTIME, NULL, (void**)&t, NULL);
++        n = headerGetString( h, RPMTAG_NAME);
++        v = headerGetString( h, RPMTAG_VERSION);
++        r = headerGetString( h, RPMTAG_RELEASE);
++        g = headerGetString( h, RPMTAG_GROUP);
++        install_time = headerGetNumber( h, RPMTAG_INSTALLTIME);
+         entry->swName_len = snprintf( entry->swName, sizeof(entry->swName),
+                                       "%s-%s-%s", n, v, r);
+-        install_time = *t;
+ #endif
+         entry->swType = (g && NULL != strstr( g, "System Environment"))
+                         ? 2      /* operatingSystem */
+diff -urNp a/agent/mibgroup/host/hr_swinst.c b/agent/mibgroup/host/hr_swinst.c
+--- a/agent/mibgroup/host/hr_swinst.c	2018-07-18 16:12:19.582503907 +0200
++++ b/agent/mibgroup/host/hr_swinst.c	2018-07-18 17:09:29.716564197 +0200
+@@ -479,9 +479,9 @@ var_hrswinst(struct variable * vp,
+             }
+ #else
+ # ifdef HAVE_LIBRPM
+-            char *rpm_groups;
+-            if ( headerGetEntry(swi->swi_h, RPMTAG_GROUP, NULL, (void **) &rpm_groups, NULL) ) {
+-                if ( strstr(rpm_groups, "System Environment") != NULL )
++            const char *rpm_group = headerGetString(swi->swi_h, RPMTAG_GROUP);	
++            if ( NULL != rpm_group ) {
++                if ( strstr(rpm_group, "System Environment") != NULL )
+                     long_return = 2;	/* operatingSystem */
+                 else
+                     long_return = 4;	/* applcation */
+@@ -498,9 +498,8 @@ var_hrswinst(struct variable * vp,
+     case HRSWINST_DATE:
+         {
+ #ifdef HAVE_LIBRPM
+-            int32_t         *rpm_data;
+-            if ( headerGetEntry(swi->swi_h, RPMTAG_INSTALLTIME, NULL, (void **) &rpm_data, NULL) ) {
+-                time_t          installTime = *rpm_data;
++            time_t installTime = headerGetNumber(swi->swi_h, RPMTAG_INSTALLTIME);
++            if ( 0 != installTime ) {
+                 ret = date_n_time(&installTime, var_len);
+             } else {
+                 ret = date_n_time(NULL, var_len);
+@@ -660,7 +659,7 @@ Save_HR_SW_info(int ix)
+     if (1 <= ix && ix <= swi->swi_nrec && ix != swi->swi_prevx) {
+         int             offset;
+         Header          h;
+-        char           *n, *v, *r;
++        const char     *n, *v, *r;
+ 
+         offset = swi->swi_recs[ix - 1];
+ 
+@@ -685,11 +684,9 @@ Save_HR_SW_info(int ix)
+         swi->swi_h = h;
+         swi->swi_prevx = ix;
+ 
+-        headerGetEntry(swi->swi_h, RPMTAG_NAME, NULL, (void **) &n, NULL);
+-        headerGetEntry(swi->swi_h, RPMTAG_VERSION, NULL, (void **) &v,
+-                       NULL);
+-        headerGetEntry(swi->swi_h, RPMTAG_RELEASE, NULL, (void **) &r,
+-                       NULL);
++        n = headerGetString(swi->swi_h, RPMTAG_NAME);
++        v = headerGetString(swi->swi_h, RPMTAG_VERSION);
++        r = headerGetString(swi->swi_h, RPMTAG_RELEASE);
+         snprintf(swi->swi_name, sizeof(swi->swi_name), "%s-%s-%s", n, v, r);
+         swi->swi_name[ sizeof(swi->swi_name)-1 ] = 0;
+     }
diff --git a/SOURCES/net-snmp-5.8-rpm-memory-leak.patch b/SOURCES/net-snmp-5.8-rpm-memory-leak.patch
new file mode 100644
index 0000000..33b8d29
--- /dev/null
+++ b/SOURCES/net-snmp-5.8-rpm-memory-leak.patch
@@ -0,0 +1,26 @@
+diff -urNp a/agent/mibgroup/host/data_access/swinst_rpm.c b/agent/mibgroup/host/data_access/swinst_rpm.c
+--- a/agent/mibgroup/host/data_access/swinst_rpm.c	2020-06-10 14:32:43.330486233 +0200
++++ b/agent/mibgroup/host/data_access/swinst_rpm.c	2020-06-10 14:35:46.672298741 +0200
+@@ -75,6 +75,9 @@ netsnmp_swinst_arch_init(void)
+     snprintf( pkg_directory, SNMP_MAXPATH, "%s/Packages", dbpath );
+     SNMP_FREE(rpmdbpath);
+     dbpath = NULL;
++#ifdef HAVE_RPMGETPATH
++    rpmFreeRpmrc();
++#endif
+     if (-1 == stat( pkg_directory, &stat_buf )) {
+         snmp_log(LOG_ERR, "Can't find directory of RPM packages");
+         pkg_directory[0] = '\0';
+diff -urNp a/agent/mibgroup/host/hr_swinst.c b/agent/mibgroup/host/hr_swinst.c
+--- a/agent/mibgroup/host/hr_swinst.c	2020-06-10 14:32:43.325486184 +0200
++++ b/agent/mibgroup/host/hr_swinst.c	2020-06-10 14:36:44.423872418 +0200
+@@ -231,6 +231,9 @@ init_hr_swinst(void)
+             snprintf(path, sizeof(path), "%s/packages.rpm", swi->swi_dbpath);
+         path[ sizeof(path)-1 ] = 0;
+         swi->swi_directory = strdup(path);
++#ifdef HAVE_RPMGETPATH
++        rpmFreeRpmrc();
++#endif
+     }
+ #else
+ #  ifdef _PATH_HRSW_directory
diff --git a/SOURCES/net-snmp-5.9-ECC-cert.patch b/SOURCES/net-snmp-5.9-ECC-cert.patch
new file mode 100644
index 0000000..5d43d4d
--- /dev/null
+++ b/SOURCES/net-snmp-5.9-ECC-cert.patch
@@ -0,0 +1,98 @@
+From a1968db524e087a36a19a351b89bf6f1633819aa Mon Sep 17 00:00:00 2001
+From: minfrin <minfrin@users.noreply.github.com>
+Date: Tue, 5 Jan 2021 23:17:14 +0000
+Subject: [PATCH] Add support for digests detected from ECC certificates
+
+Previously, the digest could be detected on RSA certificates only. This
+patch adds detection for ECC certificates.
+
+[ bvanassche: changed _htmap2 into a two-dimensional array and renamed _htmap2
+  back to _htmap ]
+---
+ snmplib/snmp_openssl.c | 60 +++++++++++++++++++++++++++++++++++-------
+ 1 file changed, 50 insertions(+), 10 deletions(-)
+
+diff --git a/snmplib/snmp_openssl.c b/snmplib/snmp_openssl.c
+index c092a007a..432cb5c27 100644
+--- a/snmplib/snmp_openssl.c
++++ b/snmplib/snmp_openssl.c
+@@ -521,18 +521,54 @@ netsnmp_openssl_cert_dump_extensions(X509 *ocert)
+     }
+ }
+ 
+-static int _htmap[NS_HASH_MAX + 1] = {
+-    0, NID_md5WithRSAEncryption, NID_sha1WithRSAEncryption,
+-    NID_sha224WithRSAEncryption, NID_sha256WithRSAEncryption,
+-    NID_sha384WithRSAEncryption, NID_sha512WithRSAEncryption };
++static const struct {
++    uint16_t nid;
++    uint16_t ht;
++} _htmap[] = {
++    { 0, NS_HASH_NONE },
++#ifdef NID_md5WithRSAEncryption
++    { NID_md5WithRSAEncryption, NS_HASH_MD5 },
++#endif
++#ifdef NID_sha1WithRSAEncryption
++    { NID_sha1WithRSAEncryption, NS_HASH_SHA1 },
++#endif
++#ifdef NID_ecdsa_with_SHA1
++    { NID_ecdsa_with_SHA1, NS_HASH_SHA1 },
++#endif
++#ifdef NID_sha224WithRSAEncryption
++    { NID_sha224WithRSAEncryption, NS_HASH_SHA224 },
++#endif
++#ifdef NID_ecdsa_with_SHA224
++    { NID_ecdsa_with_SHA224, NS_HASH_SHA224 },
++#endif
++#ifdef NID_sha256WithRSAEncryption
++    { NID_sha256WithRSAEncryption, NS_HASH_SHA256 },
++#endif
++#ifdef NID_ecdsa_with_SHA256
++    { NID_ecdsa_with_SHA256, NS_HASH_SHA256 },
++#endif
++#ifdef NID_sha384WithRSAEncryption
++    { NID_sha384WithRSAEncryption, NS_HASH_SHA384 },
++#endif
++#ifdef NID_ecdsa_with_SHA384
++    { NID_ecdsa_with_SHA384, NS_HASH_SHA384 },
++#endif
++#ifdef NID_sha512WithRSAEncryption
++    { NID_sha512WithRSAEncryption, NS_HASH_SHA512 },
++#endif
++#ifdef NID_ecdsa_with_SHA512
++    { NID_ecdsa_with_SHA512, NS_HASH_SHA512 },
++#endif
++};
+ 
+ int
+ _nid2ht(int nid)
+ {
+     int i;
+-    for (i=1; i<= NS_HASH_MAX; ++i) {
+-        if (nid == _htmap[i])
+-            return i;
++
++    for (i = 0; i < sizeof(_htmap) / sizeof(_htmap[0]); i++) {
++        if (_htmap[i].nid == nid)
++            return _htmap[i].ht;
+     }
+     return 0;
+ }
+@@ -541,9 +577,13 @@ _nid2ht(int nid)
+ int
+ _ht2nid(int ht)
+ {
+-    if ((ht < 0) || (ht > NS_HASH_MAX))
+-        return 0;
+-    return _htmap[ht];
++    int i;
++
++    for (i = 0; i < sizeof(_htmap) / sizeof(_htmap[0]); i++) {
++        if (_htmap[i].ht == ht)
++            return _htmap[i].nid;
++    }
++    return 0;
+ }
+ #endif /* NETSNMP_FEATURE_REMOVE_OPENSSL_HT2NID */
+ 
+
diff --git a/SOURCES/net-snmp-5.9-aes-config.patch b/SOURCES/net-snmp-5.9-aes-config.patch
new file mode 100644
index 0000000..c3f6848
--- /dev/null
+++ b/SOURCES/net-snmp-5.9-aes-config.patch
@@ -0,0 +1,18 @@
+diff --git a/net-snmp-create-v3-user.in b/net-snmp-create-v3-user.in
+index ac3c60f..177c00f 100644
+--- a/net-snmp-create-v3-user.in
++++ b/net-snmp-create-v3-user.in
+@@ -57,11 +57,11 @@ case $1 in
+ 	    exit 1
+ 	fi
+         case $1 in
+-            DES|AES|AES128)
++            AES|AES128|AES192|AES256)
+ 	    Xalgorithm=$1
+ 	    shift
+ 	    ;;
+-            des|aes|aes128)
++            aes|aes128|aes192|aes256)
+ 	    Xalgorithm=$(echo "$1" | tr a-z A-Z)
+ 	    shift
+ 	    ;;
diff --git a/SOURCES/net-snmp-5.9-autofs-skip.patch b/SOURCES/net-snmp-5.9-autofs-skip.patch
new file mode 100644
index 0000000..0d054b2
--- /dev/null
+++ b/SOURCES/net-snmp-5.9-autofs-skip.patch
@@ -0,0 +1,46 @@
+diff --git a/agent/mibgroup/host/hr_filesys.c b/agent/mibgroup/host/hr_filesys.c
+index 4f78df3..fd25b3f 100644
+--- a/agent/mibgroup/host/hr_filesys.c
++++ b/agent/mibgroup/host/hr_filesys.c
+@@ -704,6 +704,7 @@ static const char *HRFS_ignores[] = {
+     "shm",
+     "sockfs",
+     "sysfs",
++    "tmpfs",
+     "usbdevfs",
+     "usbfs",
+ #endif
+diff --git a/agent/mibgroup/host/hr_storage.c b/agent/mibgroup/host/hr_storage.c
+index 6b459ec..f7a376b 100644
+--- a/agent/mibgroup/host/hr_storage.c
++++ b/agent/mibgroup/host/hr_storage.c
+@@ -540,9 +540,10 @@ really_try_next:
+ 
+         store_idx = name[ HRSTORE_ENTRY_NAME_LENGTH ];
+         if (store_idx > NETSNMP_MEM_TYPE_MAX ) {
+-            if ( netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
++            if ( (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+                                         NETSNMP_DS_AGENT_SKIPNFSINHOSTRESOURCES) &&
+-                 Check_HR_FileSys_NFS())
++                 Check_HR_FileSys_NFS()) ||
++                 Check_HR_FileSys_AutoFs())
+                 return NULL;  /* or goto try_next; */
+             if (Check_HR_FileSys_AutoFs())
+                 return NULL;
+diff --git a/agent/mibgroup/host/hrh_storage.c b/agent/mibgroup/host/hrh_storage.c
+index 8967d35..9bf2659 100644
+--- a/agent/mibgroup/host/hrh_storage.c
++++ b/agent/mibgroup/host/hrh_storage.c
+@@ -366,9 +366,10 @@ really_try_next:
+         store_idx = name[ HRSTORE_ENTRY_NAME_LENGTH ];
+         if (HRFS_entry &&
+ 	    store_idx > NETSNMP_MEM_TYPE_MAX &&
+-            netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
++            ((netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+                                    NETSNMP_DS_AGENT_SKIPNFSINHOSTRESOURCES) &&
+-            Check_HR_FileSys_NFS())
++            Check_HR_FileSys_NFS()) ||
++            Check_HR_FileSys_AutoFs()))
+             return NULL;
+         if (HRFS_entry && Check_HR_FileSys_AutoFs())
+             return NULL;
diff --git a/SOURCES/net-snmp-5.9-cflags.patch b/SOURCES/net-snmp-5.9-cflags.patch
new file mode 100644
index 0000000..5099cde
--- /dev/null
+++ b/SOURCES/net-snmp-5.9-cflags.patch
@@ -0,0 +1,36 @@
+diff -urNp a/net-snmp-config.in b/net-snmp-config.in
+--- a/net-snmp-config.in	2018-07-18 13:43:12.264426052 +0200
++++ b/net-snmp-config.in	2018-07-18 13:52:06.917089518 +0200
+@@ -140,10 +140,10 @@ else
+       ;;
+     #################################################### compile
+     --base-cflags)
+-      echo @CFLAGS@ @CPPFLAGS@ -I${NSC_INCLUDEDIR}
++      echo -I${NSC_INCLUDEDIR}
+       ;;
+     --cflags|--cf*)
+-      echo @CFLAGS@ @DEVFLAGS@ @CPPFLAGS@ -I. -I${NSC_INCLUDEDIR}
++      echo @DEVFLAGS@ -I. -I${NSC_INCLUDEDIR}
+       ;;
+     --srcdir)
+       echo $NSC_SRCDIR
+diff -urNp a/perl/Makefile.PL b/perl/Makefile.PL
+--- a/perl/Makefile.PL	2020-08-26 08:32:52.498909823 +0200
++++ b/perl/Makefile.PL	2020-08-26 09:30:45.584951552 +0200
+@@ -1,3 +1,4 @@
++use lib '.';
+ use strict;
+ use warnings;
+ use ExtUtils::MakeMaker;
+diff -urNp a/perl/MakefileSubs.pm b/perl/MakefileSubs.pm
+--- a/perl/MakefileSubs.pm	2020-08-26 08:32:52.498909823 +0200
++++ b/perl/MakefileSubs.pm	2020-08-26 08:36:44.097218448 +0200
+@@ -116,7 +116,7 @@ sub AddCommonParams {
+ 	append($Params->{'CCFLAGS'}, $cflags);
+ 	append($Params->{'CCFLAGS'}, $Config{'ccflags'});
+ 	# Suppress known Perl header shortcomings.
+-	$Params->{'CCFLAGS'} =~ s/ -W(cast-qual|write-strings)//g;
++	$Params->{'CCFLAGS'} =~ s/ -W(inline|strict-prototypes|write-strings|cast-qual|no-char-subscripts)//g;
+ 	append($Params->{'CCFLAGS'}, '-Wformat');
+     }
+ }
diff --git a/SOURCES/net-snmp-5.9-coverity.patch b/SOURCES/net-snmp-5.9-coverity.patch
new file mode 100644
index 0000000..fa3e043
--- /dev/null
+++ b/SOURCES/net-snmp-5.9-coverity.patch
@@ -0,0 +1,22 @@
+diff --git a/agent/mibgroup/disman/event/mteTrigger.c b/agent/mibgroup/disman/event/mteTrigger.c
+index e9a8831..5a1d8e7 100644
+--- a/agent/mibgroup/disman/event/mteTrigger.c
++++ b/agent/mibgroup/disman/event/mteTrigger.c
+@@ -1012,7 +1012,7 @@ mteTrigger_run( unsigned int reg, void *clientarg)
+                      * Similarly, if no fallEvent is configured,
+                      *  there's no point in trying to fire it either.
+                      */
+-                    if (entry->mteTThRiseEvent[0] != '\0' ) {
++                    if (entry->mteTThFallEvent[0] != '\0' ) {
+                         entry->mteTriggerXOwner   = entry->mteTThObjOwner;
+                         entry->mteTriggerXObjects = entry->mteTThObjects;
+                         entry->mteTriggerFired    = vp1;
+@@ -1105,7 +1105,7 @@ mteTrigger_run( unsigned int reg, void *clientarg)
+                      * Similarly, if no fallEvent is configured,
+                      *  there's no point in trying to fire it either.
+                      */
+-                    if (entry->mteTThDRiseEvent[0] != '\0' ) {
++                    if (entry->mteTThDFallEvent[0] != '\0' ) {
+                         entry->mteTriggerXOwner   = entry->mteTThObjOwner;
+                         entry->mteTriggerXObjects = entry->mteTThObjects;
+                         entry->mteTriggerFired    = vp1;
diff --git a/SOURCES/net-snmp-5.9-dir-fix.patch b/SOURCES/net-snmp-5.9-dir-fix.patch
new file mode 100644
index 0000000..bf022d2
--- /dev/null
+++ b/SOURCES/net-snmp-5.9-dir-fix.patch
@@ -0,0 +1,24 @@
+diff --git a/net-snmp-create-v3-user.in b/net-snmp-create-v3-user.in
+index b0c71d9..ac3c60f 100644
+--- a/net-snmp-create-v3-user.in
++++ b/net-snmp-create-v3-user.in
+@@ -14,6 +14,10 @@ Xalgorithm="DES"
+ token=rwuser
+ 
+ while test "x$done" = "x" -a "x$1" != "x" -a "x$usage" != "xyes"; do
++case "$1" in
++    -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
++    *) optarg= ;;
++esac
+ 
+ unset shifted
+ case $1 in
+@@ -136,7 +140,7 @@ fi
+ echo "$line" >> "$outfile"
+ # Avoid that configure complains that this script ignores @datarootdir@
+ echo "@datarootdir@" >/dev/null
+-outfile="@datadir@/snmp/snmpd.conf"
++outfile="/etc/snmp/snmpd.conf"
+ line="$token $user"
+ echo "adding the following line to $outfile:"
+ echo "   $line"
diff --git a/SOURCES/net-snmp-5.9-dskTable-dynamic.patch b/SOURCES/net-snmp-5.9-dskTable-dynamic.patch
new file mode 100644
index 0000000..bffbc2a
--- /dev/null
+++ b/SOURCES/net-snmp-5.9-dskTable-dynamic.patch
@@ -0,0 +1,180 @@
+diff --git a/agent/mibgroup/ucd-snmp/disk.c b/agent/mibgroup/ucd-snmp/disk.c
+index 7c756ff..ff22019 100644
+--- a/agent/mibgroup/ucd-snmp/disk.c
++++ b/agent/mibgroup/ucd-snmp/disk.c
+@@ -153,9 +153,10 @@ static void       disk_free_config(void);
+ static void       disk_parse_config(const char *, char *);
+ static void       disk_parse_config_all(const char *, char *);
+ #if HAVE_FSTAB_H || HAVE_GETMNTENT || HAVE_STATFS
+-static void       find_and_add_allDisks(int minpercent);
++static void       refresh_disk_table(int addNewDisks, int minpercent);
+ static void       add_device(char *path, char *device,
+-	                     int minspace, int minpercent, int override);
++	                     int minspace, int minpercent, int addNewDisks,
++	                     int override);
+ static void       modify_disk_parameters(int index, int minspace,
+ 	                                 int minpercent);
+ static int        disk_exists(char *path);
+@@ -167,6 +168,7 @@ struct diskpart {
+     char            path[STRMAX];
+     int             minimumspace;
+     int             minpercent;
++    int             alive;
+ };
+ 
+ #define MAX_INT_32 0x7fffffff
+@@ -174,6 +176,7 @@ struct diskpart {
+ 
+ unsigned int    numdisks;
+ int             allDisksIncluded = 0;
++int             allDisksMinPercent = 0;
+ unsigned int    maxdisks = 0;
+ struct diskpart *disks;
+ 
+@@ -238,6 +241,7 @@ init_disk(void)
+ 				disk_free_config,
+ 				"minpercent%");
+   allDisksIncluded = 0;
++  allDisksMinPercent = 0;
+ }
+ 
+ static void
+@@ -253,6 +257,7 @@ disk_free_config(void)
+     disks[i].minpercent = -1;
+   }
+   allDisksIncluded = 0;
++  allDisksMinPercent = 0;
+ }
+ 
+ static void 
+@@ -313,7 +318,7 @@ disk_parse_config(const char *token, char *cptr)
+    * check if the disk already exists, if so then modify its
+    * parameters. if it does not exist then add it
+    */
+-  add_device(path, find_device(path), minspace, minpercent, 1);
++  add_device(path, find_device(path), minspace, minpercent, 1, 1);
+ #endif /* HAVE_FSTAB_H || HAVE_GETMNTENT || HAVE_STATFS */
+ }
+ 
+@@ -372,7 +377,7 @@ disk_parse_config_all(const char *token, char *cptr)
+ 
+ #if HAVE_FSTAB_H || HAVE_GETMNTENT || HAVE_STATFS
+ static void
+-add_device(char *path, char *device, int minspace, int minpercent, int override) 
++add_device(char *path, char *device, int minspace, int minpercent, int addNewDisks, int override) 
+ {
+   int index;
+ 
+@@ -402,10 +407,16 @@ add_device(char *path, char *device, int minspace, int minpercent, int override)
+   }
+ 
+   index = disk_exists(path);
+-  if((index != -1) && (index < maxdisks) && (override==1)) {
+-    modify_disk_parameters(index, minspace, minpercent);
++  if((index != -1) && (index < maxdisks)) {
++    /* the path is already in the table */
++    disks[index].alive = 1;
++    /* -> update its device */
++    strlcpy(disks[index].device, device, sizeof(disks[index].device));
++    if (override == 1) {
++        modify_disk_parameters(index, minspace, minpercent);
++    }
+   }
+-  else if(index == -1){
++  else if(index == -1 && addNewDisks){
+     /* add if and only if the device was found */
+     if(device[0] != 0) {
+       /* The following buffers are cleared above, no need to add '\0' */
+@@ -413,6 +424,7 @@ add_device(char *path, char *device, int minspace, int minpercent, int override)
+       strlcpy(disks[numdisks].device, device, sizeof(disks[numdisks].device));
+       disks[numdisks].minimumspace = minspace;
+       disks[numdisks].minpercent   = minpercent;
++      disks[numdisks].alive        = 1;
+       numdisks++;  
+     }
+     else {
+@@ -420,6 +432,7 @@ add_device(char *path, char *device, int minspace, int minpercent, int override)
+       disks[numdisks].minpercent = -1;
+       disks[numdisks].path[0] = 0;
+       disks[numdisks].device[0] = 0;
++      disks[numdisks].alive = 0;
+     }
+   }
+ }
+@@ -444,7 +457,7 @@ int disk_exists(char *path)
+ }
+ 
+ static void 
+-find_and_add_allDisks(int minpercent)
++refresh_disk_table(int addNewDisks, int minpercent)
+ {
+ #if HAVE_GETMNTENT
+ #if HAVE_SYS_MNTTAB_H
+@@ -480,7 +493,7 @@ find_and_add_allDisks(int minpercent)
+       return;
+   }
+   while (mntfp && NULL != (mntent = getmntent(mntfp))) {
+-    add_device(mntent->mnt_dir, mntent->mnt_fsname, -1, minpercent, 0);
++    add_device(mntent->mnt_dir, mntent->mnt_fsname, -1, minpercent, addNewDisks, 0);
+     dummy = 1;
+   }
+   if (mntfp)
+@@ -497,7 +510,7 @@ find_and_add_allDisks(int minpercent)
+       return;
+   }
+   while ((i = getmntent(mntfp, &mnttab)) == 0) {
+-    add_device(mnttab.mnt_mountp, mnttab.mnt_special, -1, minpercent, 0);
++    add_device(mnttab.mnt_mountp, mnttab.mnt_special, -1, minpercent, addNewDisks, 0);
+     dummy = 1;
+   }
+   fclose(mntfp);
+@@ -514,13 +527,13 @@ find_and_add_allDisks(int minpercent)
+     mntsize = getmntinfo(&mntbuf, MNT_NOWAIT);
+     for (i = 0; i < mntsize; i++) {
+ 	add_device(mntbuf[i].f_mntonname, mntbuf[i].f_mntfromname, -1,
+-                   minpercent, 0);
++                   minpercent, addNewDisks 0);
+     }
+   }
+ #elif HAVE_FSTAB_H
+   setfsent();			/* open /etc/fstab */
+   while((fstab1 = getfsent()) != NULL) {
+-    add_device(fstab1->fs_file, fstab1->fs_spec, -1, minpercent, 0);
++    add_device(fstab1->fs_file, fstab1->fs_spec, -1, minpercent, addNewDisks, 0);
+     dummy = 1;
+   }
+   endfsent();			/* close /etc/fstab */
+@@ -535,7 +548,7 @@ find_and_add_allDisks(int minpercent)
+    * statfs we default to the root partition "/"
+    */
+   if (statfs("/", &statf) == 0) {
+-    add_device("/", statf.f_mntfromname, -1, minpercent, 0);
++    add_device("/", statf.f_mntfromname, -1, minpercent, addNewDisks, 0);
+   }
+ #endif
+   else {
+@@ -694,6 +707,10 @@ fill_dsk_entry(int disknum, struct dsk_entry *entry)
+ #endif
+ #endif
+ 
++    if (disks[disknum].alive == 0){
++        return -1;
++    }
++
+     entry->dskPercentInode = -1;
+ 
+ #if defined(HAVE_STATVFS) || defined(HAVE_STATFS)
+@@ -825,6 +842,13 @@ var_extensible_disk(struct variable *vp,
+     static char    *errmsg;
+     static char     empty_str[1];
+ 
++    int i;
++    for (i = 0; i < numdisks; i++){
++        disks[i].alive = 0;
++    }
++    /* dynamically add new disks + update alive flag */
++    refresh_disk_table(allDisksIncluded, allDisksMinPercent);
++
+ tryAgain:
+     if (header_simple_table
+         (vp, name, length, exact, var_len, write_method, numdisks))
diff --git a/SOURCES/net-snmp-5.9-intermediate-certs.patch b/SOURCES/net-snmp-5.9-intermediate-certs.patch
new file mode 100644
index 0000000..a119a90
--- /dev/null
+++ b/SOURCES/net-snmp-5.9-intermediate-certs.patch
@@ -0,0 +1,994 @@
+diff --git a/include/net-snmp/library/cert_util.h b/include/net-snmp/library/cert_util.h
+index 80e2a19..143adbb 100644
+--- a/include/net-snmp/library/cert_util.h
++++ b/include/net-snmp/library/cert_util.h
+@@ -55,7 +55,8 @@ extern "C" {
+         char           *common_name;
+ 
+         u_char          hash_type;
+-        u_char          _pad[3]; /* for future use */
++        u_char          _pad[1]; /* for future use */
++        u_short         offset;
+     } netsnmp_cert;
+ 
+ /** types */
+@@ -100,6 +101,7 @@ extern "C" {
+ 
+     NETSNMP_IMPORT
+     netsnmp_cert *netsnmp_cert_find(int what, int where, void *hint);
++    netsnmp_void_array *netsnmp_certs_find(int what, int where, void *hint);
+ 
+     int netsnmp_cert_check_vb_fingerprint(const netsnmp_variable_list *var);
+ 
+diff --git a/include/net-snmp/library/dir_utils.h b/include/net-snmp/library/dir_utils.h
+index 471bb0b..6c5a23f 100644
+--- a/include/net-snmp/library/dir_utils.h
++++ b/include/net-snmp/library/dir_utils.h
+@@ -53,6 +53,8 @@ extern "C" {
+ #define NETSNMP_DIR_NSFILE                            0x0010
+ /** load stats in netsnmp_file */
+ #define NETSNMP_DIR_NSFILE_STATS                      0x0020
++/** allow files to be indexed more than once */
++#define NETSNMP_DIR_ALLOW_DUPLICATES                  0x0040
+ 
+     
+         
+diff --git a/snmplib/cert_util.c b/snmplib/cert_util.c
+index e7b7114..bee0b5f 100644
+--- a/snmplib/cert_util.c
++++ b/snmplib/cert_util.c
+@@ -100,7 +100,7 @@ netsnmp_feature_child_of(tls_fingerprint_build, cert_util_all);
+  * bump this value whenever cert index format changes, so indexes
+  * will be regenerated with new format.
+  */
+-#define CERT_INDEX_FORMAT  1
++#define CERT_INDEX_FORMAT  2
+ 
+ static netsnmp_container *_certs = NULL;
+ static netsnmp_container *_keys = NULL;
+@@ -126,6 +126,8 @@ static int  _cert_fn_ncompare(netsnmp_cert_common *lhs,
+                               netsnmp_cert_common *rhs);
+ static void _find_partner(netsnmp_cert *cert, netsnmp_key *key);
+ static netsnmp_cert *_find_issuer(netsnmp_cert *cert);
++static netsnmp_void_array *_cert_reduce_subset_first(netsnmp_void_array *matching);
++static netsnmp_void_array *_cert_reduce_subset_what(netsnmp_void_array *matching, int what);
+ static netsnmp_void_array *_cert_find_subset_fn(const char *filename,
+                                                 const char *directory);
+ static netsnmp_void_array *_cert_find_subset_sn(const char *subject);
+@@ -345,6 +347,8 @@ _get_cert_container(const char *use)
+ {
+     netsnmp_container *c;
+ 
++    int rc;
++
+     c = netsnmp_container_find("certs:binary_array");
+     if (NULL == c) {
+         snmp_log(LOG_ERR, "could not create container for %s\n", use);
+@@ -354,6 +358,8 @@ _get_cert_container(const char *use)
+     c->free_item = (netsnmp_container_obj_func*)_cert_free;
+     c->compare = (netsnmp_container_compare*)_cert_compare;
+ 
++    CONTAINER_SET_OPTIONS(c, CONTAINER_KEY_ALLOW_DUPLICATES, rc);
++
+     return c;
+ }
+ 
+@@ -362,6 +368,8 @@ _setup_containers(void)
+ {
+     netsnmp_container *additional_keys;
+ 
++    int rc;
++
+     _certs = _get_cert_container("netsnmp certificates");
+     if (NULL == _certs)
+         return;
+@@ -376,6 +384,7 @@ _setup_containers(void)
+     additional_keys->container_name = strdup("certs_cn");
+     additional_keys->free_item = NULL;
+     additional_keys->compare = (netsnmp_container_compare*)_cert_cn_compare;
++    CONTAINER_SET_OPTIONS(additional_keys, CONTAINER_KEY_ALLOW_DUPLICATES, rc);
+     netsnmp_container_add_index(_certs, additional_keys);
+ 
+     /** additional keys: subject name */
+@@ -389,6 +398,7 @@ _setup_containers(void)
+     additional_keys->free_item = NULL;
+     additional_keys->compare = (netsnmp_container_compare*)_cert_sn_compare;
+     additional_keys->ncompare = (netsnmp_container_compare*)_cert_sn_ncompare;
++    CONTAINER_SET_OPTIONS(additional_keys, CONTAINER_KEY_ALLOW_DUPLICATES, rc);
+     netsnmp_container_add_index(_certs, additional_keys);
+ 
+     /** additional keys: file name */
+@@ -402,6 +412,7 @@ _setup_containers(void)
+     additional_keys->free_item = NULL;
+     additional_keys->compare = (netsnmp_container_compare*)_cert_fn_compare;
+     additional_keys->ncompare = (netsnmp_container_compare*)_cert_fn_ncompare;
++    CONTAINER_SET_OPTIONS(additional_keys, CONTAINER_KEY_ALLOW_DUPLICATES, rc);
+     netsnmp_container_add_index(_certs, additional_keys);
+ 
+     _keys = netsnmp_container_find("cert_keys:binary_array");
+@@ -424,9 +435,9 @@ netsnmp_cert_map_container(void)
+ }
+ 
+ static netsnmp_cert *
+-_new_cert(const char *dirname, const char *filename, int certType,
+-          int hashType, const char *fingerprint, const char *common_name,
+-          const char *subject)
++_new_cert(const char *dirname, const char *filename, int certType, int offset,
++          int allowed_uses, int hashType, const char *fingerprint,
++          const char *common_name,  const char *subject)
+ {
+     netsnmp_cert    *cert;
+ 
+@@ -446,8 +457,10 @@ _new_cert(const char *dirname, const char *filename, int certType,
+ 
+     cert->info.dir = strdup(dirname);
+     cert->info.filename = strdup(filename);
+-    cert->info.allowed_uses = NS_CERT_REMOTE_PEER;
++    /* only the first certificate is allowed to be a remote peer */
++    cert->info.allowed_uses = allowed_uses;
+     cert->info.type = certType;
++    cert->offset = offset;
+     if (fingerprint) {
+         cert->hash_type = hashType;
+         cert->fingerprint = strdup(fingerprint);
+@@ -884,14 +897,86 @@ _certindex_new( const char *dirname )
+  * certificate utility functions
+  *
+  */
++static BIO *
++netsnmp_open_bio(const char *dir, const char *filename)
++{
++    BIO            *certbio;
++    char            file[SNMP_MAXPATH];
++
++    DEBUGMSGT(("9:cert:read", "Checking file %s\n", filename));
++
++    certbio = BIO_new(BIO_s_file());
++    if (NULL == certbio) {
++        snmp_log(LOG_ERR, "error creating BIO\n");
++        return NULL;
++    }
++
++    snprintf(file, sizeof(file),"%s/%s", dir, filename);
++    if (BIO_read_filename(certbio, file) <=0) {
++        snmp_log(LOG_ERR, "error reading certificate/key %s into BIO\n", file);
++        BIO_vfree(certbio);
++        return NULL;
++    }
++
++    return certbio;
++}
++
++static void
++netsnmp_ocert_parse(netsnmp_cert *cert, X509 *ocert)
++{
++    int             is_ca;
++
++    cert->ocert = ocert;
++
++    /*
++     * X509_check_ca return codes:
++     * 0 not a CA
++     * 1 is a CA
++     * 2 basicConstraints absent so "maybe" a CA
++     * 3 basicConstraints absent but self signed V1.
++     * 4 basicConstraints absent but keyUsage present and keyCertSign asserted.
++     * 5 outdated Netscape Certificate Type CA extension.
++     */
++    is_ca = X509_check_ca(ocert);
++    if (1 == is_ca)
++        cert->info.allowed_uses |= NS_CERT_CA;
++
++    if (NULL == cert->subject) {
++        cert->subject = X509_NAME_oneline(X509_get_subject_name(ocert), NULL,
++                                          0);
++        DEBUGMSGT(("9:cert:add:subject", "subject name: %s\n", cert->subject));
++    }
++
++    if (NULL == cert->issuer) {
++        cert->issuer = X509_NAME_oneline(X509_get_issuer_name(ocert), NULL, 0);
++        if (strcmp(cert->subject, cert->issuer) == 0) {
++            free(cert->issuer);
++            cert->issuer = strdup("self-signed");
++        }
++        DEBUGMSGT(("9:cert:add:issuer", "CA issuer: %s\n", cert->issuer));
++    }
++
++    if (NULL == cert->fingerprint) {
++        cert->hash_type = netsnmp_openssl_cert_get_hash_type(ocert);
++        cert->fingerprint =
++            netsnmp_openssl_cert_get_fingerprint(ocert, cert->hash_type);
++    }
++
++    if (NULL == cert->common_name) {
++        cert->common_name =netsnmp_openssl_cert_get_commonName(ocert, NULL,
++                                                               NULL);
++        DEBUGMSGT(("9:cert:add:name","%s\n", cert->common_name));
++    }
++
++}
++
+ static X509 *
+ netsnmp_ocert_get(netsnmp_cert *cert)
+ {
+     BIO            *certbio;
+     X509           *ocert = NULL;
++    X509           *ncert = NULL;
+     EVP_PKEY       *okey = NULL;
+-    char            file[SNMP_MAXPATH];
+-    int             is_ca;
+ 
+     if (NULL == cert)
+         return NULL;
+@@ -908,51 +993,33 @@ netsnmp_ocert_get(netsnmp_cert *cert)
+         }
+     }
+ 
+-    DEBUGMSGT(("9:cert:read", "Checking file %s\n", cert->info.filename));
+-
+-    certbio = BIO_new(BIO_s_file());
+-    if (NULL == certbio) {
+-        snmp_log(LOG_ERR, "error creating BIO\n");
++    certbio = netsnmp_open_bio(cert->info.dir, cert->info.filename);
++    if (!certbio) {
+         return NULL;
+     }
+ 
+-    snprintf(file, sizeof(file),"%s/%s", cert->info.dir, cert->info.filename);
+-    if (BIO_read_filename(certbio, file) <=0) {
+-        snmp_log(LOG_ERR, "error reading certificate %s into BIO\n", file);
+-        BIO_vfree(certbio);
+-        return NULL;
+-    }
+-
+-    if (NS_CERT_TYPE_UNKNOWN == cert->info.type) {
+-        char *pos = strrchr(cert->info.filename, '.');
+-        if (NULL == pos)
+-            return NULL;
+-        cert->info.type = _cert_ext_type(++pos);
+-        netsnmp_assert(cert->info.type != NS_CERT_TYPE_UNKNOWN);
+-    }
+-
+     switch (cert->info.type) {
+ 
+         case NS_CERT_TYPE_DER:
++            (void)BIO_seek(certbio, cert->offset);
+             ocert = d2i_X509_bio(certbio,NULL); /* DER/ASN1 */
+             if (NULL != ocert)
+                 break;
+-            (void)BIO_reset(certbio);
+             /* Check for PEM if DER didn't work */
+             /* FALLTHROUGH */
+ 
+         case NS_CERT_TYPE_PEM:
+-            ocert = PEM_read_bio_X509_AUX(certbio, NULL, NULL, NULL);
++            (void)BIO_seek(certbio, cert->offset);
++            ocert = ncert = PEM_read_bio_X509_AUX(certbio, NULL, NULL, NULL);
+             if (NULL == ocert)
+                 break;
+             if (NS_CERT_TYPE_DER == cert->info.type) {
+                 DEBUGMSGT(("9:cert:read", "Changing type from DER to PEM\n"));
+                 cert->info.type = NS_CERT_TYPE_PEM;
+             }
+-            /** check for private key too */
+-            if (NULL == cert->key) {
+-                (void)BIO_reset(certbio);
+-                okey =  PEM_read_bio_PrivateKey(certbio, NULL, NULL, NULL);
++            /** check for private key too, but only if we're the first certificate */
++            if (0 == cert->offset && NULL == cert->key) {
++                okey = PEM_read_bio_PrivateKey(certbio, NULL, NULL, NULL);
+                 if (NULL != okey) {
+                     netsnmp_key  *key;
+                     DEBUGMSGT(("cert:read:key", "found key with cert in %s\n",
+@@ -979,7 +1046,7 @@ netsnmp_ocert_get(netsnmp_cert *cert)
+             break;
+ #ifdef CERT_PKCS12_SUPPORT_MAYBE_LATER
+         case NS_CERT_TYPE_PKCS12:
+-            (void)BIO_reset(certbio);
++            (void)BIO_seek(certbio, cert->offset);
+             PKCS12 *p12 = d2i_PKCS12_bio(certbio, NULL);
+             if ( (NULL != p12) && (PKCS12_verify_mac(p12, "", 0) ||
+                                    PKCS12_verify_mac(p12, NULL, 0)))
+@@ -999,46 +1066,7 @@ netsnmp_ocert_get(netsnmp_cert *cert)
+         return NULL;
+     }
+ 
+-    cert->ocert = ocert;
+-    /*
+-     * X509_check_ca return codes:
+-     * 0 not a CA
+-     * 1 is a CA
+-     * 2 basicConstraints absent so "maybe" a CA
+-     * 3 basicConstraints absent but self signed V1.
+-     * 4 basicConstraints absent but keyUsage present and keyCertSign asserted.
+-     * 5 outdated Netscape Certificate Type CA extension.
+-     */
+-    is_ca = X509_check_ca(ocert);
+-    if (1 == is_ca)
+-        cert->info.allowed_uses |= NS_CERT_CA;
+-
+-    if (NULL == cert->subject) {
+-        cert->subject = X509_NAME_oneline(X509_get_subject_name(ocert), NULL,
+-                                          0);
+-        DEBUGMSGT(("9:cert:add:subject", "subject name: %s\n", cert->subject));
+-    }
+-
+-    if (NULL == cert->issuer) {
+-        cert->issuer = X509_NAME_oneline(X509_get_issuer_name(ocert), NULL, 0);
+-        if (strcmp(cert->subject, cert->issuer) == 0) {
+-            free(cert->issuer);
+-            cert->issuer = strdup("self-signed");
+-        }
+-        DEBUGMSGT(("9:cert:add:issuer", "CA issuer: %s\n", cert->issuer));
+-    }
+-    
+-    if (NULL == cert->fingerprint) {
+-        cert->hash_type = netsnmp_openssl_cert_get_hash_type(ocert);
+-        cert->fingerprint =
+-            netsnmp_openssl_cert_get_fingerprint(ocert, cert->hash_type);
+-    }
+-    
+-    if (NULL == cert->common_name) {
+-        cert->common_name =netsnmp_openssl_cert_get_commonName(ocert, NULL,
+-                                                               NULL);
+-        DEBUGMSGT(("9:cert:add:name","%s\n", cert->common_name));
+-    }
++    netsnmp_ocert_parse(cert, ocert);
+ 
+     return ocert;
+ }
+@@ -1048,7 +1076,6 @@ netsnmp_okey_get(netsnmp_key  *key)
+ {
+     BIO            *keybio;
+     EVP_PKEY       *okey;
+-    char            file[SNMP_MAXPATH];
+ 
+     if (NULL == key)
+         return NULL;
+@@ -1056,19 +1083,8 @@ netsnmp_okey_get(netsnmp_key  *key)
+     if (key->okey)
+         return key->okey;
+ 
+-    snprintf(file, sizeof(file),"%s/%s", key->info.dir, key->info.filename);
+-    DEBUGMSGT(("cert:key:read", "Checking file %s\n", key->info.filename));
+-
+-    keybio = BIO_new(BIO_s_file());
+-    if (NULL == keybio) {
+-        snmp_log(LOG_ERR, "error creating BIO\n");
+-        return NULL;
+-    }
+-
+-    if (BIO_read_filename(keybio, file) <=0) {
+-        snmp_log(LOG_ERR, "error reading certificate %s into BIO\n",
+-                 key->info.filename);
+-        BIO_vfree(keybio);
++    keybio = netsnmp_open_bio(key->info.dir, key->info.filename);
++    if (!keybio) {
+         return NULL;
+     }
+ 
+@@ -1154,7 +1170,7 @@ netsnmp_cert_load_x509(netsnmp_cert *cert)
+             cert->issuer_cert =  _find_issuer(cert);
+             if (NULL == cert->issuer_cert) {
+                 DEBUGMSGT(("cert:load:warn",
+-                           "couldn't load CA chain for cert %s\n",
++                           "couldn't load full CA chain for cert %s\n",
+                            cert->info.filename));
+                 rc = CERT_LOAD_PARTIAL;
+                 break;
+@@ -1163,7 +1179,7 @@ netsnmp_cert_load_x509(netsnmp_cert *cert)
+         /** get issuer ocert */
+         if ((NULL == cert->issuer_cert->ocert) &&
+             (netsnmp_ocert_get(cert->issuer_cert) == NULL)) {
+-            DEBUGMSGT(("cert:load:warn", "couldn't load cert chain for %s\n",
++            DEBUGMSGT(("cert:load:warn", "couldn't load full cert chain for %s\n",
+                        cert->info.filename));
+             rc = CERT_LOAD_PARTIAL;
+             break;
+@@ -1184,7 +1200,7 @@ _find_partner(netsnmp_cert *cert, netsnmp_key *key)
+         return;
+     }
+ 
+-    if(key) {
++    if (key) {
+         if (key->cert) {
+             DEBUGMSGT(("cert:partner", "key already has partner\n"));
+             return;
+@@ -1197,7 +1213,8 @@ _find_partner(netsnmp_cert *cert, netsnmp_key *key)
+             return;
+         *pos = 0;
+ 
+-        matching = _cert_find_subset_fn( filename, key->info.dir );
++        matching = _cert_reduce_subset_first(_cert_find_subset_fn( filename,
++                                             key->info.dir ));
+         if (!matching)
+             return;
+         if (1 == matching->size) {
+@@ -1217,7 +1234,7 @@ _find_partner(netsnmp_cert *cert, netsnmp_key *key)
+             DEBUGMSGT(("cert:partner", "%s matches multiple certs\n",
+                           key->info.filename));
+     }
+-    else if(cert) {
++    else if (cert) {
+         if (cert->key) {
+             DEBUGMSGT(("cert:partner", "cert already has partner\n"));
+             return;
+@@ -1255,76 +1272,189 @@ _find_partner(netsnmp_cert *cert, netsnmp_key *key)
+     }
+ }
+ 
++static netsnmp_key *
++_add_key(EVP_PKEY *okey, const char* dirname, const char* filename, FILE *index)
++{
++    netsnmp_key  *key;
++
++    key = _new_key(dirname, filename);
++    if (NULL == key) {
++        return NULL;
++    }
++
++    key->okey = okey;
++
++    if (-1 == CONTAINER_INSERT(_keys, key)) {
++        DEBUGMSGT(("cert:key:file:add:err",
++                   "error inserting key into container\n"));
++        netsnmp_key_free(key);
++        key = NULL;
++    }
++    if (index) {
++        fprintf(index, "k:%s\n", filename);
++    }
++
++    return key;
++}
++
++static netsnmp_cert *
++_add_cert(X509 *ocert, const char* dirname, const char* filename, int type, int offset,
++          int allowed_uses, FILE *index)
++{
++    netsnmp_cert *cert;
++
++    cert = _new_cert(dirname, filename, type, offset,
++                     allowed_uses, -1, NULL, NULL, NULL);
++    if (NULL == cert)
++        return NULL;
++
++    netsnmp_ocert_parse(cert, ocert);
++
++    if (-1 == CONTAINER_INSERT(_certs, cert)) {
++        DEBUGMSGT(("cert:file:add:err",
++                   "error inserting cert into container\n"));
++        netsnmp_cert_free(cert);
++        return NULL;
++    }
++
++    if (index) {
++        /** filename = NAME_MAX = 255 */
++        /** fingerprint max = 64*3=192 for sha512 */
++        /** common name / CN  = 64 */
++        if (cert)
++            fprintf(index, "c:%s %d %d %d %d %s '%s' '%s'\n", filename,
++                    cert->info.type, cert->offset, cert->info.allowed_uses,
++                    cert->hash_type, cert->fingerprint,
++                    cert->common_name, cert->subject);
++    }
++
++    return cert;
++}
++
+ static int
+ _add_certfile(const char* dirname, const char* filename, FILE *index)
+ {
+-    X509         *ocert;
+-    EVP_PKEY     *okey;
++    BIO          *certbio;
++    X509         *ocert = NULL;
++    X509         *ncert;
++    EVP_PKEY     *okey = NULL;
+     netsnmp_cert *cert = NULL;
+     netsnmp_key  *key = NULL;
+     char          certfile[SNMP_MAXPATH];
+     int           type;
++    int           offset = 0;
+ 
+     if (((const void*)NULL == dirname) || (NULL == filename))
+         return -1;
+ 
+     type = _type_from_filename(filename);
+-    netsnmp_assert(type != NS_CERT_TYPE_UNKNOWN);
++    if (type == NS_CERT_TYPE_UNKNOWN) {
++        snmp_log(LOG_ERR, "certificate file '%s' type not recognised, ignoring\n", filename);
++        return -1;
++    }
+ 
+-    snprintf(certfile, sizeof(certfile),"%s/%s", dirname, filename);
++    certbio = netsnmp_open_bio(dirname, filename);
++    if (!certbio) {
++        return -1;
++    }
+ 
+-    DEBUGMSGT(("9:cert:file:add", "Checking file: %s (type %d)\n", filename,
+-               type));
++    switch (type) {
+ 
+-    if (NS_CERT_TYPE_KEY == type) {
+-        key = _new_key(dirname, filename);
+-        if (NULL == key)
+-            return -1;
+-        okey = netsnmp_okey_get(key);
+-        if (NULL == okey) {
+-            netsnmp_key_free(key);
+-            return -1;
+-        }
+-        key->okey = okey;
+-        if (-1 == CONTAINER_INSERT(_keys, key)) {
+-            DEBUGMSGT(("cert:key:file:add:err",
+-                       "error inserting key into container\n"));
+-            netsnmp_key_free(key);
+-            key = NULL;
+-        }
+-    }
+-    else {
+-        cert = _new_cert(dirname, filename, type, -1, NULL, NULL, NULL);
+-        if (NULL == cert)
+-            return -1;
+-        ocert = netsnmp_ocert_get(cert);
+-        if (NULL == ocert) {
+-            netsnmp_cert_free(cert);
+-            return -1;
+-        }
+-        cert->ocert = ocert;
+-        if (-1 == CONTAINER_INSERT(_certs, cert)) {
+-            DEBUGMSGT(("cert:file:add:err",
+-                       "error inserting cert into container\n"));
+-            netsnmp_cert_free(cert);
+-            cert = NULL;
+-        }
+-    }
+-    if ((NULL == cert) && (NULL == key)) {
+-        DEBUGMSGT(("cert:file:add:failure", "for %s\n", certfile));
+-        return -1;
++       case NS_CERT_TYPE_KEY: 
++
++           okey = PEM_read_bio_PrivateKey(certbio, NULL, NULL, NULL);
++           if (NULL == okey)
++               snmp_log(LOG_ERR, "error parsing key file %s\n",
++                     key->info.filename);
++           else {
++               key = _add_key(okey, dirname, filename, index);
++               if (NULL == key) {
++                   EVP_PKEY_free(okey);
++                      okey = NULL;
++               }
++           }
++           break;
++
++        case NS_CERT_TYPE_DER:
++
++            ocert = d2i_X509_bio(certbio, NULL); /* DER/ASN1 */
++            if (NULL != ocert) {
++                if (!_add_cert(ocert, dirname, filename, type, 0,
++                               NS_CERT_REMOTE_PEER, index)) {
++                    X509_free(ocert);
++                    ocert = NULL;
++                }
++                break;
++            }
++            (void)BIO_reset(certbio);
++            /* Check for PEM if DER didn't work */
++            /* FALLTHROUGH */
++
++        case NS_CERT_TYPE_PEM:
++
++            if (NS_CERT_TYPE_DER == type) {
++                DEBUGMSGT(("9:cert:read", "Changing type from DER to PEM\n"));
++                type = NS_CERT_TYPE_PEM;
++            }
++
++            /* read the private key first so we can record this in the index */
++            okey = PEM_read_bio_PrivateKey(certbio, NULL, NULL, NULL);
++
++            (void)BIO_reset(certbio);
++
++            /* certs are read after the key */
++	    ocert = ncert = PEM_read_bio_X509_AUX(certbio, NULL, NULL, NULL);
++            if (NULL != ocert) {
++                cert = _add_cert(ncert, dirname, filename, type, 0,
++                                 okey ? NS_CERT_IDENTITY | NS_CERT_REMOTE_PEER :
++                                 NS_CERT_REMOTE_PEER, index);
++                if (NULL == cert) {
++                    X509_free(ocert);
++                    ocert = ncert = NULL;
++                }
++            }
++            while (NULL != ncert) {
++                offset = BIO_tell(certbio);
++                ncert = PEM_read_bio_X509_AUX(certbio, NULL, NULL, NULL);
++                if (ncert) {
++                    if (NULL == _add_cert(ncert, dirname, filename, type, offset, 0, index)) {
++                        X509_free(ncert);
++                        ncert = NULL;
++                    }
++                }
++            }
++
++            if (NULL != okey) {
++                DEBUGMSGT(("cert:read:key", "found key with cert in %s\n",
++                           cert->info.filename));
++                key = _add_key(okey, dirname, filename, NULL);
++                if (NULL != key) {
++                    DEBUGMSGT(("cert:read:partner", "%s match found!\n",
++                               cert->info.filename));
++                    key->cert = cert;
++                    cert->key = key;
++                }
++                else {
++                    EVP_PKEY_free(okey);
++                    okey = NULL;
++                }
++            }
++
++            break;
++
++#ifdef CERT_PKCS12_SUPPORT_MAYBE_LATER
++        case NS_CERT_TYPE_PKCS12:
++#endif
++
++        default:
++            break;
+     }
+ 
+-    if (index) {
+-        /** filename = NAME_MAX = 255 */
+-        /** fingerprint max = 64*3=192 for sha512 */
+-        /** common name / CN  = 64 */
+-        if (cert)
+-            fprintf(index, "c:%s %d %d %s '%s' '%s'\n", filename,
+-                    cert->info.type, cert->hash_type, cert->fingerprint,
+-                    cert->common_name, cert->subject);
+-        else if (key)
+-            fprintf(index, "k:%s\n", filename);
++    BIO_vfree(certbio);
++
++    if ((NULL == ocert) && (NULL == okey)) {
++        snmp_log(LOG_ERR, "certificate file '%s' contained neither certificate nor key, ignoring\n", certfile);
++        return -1;
+     }
+ 
+     return 0;
+@@ -1338,8 +1468,10 @@ _cert_read_index(const char *dirname, struct stat *dirstat)
+     struct stat     idx_stat;
+     char            tmpstr[SNMP_MAXPATH + 5], filename[NAME_MAX];
+     char            fingerprint[EVP_MAX_MD_SIZE*3], common_name[64+1], type_str[15];
+-    char            subject[SNMP_MAXBUF_SMALL], hash_str[15];
+-    int             count = 0, type, hash, version;
++    char            subject[SNMP_MAXBUF_SMALL], hash_str[15], offset_str[15];
++    char            allowed_uses_str[15];
++    ssize_t         offset;
++    int             count = 0, type, allowed_uses, hash, version;
+     netsnmp_cert    *cert;
+     netsnmp_key     *key;
+     netsnmp_container *newer, *found;
+@@ -1381,7 +1513,8 @@ _cert_read_index(const char *dirname, struct stat *dirstat)
+         netsnmp_directory_container_read_some(NULL, dirname,
+                                               _time_filter, &idx_stat,
+                                               NETSNMP_DIR_NSFILE |
+-                                              NETSNMP_DIR_NSFILE_STATS);
++                                              NETSNMP_DIR_NSFILE_STATS |
++                                              NETSNMP_DIR_ALLOW_DUPLICATES);
+     if (newer) {
+         DEBUGMSGT(("cert:index:parse", "Index outdated; files modified\n"));
+         CONTAINER_FREE_ALL(newer, NULL);
+@@ -1425,6 +1558,8 @@ _cert_read_index(const char *dirname, struct stat *dirstat)
+             pos = &tmpstr[2];
+             if ((NULL == (pos=copy_nword(pos, filename, sizeof(filename)))) ||
+                 (NULL == (pos=copy_nword(pos, type_str, sizeof(type_str)))) ||
++                (NULL == (pos=copy_nword(pos, offset_str, sizeof(offset_str)))) ||
++                (NULL == (pos=copy_nword(pos, allowed_uses_str, sizeof(allowed_uses_str)))) ||
+                 (NULL == (pos=copy_nword(pos, hash_str, sizeof(hash_str)))) ||
+                 (NULL == (pos=copy_nword(pos, fingerprint,
+                                          sizeof(fingerprint)))) ||
+@@ -1437,9 +1572,11 @@ _cert_read_index(const char *dirname, struct stat *dirstat)
+                 break;
+             }
+             type = atoi(type_str);
++            offset = atoi(offset_str);
++            allowed_uses = atoi(allowed_uses_str);
+             hash = atoi(hash_str);
+-            cert = _new_cert(dirname, filename, type, hash, fingerprint,
+-                             common_name, subject);
++            cert = _new_cert(dirname, filename, type, offset, allowed_uses, hash,
++                             fingerprint, common_name, subject);
+             if (cert && 0 == CONTAINER_INSERT(found, cert))
+                 ++count;
+             else {
+@@ -1543,7 +1680,8 @@ _add_certdir(const char *dirname)
+         netsnmp_directory_container_read_some(NULL, dirname,
+                                               _cert_cert_filter, NULL,
+                                               NETSNMP_DIR_RELATIVE_PATH |
+-                                              NETSNMP_DIR_EMPTY_OK );
++                                              NETSNMP_DIR_EMPTY_OK |
++                                              NETSNMP_DIR_ALLOW_DUPLICATES);
+     if (NULL == cert_container) {
+         DEBUGMSGT(("cert:index:dir",
+                     "error creating container for cert files\n"));
+@@ -1631,7 +1769,7 @@ _cert_print(netsnmp_cert *c, void *context)
+     if (NULL == c)
+         return;
+ 
+-    DEBUGMSGT(("cert:dump", "cert %s in %s\n", c->info.filename, c->info.dir));
++    DEBUGMSGT(("cert:dump", "cert %s in %s at offset %d\n", c->info.filename, c->info.dir, c->offset));
+     DEBUGMSGT(("cert:dump", "   type %d flags 0x%x (%s)\n",
+              c->info.type, c->info.allowed_uses,
+               _mode_str(c->info.allowed_uses)));
+@@ -1835,7 +1973,8 @@ netsnmp_cert_find(int what, int where, void *hint)
+         netsnmp_void_array *matching;
+ 
+         DEBUGMSGT(("cert:find:params", " hint = %s\n", (char *)hint));
+-        matching = _cert_find_subset_fn( filename, NULL );
++        matching = _cert_reduce_subset_what(_cert_find_subset_fn(
++                                            filename, NULL ), what);
+         if (!matching)
+             return NULL;
+         if (1 == matching->size)
+@@ -1881,6 +2020,32 @@ netsnmp_cert_find(int what, int where, void *hint)
+     return result;
+ }
+ 
++netsnmp_void_array *
++netsnmp_certs_find(int what, int where, void *hint)
++{
++
++    DEBUGMSGT(("certs:find:params", "looking for %s(%d) in %s(0x%x), hint %p\n",
++               _mode_str(what), what, _where_str(where), where, hint));
++
++    if (NS_CERTKEY_FILE == where) {
++        /** hint == filename */
++        char               *filename = (char*)hint;
++        netsnmp_void_array *matching;
++
++        DEBUGMSGT(("cert:find:params", " hint = %s\n", (char *)hint));
++        matching = _cert_reduce_subset_what(_cert_find_subset_fn(
++                                            filename, NULL ), what);
++
++        return matching;
++    } /* where = NS_CERTKEY_FILE */
++    else { /* unknown location */
++
++        DEBUGMSGT(("certs:find:err", "unhandled location %d for %d\n", where,
++                   what));
++        return NULL;
++    }
++}
++
+ #ifndef NETSNMP_FEATURE_REMOVE_CERT_FINGERPRINTS
+ int
+ netsnmp_cert_check_vb_fingerprint(const netsnmp_variable_list *var)
+@@ -2278,6 +2443,124 @@ _reduce_subset_dir(netsnmp_void_array *matching, const char *directory)
+     }
+ }
+ 
++/*
++ * reduce subset by eliminating any certificates that are not the
++ * first certficate in a file. This allows us to ignore certificate
++ * chains when testing for specific certificates, and to match keys
++ * to the first certificate only.
++ */
++static netsnmp_void_array *
++_cert_reduce_subset_first(netsnmp_void_array *matching)
++{
++    netsnmp_cert *cc;
++    int i = 0, j, newsize;
++
++    if ((NULL == matching))
++        return matching;
++
++    newsize = matching->size;
++
++    for( ; i < matching->size; ) {
++        /*
++         * if we've shifted matches down we'll hit a NULL entry before
++         * we hit the end of the array.
++         */
++        if (NULL == matching->array[i])
++            break;
++        /*
++         * skip over valid matches. The first entry has an offset of zero.
++         */
++        cc = (netsnmp_cert*)matching->array[i];
++        if (0 == cc->offset) {
++            ++i;
++            continue;
++        }
++        /*
++         * shrink array by shifting everything down a spot. Might not be
++         * the most efficient soloution, but this is just happening at
++         * startup and hopefully most certs won't have common prefixes.
++         */
++        --newsize;
++        for ( j=i; j < newsize; ++j )
++            matching->array[j] = matching->array[j+1];
++        matching->array[j] = NULL;
++        /** no ++i; just shifted down, need to look at same position again */
++    }
++    /*
++     * if we shifted, set the new size
++     */
++    if (newsize != matching->size) {
++        DEBUGMSGT(("9:cert:subset:first", "shrank from %" NETSNMP_PRIz "d to %d\n",
++                   matching->size, newsize));
++        matching->size = newsize;
++    }
++
++    if (0 == matching->size) {
++        free(matching->array);
++        SNMP_FREE(matching);
++    }
++
++    return matching;
++}
++
++/*
++ * reduce subset by eliminating any certificates that do not match
++ * purpose specified.
++ */
++static netsnmp_void_array *
++_cert_reduce_subset_what(netsnmp_void_array *matching, int what)
++{
++    netsnmp_cert_common *cc;
++    int i = 0, j, newsize;
++
++    if ((NULL == matching))
++        return matching;
++
++    newsize = matching->size;
++
++    for( ; i < matching->size; ) {
++        /*
++         * if we've shifted matches down we'll hit a NULL entry before
++         * we hit the end of the array.
++         */
++        if (NULL == matching->array[i])
++            break;
++        /*
++         * skip over valid matches. The first entry has an offset of zero.
++         */
++        cc = (netsnmp_cert_common *)matching->array[i];
++        if ((cc->allowed_uses & what)) {
++            ++i;
++            continue;
++        }
++        /*
++         * shrink array by shifting everything down a spot. Might not be
++         * the most efficient soloution, but this is just happening at
++         * startup and hopefully most certs won't have common prefixes.
++         */
++        --newsize;
++        for ( j=i; j < newsize; ++j )
++            matching->array[j] = matching->array[j+1];
++        matching->array[j] = NULL;
++        /** no ++i; just shifted down, need to look at same position again */
++    }
++    /*
++     * if we shifted, set the new size
++     */
++    if (newsize != matching->size) {
++        DEBUGMSGT(("9:cert:subset:what", "shrank from %" NETSNMP_PRIz "d to %d\n",
++                   matching->size, newsize));
++        matching->size = newsize;
++    }
++
++    if (0 == matching->size) {
++        free(matching->array);
++        SNMP_FREE(matching);
++    }
++
++    return matching;
++}
++
+ static netsnmp_void_array *
+ _cert_find_subset_common(const char *filename, netsnmp_container *container)
+ {
+diff --git a/snmplib/dir_utils.c b/snmplib/dir_utils.c
+index c2dd989..e7145e4 100644
+--- a/snmplib/dir_utils.c
++++ b/snmplib/dir_utils.c
+@@ -107,6 +107,9 @@ netsnmp_directory_container_read_some(netsnmp_container *user_container,
+         /** default to unsorted */
+         if (! (flags & NETSNMP_DIR_SORTED))
+             CONTAINER_SET_OPTIONS(container, CONTAINER_KEY_UNSORTED, rc);
++        /** default to duplicates not allowed */
++        if (! (flags & NETSNMP_DIR_ALLOW_DUPLICATES))
++           CONTAINER_SET_OPTIONS(container, CONTAINER_KEY_ALLOW_DUPLICATES, rc);
+     }
+ 
+     dir = opendir(dirname);
+diff --git a/snmplib/transports/snmpTLSBaseDomain.c b/snmplib/transports/snmpTLSBaseDomain.c
+index a3a85bc..b9baeae 100644
+--- a/snmplib/transports/snmpTLSBaseDomain.c
++++ b/snmplib/transports/snmpTLSBaseDomain.c
+@@ -68,7 +68,7 @@ static unsigned long ERR_get_error_all(const char **file, int *line,
+ /* this is called during negotiation */
+ int verify_callback(int ok, X509_STORE_CTX *ctx) {
+     int err, depth;
+-    char buf[1024], *fingerprint;
++    char subject[SNMP_MAXBUF_MEDIUM], issuer[SNMP_MAXBUF_MEDIUM], *fingerprint;
+     X509 *thecert;
+     netsnmp_cert *cert;
+     _netsnmp_verify_info *verify_info;
+@@ -80,10 +80,12 @@ int verify_callback(int ok, X509_STORE_CTX *ctx) {
+     
+     /* things to do: */
+ 
+-    X509_NAME_oneline(X509_get_subject_name(thecert), buf, sizeof(buf));
++    X509_NAME_oneline(X509_get_subject_name(thecert), subject, sizeof(subject));
++    X509_NAME_oneline(X509_get_issuer_name(thecert), issuer, sizeof(issuer));
+     fingerprint = netsnmp_openssl_cert_get_fingerprint(thecert, -1);
+-    DEBUGMSGTL(("tls_x509:verify", "Cert: %s\n", buf));
+-    DEBUGMSGTL(("tls_x509:verify", "  fp: %s\n", fingerprint ?
++    DEBUGMSGTL(("tls_x509:verify", " subject: %s\n", subject));
++    DEBUGMSGTL(("tls_x509:verify", "  issuer: %s\n", issuer));
++    DEBUGMSGTL(("tls_x509:verify", "      fp: %s\n", fingerprint ?
+                 fingerprint : "unknown"));
+ 
+     ssl = X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx());
+@@ -118,7 +120,7 @@ int verify_callback(int ok, X509_STORE_CTX *ctx) {
+         } else {
+             DEBUGMSGTL(("tls_x509:verify", "  no matching fp found\n"));
+             /* log where we are and why called */
+-            snmp_log(LOG_ERR, "tls verification failure: ok=%d ctx=%p depth=%d err=%i:%s\n", ok, ctx, depth, err, X509_verify_cert_error_string(err));
++            snmp_log(LOG_ERR, "tls verification failure: ok=%d ctx=%p depth=%d fp=%s subject='%s' issuer='%s' err=%i:%s\n", ok, ctx, depth, fingerprint, subject, issuer, err, X509_verify_cert_error_string(err));
+             SNMP_FREE(fingerprint);
+             return 0;
+         }
+@@ -434,21 +436,48 @@ netsnmp_tlsbase_extract_security_name(SSL *ssl, _netsnmpTLSBaseData *tlsdata) {
+ int
+ _trust_this_cert(SSL_CTX *the_ctx, char *certspec) {
+     netsnmp_cert *trustcert;
++    netsnmp_cert *candidate;
++    netsnmp_void_array *matching = NULL;
++
++    int                 i;
+ 
+     DEBUGMSGTL(("sslctx_client", "Trying to load a trusted certificate: %s\n",
+                 certspec));
+ 
+     /* load this identifier into the trust chain */
+     trustcert = netsnmp_cert_find(NS_CERT_CA,
+-                                  NS_CERTKEY_MULTIPLE,
++                                  NS_CERTKEY_FINGERPRINT,
+                                   certspec);
++
++    /* loop through all CA certs in the given files */
++    if (!trustcert) {
++        matching = netsnmp_certs_find(NS_CERT_CA,
++                                      NS_CERTKEY_FILE,
++                                      certspec);
++        for (i = 0; (matching) && (i < matching->size); ++i) {
++            candidate = (netsnmp_cert*)matching->array[i];
++            if (netsnmp_cert_trust(the_ctx, candidate) != SNMPERR_SUCCESS) {
++                free(matching->array);
++                free(matching);
++                LOGANDDIE("failed to load trust certificate");
++            }
++        } /** matching loop */
++
++        if (matching) {
++            free(matching->array);
++            free(matching);
++            return 1;
++	}
++    }
++
++    /* fall back to trusting the remote peer certificate */
+     if (!trustcert)
+         trustcert = netsnmp_cert_find(NS_CERT_REMOTE_PEER,
+                                       NS_CERTKEY_MULTIPLE,
+                                       certspec);
+     if (!trustcert)
+         LOGANDDIE("failed to find requested certificate to trust");
+-        
++
+     /* Add the certificate to the context */
+     if (netsnmp_cert_trust(the_ctx, trustcert) != SNMPERR_SUCCESS)
+         LOGANDDIE("failed to load trust certificate");
diff --git a/SOURCES/net-snmp-5.9-libnetsnmptrapd-against-MYSQL_LIBS.patch b/SOURCES/net-snmp-5.9-libnetsnmptrapd-against-MYSQL_LIBS.patch
new file mode 100644
index 0000000..8f1f2ed
--- /dev/null
+++ b/SOURCES/net-snmp-5.9-libnetsnmptrapd-against-MYSQL_LIBS.patch
@@ -0,0 +1,13 @@
+diff --git a/apps/Makefile.in b/apps/Makefile.in
+index d4529d3..175242b 100644
+--- a/apps/Makefile.in
++++ b/apps/Makefile.in
+@@ -237,7 +237,7 @@ snmppcap$(EXEEXT):    snmppcap.$(OSUFFIX) $(USELIBS)
+ 	$(LINK) ${CFLAGS} -o $@ snmppcap.$(OSUFFIX) ${LDFLAGS} ${LIBS} -lpcap
+ 
+ libnetsnmptrapd.$(LIB_EXTENSION)$(LIB_VERSION): $(LLIBTRAPD_OBJS)
+-	$(LIB_LD_CMD) $@ ${LLIBTRAPD_OBJS} $(MIBLIB) $(USELIBS) $(PERLLDOPTS_FOR_LIBS) $(LDFLAGS)
++	$(LIB_LD_CMD) $@ ${LLIBTRAPD_OBJS} $(MIBLIB) $(USELIBS) $(PERLLDOPTS_FOR_LIBS) $(LIB_LD_LIBS) $(MYSQL_LIBS)
+ 	$(RANLIB) $@
+ 
+ snmpinforminstall:
diff --git a/SOURCES/net-snmp-5.9-memory-reporting.patch b/SOURCES/net-snmp-5.9-memory-reporting.patch
new file mode 100644
index 0000000..3db8d51
--- /dev/null
+++ b/SOURCES/net-snmp-5.9-memory-reporting.patch
@@ -0,0 +1,28 @@
+diff --git a/agent/mibgroup/hardware/memory/memory_linux.c b/agent/mibgroup/hardware/memory/memory_linux.c
+index 6d5e86c..68b55d2 100644
+--- a/agent/mibgroup/hardware/memory/memory_linux.c
++++ b/agent/mibgroup/hardware/memory/memory_linux.c
+@@ -123,6 +123,13 @@ int netsnmp_mem_arch_load( netsnmp_cache *cache, void *magic ) {
+         if (first)
+             snmp_log(LOG_ERR, "No SwapTotal line in /proc/meminfo\n");
+     }
++    b = strstr(buff, "SReclaimable: ");
++    if (b)
++        sscanf(b, "SReclaimable: %lu", &sreclaimable);
++    else {
++        if (first)
++            snmp_log(LOG_ERR, "No SReclaimable line in /proc/meminfo\n");
++    }
+     b = strstr(buff, "SwapFree: ");
+     if (b)
+         sscanf(b, "SwapFree: %lu", &swapfree);
+@@ -130,9 +137,6 @@ int netsnmp_mem_arch_load( netsnmp_cache *cache, void *magic ) {
+         if (first)
+             snmp_log(LOG_ERR, "No SwapFree line in /proc/meminfo\n");
+     }
+-    b = strstr(buff, "SReclaimable: ");
+-    if (b)
+-        sscanf(b, "SReclaimable: %lu", &sreclaimable);
+     first = 0;
+ 
+ 
diff --git a/SOURCES/net-snmp-5.9-multilib.patch b/SOURCES/net-snmp-5.9-multilib.patch
new file mode 100644
index 0000000..ffd8da8
--- /dev/null
+++ b/SOURCES/net-snmp-5.9-multilib.patch
@@ -0,0 +1,48 @@
+diff --git a/man/netsnmp_config_api.3.def b/man/netsnmp_config_api.3.def
+index 90b20d9..bd5abe1 100644
+--- a/man/netsnmp_config_api.3.def
++++ b/man/netsnmp_config_api.3.def
+@@ -295,7 +295,7 @@ for one particular machine.
+ .PP
+ The default list of directories to search is \fC SYSCONFDIR/snmp\fP,
+ followed by \fC DATADIR/snmp\fP,
+-followed by \fC LIBDIR/snmp\fP,
++followed by \fC /usr/lib(64)/snmp\fP,
+ followed by \fC $HOME/.snmp\fP.
+ This list can be changed by setting the environmental variable
+ .I SNMPCONFPATH
+@@ -367,7 +367,7 @@ A colon separated list of directories to search for configuration
+ files in.
+ Default:
+ .br
+-SYSCONFDIR/snmp:\:DATADIR/snmp:\:LIBDIR/snmp:\:$HOME/.snmp
++SYSCONFDIR/snmp:\:DATADIR/snmp:\:/usr/lib(64)/snmp:\:$HOME/.snmp
+ .SH "SEE ALSO"
+ netsnmp_mib_api(3), snmp_api(3)
+ .\" Local Variables:
+diff --git a/man/snmp_config.5.def b/man/snmp_config.5.def
+index fd30873..c3437d6 100644
+--- a/man/snmp_config.5.def
++++ b/man/snmp_config.5.def
+@@ -10,7 +10,7 @@ First off, there are numerous places that configuration files can be
+ found and read from.  By default, the applications look for
+ configuration files in the following 4 directories, in order:
+ SYSCONFDIR/snmp,
+-DATADIR/snmp, LIBDIR/snmp, and $HOME/.snmp.  In each of these
++DATADIR/snmp, /usr/lib(64)/snmp, and $HOME/.snmp.  In each of these
+ directories, it looks for files snmp.conf, snmpd.conf and/or
+ snmptrapd.conf, as well as snmp.local.conf, snmpd.local.conf
+ and/or snmptrapd.local.conf. *.local.conf are always
+diff --git a/man/snmpd.conf.5.def b/man/snmpd.conf.5.def
+index 7ce8a46..a4000f9 100644
+--- a/man/snmpd.conf.5.def
++++ b/man/snmpd.conf.5.def
+@@ -1593,7 +1593,7 @@ filename), and call the initialisation routine \fIinit_NAME\fR.
+ .RS
+ .IP "Note:"
+ If the specified PATH is not a fully qualified filename, it will
+-be interpreted relative to LIBDIR/snmp/dlmod, and \fC.so\fR
++be interpreted relative to /usr/lib(64)/snmp/dlmod, and \fC.so\fR
+ will be appended to the filename.
+ .RE
+ .PP
diff --git a/SOURCES/net-snmp-5.9-openssl-3.0.patch b/SOURCES/net-snmp-5.9-openssl-3.0.patch
new file mode 100644
index 0000000..69de506
--- /dev/null
+++ b/SOURCES/net-snmp-5.9-openssl-3.0.patch
@@ -0,0 +1,84 @@
+diff -urNp a/include/net-snmp/library/snmp_openssl.h b/include/net-snmp/library/snmp_openssl.h
+--- a/include/net-snmp/library/snmp_openssl.h	2021-09-15 07:55:39.829901038 +0200
++++ b/include/net-snmp/library/snmp_openssl.h	2021-09-15 07:56:18.656412998 +0200
+@@ -44,7 +44,6 @@ extern          "C" {
+     /*
+      * misc
+      */
+-    void netsnmp_openssl_err_log(const char *prefix);
+     void netsnmp_openssl_null_checks(SSL *ssl, int *nullAuth, int *nullCipher);
+ 
+     /*
+diff -urNp a/snmplib/snmp_openssl.c b/snmplib/snmp_openssl.c
+--- a/snmplib/snmp_openssl.c	2021-09-15 07:55:39.785900458 +0200
++++ b/snmplib/snmp_openssl.c	2021-09-15 07:57:30.914417600 +0200
+@@ -937,20 +937,6 @@ netsnmp_openssl_cert_issued_by(X509 *iss
+     return (X509_check_issued(issuer, cert) == X509_V_OK);
+ }
+ 
+-
+-#ifndef NETSNMP_FEATURE_REMOVE_OPENSSL_ERR_LOG
+-void
+-netsnmp_openssl_err_log(const char *prefix)
+-{
+-    unsigned long err;
+-    for (err = ERR_get_error(); err; err = ERR_get_error()) {
+-        snmp_log(LOG_ERR,"%s: %ld\n", prefix ? prefix: "openssl error", err);
+-        snmp_log(LOG_ERR, "library=%d, function=%d, reason=%d\n",
+-                 ERR_GET_LIB(err), ERR_GET_FUNC(err), ERR_GET_REASON(err));
+-    }
+-}
+-#endif /* NETSNMP_FEATURE_REMOVE_OPENSSL_ERR_LOG */
+-
+ void
+ netsnmp_openssl_null_checks(SSL *ssl, int *null_auth, int *null_cipher)
+ {
+diff -urNp a/snmplib/transports/snmpTLSBaseDomain.c b/snmplib/transports/snmpTLSBaseDomain.c
+--- a/snmplib/transports/snmpTLSBaseDomain.c	2021-05-18 11:15:09.247472175 +0200
++++ b/snmplib/transports/snmpTLSBaseDomain.c	2021-05-24 09:39:29.297494727 +0200
+@@ -54,17 +54,6 @@ netsnmp_feature_require(cert_util);
+ 
+ int openssl_local_index;
+ 
+-#ifndef HAVE_ERR_GET_ERROR_ALL
+-/* A backport of the OpenSSL 1.1.1e ERR_get_error_all() function. */
+-static unsigned long ERR_get_error_all(const char **file, int *line,
+-                                       const char **func,
+-                                       const char **data, int *flags)
+-{
+-    *func = NULL;
+-    return ERR_get_error_line_data(file, line, data, flags);
+-}
+-#endif
+-
+ /* this is called during negotiation */
+ int verify_callback(int ok, X509_STORE_CTX *ctx) {
+     int err, depth;
+@@ -1187,27 +1176,6 @@ void _openssl_log_error(int rc, SSL *con
+                  ERR_reason_error_string(ERR_get_error()));
+ 
+     }
+-
+-    /* other errors */
+-    while ((numerical_reason =
+-            ERR_get_error_all(&file, &line, &func, &data, &flags)) != 0) {
+-        snmp_log(LOG_ERR, "%s (file %s, func %s, line %d)\n",
+-                 ERR_error_string(numerical_reason, NULL), file, func, line);
+-
+-        /* if we have a text translation: */
+-        if (data && (flags & ERR_TXT_STRING)) {
+-            snmp_log(LOG_ERR, "  Textual Error: %s\n", data);
+-            /*
+-             * per openssl man page: If it has been allocated by
+-             * OPENSSL_malloc(), *flags&ERR_TXT_MALLOCED is true.
+-             *
+-             * arggh... stupid openssl prototype for ERR_get_error_line_data
+-             * wants a const char **, but returns something that we might
+-             * need to free??
+-             */
+-            if (flags & ERR_TXT_MALLOCED)
+-                OPENSSL_free(NETSNMP_REMOVE_CONST(void *, data));        }
+-    }
+     
+     snmp_log(LOG_ERR, "---- End of OpenSSL Errors ----\n");
+ }
diff --git a/SOURCES/net-snmp-5.9-pie.patch b/SOURCES/net-snmp-5.9-pie.patch
new file mode 100644
index 0000000..cb2793d
--- /dev/null
+++ b/SOURCES/net-snmp-5.9-pie.patch
@@ -0,0 +1,26 @@
+diff --git a/agent/Makefile.in b/agent/Makefile.in
+index b5d692d..1a30209 100644
+--- a/agent/Makefile.in
++++ b/agent/Makefile.in
+@@ -297,7 +297,7 @@ getmibstat.o: mibgroup/kernel_sunos5.c
+ 	$(CC) $(CFLAGS) -o $@ -D_GETMIBSTAT_TEST -DDODEBUG -c $? 
+ 
+ snmpd$(EXEEXT):	${LAGENTOBJS} $(USELIBS) $(AGENTLIB) $(HELPERLIB) $(MIBLIB) $(LIBTARG) 
+-	$(LINK) $(CFLAGS) -o $@ ${LAGENTOBJS} ${LDFLAGS} ${OUR_AGENT_LIBS}
++	$(LINK) $(CFLAGS) -o $@ -pie ${LAGENTOBJS} ${LDFLAGS} ${OUR_AGENT_LIBS}
+ 
+ libnetsnmpagent.$(LIB_EXTENSION)$(LIB_VERSION):    ${LLIBAGENTOBJS} $(USELIBS)
+ 	$(LIB_LD_CMD) $(AGENTLIB) ${LLIBAGENTOBJS} $(USELIBS) ${LAGENTLIBS} @LD_NO_UNDEFINED@ $(LDFLAGS) $(PERLLDOPTS_FOR_LIBS) @AGENTLIBS@
+diff --git a/apps/Makefile.in b/apps/Makefile.in
+index 43f3b9c..d4529d3 100644
+--- a/apps/Makefile.in
++++ b/apps/Makefile.in
+@@ -190,7 +190,7 @@ snmptest$(EXEEXT):    snmptest.$(OSUFFIX) $(USELIBS)
+ 	$(LINK) ${CFLAGS} -o $@ snmptest.$(OSUFFIX) ${LDFLAGS} ${LIBS}
+ 
+ snmptrapd$(EXEEXT):    $(TRAPD_OBJECTS) $(USETRAPLIBS) $(INSTALLLIBS)
+-	$(LINK) ${CFLAGS} -o $@ $(TRAPD_OBJECTS) $(INSTALLLIBS) ${LDFLAGS} ${TRAPLIBS}
++	$(LINK) ${CFLAGS} -o $@ -pie $(TRAPD_OBJECTS) $(INSTALLLIBS) ${LDFLAGS} ${TRAPLIBS}
+ 
+ snmptrap$(EXEEXT):    snmptrap.$(OSUFFIX) $(USELIBS)
+ 	$(LINK) ${CFLAGS} -o $@ snmptrap.$(OSUFFIX) ${LDFLAGS} ${LIBS}
diff --git a/SOURCES/net-snmp-5.9-python3.patch b/SOURCES/net-snmp-5.9-python3.patch
new file mode 100644
index 0000000..98de4ca
--- /dev/null
+++ b/SOURCES/net-snmp-5.9-python3.patch
@@ -0,0 +1,38 @@
+diff --git a/Makefile.in b/Makefile.in
+index 912f6b2..862fb5f 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -227,7 +227,7 @@ perlcleanfeatures:
+ 
+ # python specific build rules
+ #
+-PYMAKE=$(PYTHON) setup.py $(PYTHONARGS)
++PYMAKE=/usr/bin/python3 setup.py $(PYTHONARGS)
+ pythonmodules: subdirs
+ 	@(dir=`pwd`; cd python; $(PYMAKE) build --basedir=$$dir) ; \
+         if test $$? != 0 ; then \
+diff --git a/python/netsnmp/client.py b/python/netsnmp/client.py
+index daf11a4..3a30a64 100644
+--- a/python/netsnmp/client.py
++++ b/python/netsnmp/client.py
+@@ -56,7 +56,7 @@ class Varbind(object):
+     def __init__(self, tag=None, iid=None, val=None, type_arg=None):
+         self.tag = STR(tag)
+         self.iid = STR(iid)
+-        self.val = STR(val)
++        self.val = val
+         self.type = STR(type_arg)
+         # parse iid out of tag if needed
+         if iid is None and tag is not None:
+@@ -66,7 +66,10 @@ class Varbind(object):
+                 (self.tag, self.iid) = match.group(1, 2)
+ 
+     def __setattr__(self, name, val):
+-        self.__dict__[name] = STR(val)
++        if name == 'val':
++            self.__dict__[name] = val
++        else:
++            self.__dict__[name] = STR(val)
+ 
+     def __str__(self):
+         return obj_to_str(self)
diff --git a/SOURCES/net-snmp-5.9-test-debug.patch b/SOURCES/net-snmp-5.9-test-debug.patch
new file mode 100644
index 0000000..85832a1
--- /dev/null
+++ b/SOURCES/net-snmp-5.9-test-debug.patch
@@ -0,0 +1,110 @@
+diff --git a/testing/fulltests/default/T070com2sec_simple b/testing/fulltests/default/T070com2sec_simple
+index 6c07f74..7df0b51 100644
+--- a/testing/fulltests/default/T070com2sec_simple
++++ b/testing/fulltests/default/T070com2sec_simple
+@@ -134,34 +134,30 @@ SAVECHECKAGENT '<"c406a", 255.255.255.255/255.255.255.255> => "t406a"'
+ SAVECHECKAGENT 'line 30: Error:' # msg from h_strerror so it varies
+ SAVECHECKAGENT 'line 31: Error:' # msg from h_strerror so it varies
+ 
+-if false; then
+-  # The two tests below have been disabled because these rely on resolving a
+-  # domain name into a local IP address. Such DNS replies are filtered out by
+-  # many security devices because to avoid DNS rebinding attacks. See also
+-  # https://en.wikipedia.org/wiki/DNS_rebinding.
+-
+-  CHECKAGENT '<"c408a"'
+-  if [ "$snmp_last_test_result" -eq 0 ] ; then
+-    CHECKAGENT 'line 32: Error:'
+-    if [ "$snmp_last_test_result" -ne 1 ] ; then
+-      return_value=1
+-      FINISHED
+-    fi
+-  elif [ "$snmp_last_test_result" -ne 1 ] ; then
++FINISHED
++
++# don't test the rest, it depends on DNS, which is not available in Koji
++
++CHECKAGENT '<"c408a"'
++if [ "$snmp_last_test_result" -eq 0 ] ; then
++  CHECKAGENT 'line 32: Error:'
++  if [ "$snmp_last_test_result" -ne 1 ] ; then
+     return_value=1
+     FINISHED
+   fi
++elif [ "$snmp_last_test_result" -ne 1 ] ; then
++  return_value=1
++  FINISHED
++fi
+ 
+-  CHECKAGENT '<"c408b"'
+-  if [ "$snmp_last_test_result" -eq 0 ] ; then
+-    CHECKAGENT 'line 33: Error:'
+-    if [ "$snmp_last_test_result" -ne 1 ] ; then
+-      return_value=1
+-    fi
+-  elif [ "$snmp_last_test_result" -ne 1 ] ; then
++CHECKAGENT '<"c408b"'
++if [ "$snmp_last_test_result" -eq 0 ] ; then
++  CHECKAGENT 'line 33: Error:'
++  if [ "$snmp_last_test_result" -ne 1 ] ; then
+     return_value=1
+   fi
+-
++elif [ "$snmp_last_test_result" -ne 1 ] ; then
++  return_value=1
+ fi
+ 
+ FINISHED
+diff --git a/testing/fulltests/default/T071com2sec6_simple b/testing/fulltests/default/T071com2sec6_simple
+index 76da70b..bc2d432 100644
+--- a/testing/fulltests/default/T071com2sec6_simple
++++ b/testing/fulltests/default/T071com2sec6_simple
+@@ -132,30 +132,27 @@ SAVECHECKAGENT '<"c606a", ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/ffff:ffff:ffff
+ SAVECHECKAGENT 'line 27: Error:'
+ SAVECHECKAGENT 'line 28: Error:'
+ 
+-if false; then
+-  # The two tests below have been disabled because these rely on resolving a
+-  # domain name into a local IP address. Such DNS replies are filtered out by
+-  # many security devices because to avoid DNS rebinding attacks. See also
+-  # https://en.wikipedia.org/wiki/DNS_rebinding.
+-
+-  # 608
+-  CHECKAGENT '<"c608a"'
+-  if [ "$snmp_last_test_result" -eq 0 ] ; then
+-    CHECKAGENT 'line 29: Error:'
+-    errnum=`expr $errnum - 1`
+-    if [ "$snmp_last_test_result" -ne 1 ] ; then
+-      FINISHED
+-    fi
+-  elif [ "$snmp_last_test_result" -ne 1 ] ; then
++FINISHED
++
++# don't test the rest, it depends on DNS, which is not available in Koji
++
++# 608
++CHECKAGENT '<"c608a"'
++if [ "$snmp_last_test_result" -eq 0 ] ; then
++  CHECKAGENT 'line 29: Error:'
++  errnum=`expr $errnum - 1`
++  if [ "$snmp_last_test_result" -ne 1 ] ; then
+     FINISHED
+   fi
++elif [ "$snmp_last_test_result" -ne 1 ] ; then
++  FINISHED
++fi
+ 
+-  CHECKAGENTCOUNT atleastone '<"c608b"'
+-  if [ "$snmp_last_test_result" -eq 0 ] ; then
+-    CHECKAGENT 'line 30: Error:'
+-    if [ "$snmp_last_test_result" -eq 1 ] ; then
+-      errnum=`expr $errnum - 1`
+-    fi
++CHECKAGENTCOUNT atleastone '<"c608b"'
++if [ "$snmp_last_test_result" -eq 0 ] ; then
++  CHECKAGENT 'line 30: Error:'
++  if [ "$snmp_last_test_result" -eq 1 ] ; then
++    errnum=`expr $errnum - 1`
+   fi
+ fi
+ 
diff --git a/SOURCES/net-snmp-5.9-twice-IP-parsing.patch b/SOURCES/net-snmp-5.9-twice-IP-parsing.patch
new file mode 100644
index 0000000..7e62c02
--- /dev/null
+++ b/SOURCES/net-snmp-5.9-twice-IP-parsing.patch
@@ -0,0 +1,16 @@
+diff --git a/snmplib/transports/snmpUDPIPv6Domain.c b/snmplib/transports/snmpUDPIPv6Domain.c
+index e6f5b20..41a5e01 100644
+--- a/snmplib/transports/snmpUDPIPv6Domain.c
++++ b/snmplib/transports/snmpUDPIPv6Domain.c
+@@ -34,6 +34,11 @@
+ #if HAVE_SYS_SOCKET_H
+ #include <sys/socket.h>
+ #endif
++
++#if defined(HAVE_WINSOCK_H) && !defined(mingw32)
++static const struct in6_addr in6addr_any = IN6ADDR_ANY_INIT;
++#endif
++
+ #if HAVE_NETINET_IN_H
+ #include <netinet/in.h>
+ #endif
diff --git a/SOURCES/net-snmp-5.9-usage-exit.patch b/SOURCES/net-snmp-5.9-usage-exit.patch
new file mode 100644
index 0000000..c43c846
--- /dev/null
+++ b/SOURCES/net-snmp-5.9-usage-exit.patch
@@ -0,0 +1,12 @@
+diff --git a/agent/snmpd.c b/agent/snmpd.c
+index ae73eda..f01b890 100644
+--- a/agent/snmpd.c
++++ b/agent/snmpd.c
+@@ -289,6 +289,7 @@ usage(char *prog)
+            "  -S d|i|0-7\t\tuse -Ls <facility> instead\n"
+            "\n"
+            );
++           exit(1);
+ }
+ 
+ static void
diff --git a/SOURCES/net-snmp-5.9.1-python-usenumeric.patch b/SOURCES/net-snmp-5.9.1-python-usenumeric.patch
new file mode 100644
index 0000000..2f1d1ae
--- /dev/null
+++ b/SOURCES/net-snmp-5.9.1-python-usenumeric.patch
@@ -0,0 +1,60 @@
+From 8c1dad23301692799749d75a3c039b8ae7c07f8e Mon Sep 17 00:00:00 2001
+From: Bart Van Assche <bvanassche@acm.org>
+Date: Wed, 9 Jun 2021 14:19:46 -0700
+Subject: [PATCH] Python: Fix snmpwalk with UseNumeric=1
+
+Fixes: c744be5ffed6 ("Python: Introduce build_python_varbind()")
+Fixes: https://github.com/net-snmp/net-snmp/issues/303
+---
+ python/netsnmp/client_intf.c | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+diff --git a/python/netsnmp/client_intf.c b/python/netsnmp/client_intf.c
+index e5e7372303..94da39fe34 100644
+--- a/python/netsnmp/client_intf.c
++++ b/python/netsnmp/client_intf.c
+@@ -1316,7 +1316,7 @@ netsnmp_delete_session(PyObject *self, PyObject *args)
+ 
+ static int build_python_varbind(PyObject *varbind, netsnmp_variable_list *vars,
+                                 int varlist_ind, int sprintval_flag, int *len,
+-                                char **str_buf)
++                                char **str_buf, int getlabel_flag)
+ {
+     struct tree *tp;
+     int type;
+@@ -1326,7 +1326,6 @@ static int build_python_varbind(PyObject *varbind, netsnmp_variable_list *vars,
+     int buf_over = 0;
+     const char *tag;
+     const char *iid;
+-    int getlabel_flag = NO_FLAGS;
+ 
+     if (!PyObject_HasAttrString(varbind, "tag"))
+         return TYPE_OTHER;
+@@ -1523,7 +1522,7 @@ netsnmp_get_or_getnext(PyObject *self, PyObject *args, int pdu_type,
+ 
+       varbind = PySequence_GetItem(varlist, varlist_ind);
+       type = build_python_varbind(varbind, vars, varlist_ind, sprintval_flag,
+-                                  &len, &str_buf);
++                                  &len, &str_buf, getlabel_flag);
+       if (type != TYPE_OTHER) {
+           /* save in return tuple as well */
+           if ((type == SNMP_ENDOFMIBVIEW) ||
+@@ -1832,7 +1831,7 @@ netsnmp_walk(PyObject *self, PyObject *args)
+ 
+               varbind = py_netsnmp_construct_varbind();
+               if (varbind && build_python_varbind(varbind, vars, varlist_ind,
+-                                       sprintval_flag, &len, &str_buf) !=
++                                       sprintval_flag, &len, &str_buf, getlabel_flag) !=
+                   TYPE_OTHER) {
+                   const int hex = is_hex(str_buf, len);
+ 
+@@ -2055,7 +2054,7 @@ netsnmp_getbulk(PyObject *self, PyObject *args)
+ 
+ 	  varbind = py_netsnmp_construct_varbind();
+           if (varbind && build_python_varbind(varbind, vars, varbind_ind,
+-                              sprintval_flag, &len, &str_buf) != TYPE_OTHER) {
++                              sprintval_flag, &len, &str_buf, getlabel_flag) != TYPE_OTHER) {
+             const int hex = is_hex(str_buf, len);
+ 
+             /* push varbind onto varbinds */
+
diff --git a/SOURCES/net-snmp-config b/SOURCES/net-snmp-config
new file mode 100755
index 0000000..a001eef
--- /dev/null
+++ b/SOURCES/net-snmp-config
@@ -0,0 +1,62 @@
+#!/bin/sh
+#
+# net-snmp-config
+#
+# this shell script is designed to merely dump the configuration
+# information about how the net-snmp package was compiled.  The
+# information is particularily useful for applications that need to
+# link against the net-snmp libraries and hence must know about any
+# other libraries that must be linked in as well.
+
+# this particular shell script calls arch specific script to avoid
+# multilib conflicts
+
+# Supported arches ix86 ia64 ppc ppc64 s390 s390x x86_64 alpha sparc sparc64
+
+arch=`arch`
+echo $arch | grep -q i.86
+if [ $? -eq 0 ] ; then
+    net-snmp-config-i386 "$@"
+    exit 0
+fi
+if [ "$arch" = "ia64" ] ; then
+    net-snmp-config-ia64 "$@"
+    exit 0
+fi
+if [ "$arch" = "ppc" ] ; then
+    net-snmp-config-ppc "$@"
+    exit 0
+fi
+if [ "$arch" = "ppc64" ] ; then
+    net-snmp-config-ppc64 "$@"
+    exit 0
+fi
+if [ "$arch" = "s390" ] ; then
+    net-snmp-config-s390 "$@"
+    exit 0
+fi
+if [ "$arch" = "s390x" ] ; then
+    net-snmp-config-s390x "$@"
+    exit 0
+fi
+if [ "$arch" = "x86_64" ] ; then
+    net-snmp-config-x86_64 "$@"
+    exit 0
+fi
+if [ "$arch" = "alpha" ] ; then
+    net-snmp-config-alpha "$@"
+    exit 0
+fi
+if [ "$arch" = "sparc" ] ; then
+    net-snmp-config-sparc "$@"
+    exit 0
+fi
+if [ "$arch" = "sparc64" ] ; then
+    net-snmp-config-sparc64 "$@"
+    exit 0
+fi
+if [ "$arch" = "aarch64" ] ; then
+    net-snmp-config-aarch64 "$@"
+    exit 0
+fi
+echo "Cannot determine architecture"
diff --git a/SOURCES/net-snmp-config.h b/SOURCES/net-snmp-config.h
new file mode 100644
index 0000000..b8f44d5
--- /dev/null
+++ b/SOURCES/net-snmp-config.h
@@ -0,0 +1,38 @@
+/* This file is here to prevent a file conflict on multiarch systems.  A
+ * conflict will frequently occur because arch-specific build-time
+ * configuration options are stored (and used, so they can't just be stripped
+ * out) in net-snmp-config.h.  The original net-snmp-config.h has been renamed.
+ * DO NOT INCLUDE THE NEW FILE DIRECTLY -- ALWAYS INCLUDE THIS ONE INSTEAD. */
+
+#ifdef net_snmp_config_multilib_redirection_h
+#error "Do not define net_snmp_config_multilib_redirection_h!"
+#endif
+#define net_snmp_config_multilib_redirection_h
+
+#if defined(__i386__)
+#include "net-snmp-config-i386.h"
+#elif defined(__ia64__)
+#include "net-snmp-config-ia64.h"
+#elif defined(__powerpc64__)
+#include "net-snmp-config-ppc64.h"
+#elif defined(__powerpc__)
+#include "net-snmp-config-ppc.h"
+#elif defined(__s390x__)
+#include "net-snmp-config-s390x.h"
+#elif defined(__s390__)
+#include "net-snmp-config-s390.h"
+#elif defined(__x86_64__)
+#include "net-snmp-config-x86_64.h"
+#elif defined(__alpha__)
+#include "net-snmp-config-alpha.h"
+#elif defined(__sparc__) && defined (__arch64__)
+#include "net-snmp-config-sparc64.h"
+#elif defined(__sparc__)
+#include "net-snmp-config-sparc.h"
+#elif defined(__aarch64__)
+#include "net-snmp-config-aarch64.h"
+#else
+#error "net-snmp-devel package does not work on your architecture"
+#endif
+
+#undef net_snmp_config_multilib_redirection_h
diff --git a/SOURCES/net-snmp-tmpfs.conf b/SOURCES/net-snmp-tmpfs.conf
new file mode 100644
index 0000000..9f782d6
--- /dev/null
+++ b/SOURCES/net-snmp-tmpfs.conf
@@ -0,0 +1 @@
+d	/run/net-snmp	0755	root	root
diff --git a/SOURCES/net-snmp-trapd.redhat.conf b/SOURCES/net-snmp-trapd.redhat.conf
new file mode 100644
index 0000000..72ce1cc
--- /dev/null
+++ b/SOURCES/net-snmp-trapd.redhat.conf
@@ -0,0 +1,6 @@
+# Example configuration file for snmptrapd
+#
+# No traps are handled by default, you must edit this file!
+#
+# authCommunity   log,execute,net public
+# traphandle SNMPv2-MIB::coldStart    /usr/bin/bin/my_great_script cold
diff --git a/SOURCES/net-snmp.redhat.conf b/SOURCES/net-snmp.redhat.conf
new file mode 100644
index 0000000..4d3a7f2
--- /dev/null
+++ b/SOURCES/net-snmp.redhat.conf
@@ -0,0 +1,462 @@
+###############################################################################
+#
+# snmpd.conf:
+#   An example configuration file for configuring the ucd-snmp snmpd agent.
+#
+###############################################################################
+#
+# This file is intended to only be as a starting point.  Many more
+# configuration directives exist than are mentioned in this file.  For 
+# full details, see the snmpd.conf(5) manual page.
+#
+# All lines beginning with a '#' are comments and are intended for you
+# to read.  All other lines are configuration commands for the agent.
+
+###############################################################################
+# Access Control
+###############################################################################
+
+# As shipped, the snmpd demon will only respond to queries on the
+# system mib group until this file is replaced or modified for
+# security purposes.  Examples are shown below about how to increase the
+# level of access.
+
+# By far, the most common question I get about the agent is "why won't
+# it work?", when really it should be "how do I configure the agent to
+# allow me to access it?"
+#
+# By default, the agent responds to the "public" community for read
+# only access, if run out of the box without any configuration file in 
+# place.  The following examples show you other ways of configuring
+# the agent so that you can change the community names, and give
+# yourself write access to the mib tree as well.
+#
+# For more information, read the FAQ as well as the snmpd.conf(5)
+# manual page.
+
+####
+# First, map the community name "public" into a "security name"
+
+#       sec.name  source          community
+#com2sec notConfigUser  default       public
+
+####
+# Second, map the security name into a group name:
+
+#       groupName      securityModel securityName
+#group   notConfigGroup v1           notConfigUser
+#group   notConfigGroup v2c           notConfigUser
+
+####
+# Third, create a view for us to let the group have rights to:
+
+# Make at least  snmpwalk -v 1 localhost -c public system fast again.
+#       name           incl/excl     subtree         mask(optional)
+view    systemview    included   .1.3.6.1.2.1.1
+view    systemview    included   .1.3.6.1.2.1.25.1.1
+
+####
+# Finally, grant the group read-only access to the systemview view.
+
+#       group          context sec.model sec.level prefix read   write  notif
+access  notConfigGroup ""      any       noauth    exact  systemview none none
+
+# -----------------------------------------------------------------------------
+
+# Here is a commented out example configuration that allows less
+# restrictive access.
+
+# YOU SHOULD CHANGE THE "COMMUNITY" TOKEN BELOW TO A NEW KEYWORD ONLY
+# KNOWN AT YOUR SITE.  YOU *MUST* CHANGE THE NETWORK TOKEN BELOW TO
+# SOMETHING REFLECTING YOUR LOCAL NETWORK ADDRESS SPACE.
+
+##       sec.name  source          community
+#com2sec local     localhost       COMMUNITY
+#com2sec mynetwork NETWORK/24      COMMUNITY
+
+##     group.name sec.model  sec.name
+#group MyRWGroup  any        local
+#group MyROGroup  any        mynetwork
+#
+#group MyRWGroup  any        otherv3user
+#...
+
+##           incl/excl subtree                          mask
+#view all    included  .1                               80
+
+## -or just the mib2 tree-
+
+#view mib2   included  .iso.org.dod.internet.mgmt.mib-2 fc
+
+
+##                context sec.model sec.level prefix read   write  notif
+#access MyROGroup ""      any       noauth    0      all    none   none
+#access MyRWGroup ""      any       noauth    0      all    all    all
+
+
+###############################################################################
+# Sample configuration to make net-snmpd RFC 1213.
+# Unfortunately v1 and v2c don't allow any user based authentification, so
+# opening up the default config is not an option from a security point.
+#
+# WARNING: If you uncomment the following lines you allow write access to your
+# snmpd daemon from any source! To avoid this use different names for your
+# community or split out the write access to a different community and 
+# restrict it to your local network.
+# Also remember to comment the syslocation and syscontact parameters later as
+# otherwise they are still read only (see FAQ for net-snmp).
+#
+
+# First, map the community name "public" into a "security name"
+#       sec.name        source          community
+#com2sec notConfigUser   default         public
+
+# Second, map the security name into a group name:
+#       groupName       securityModel   securityName
+#group   notConfigGroup  v1              notConfigUser
+#group   notConfigGroup  v2c             notConfigUser
+
+# Third, create a view for us to let the group have rights to:
+# Open up the whole tree for ro, make the RFC 1213 required ones rw.
+#       name            incl/excl       subtree mask(optional)
+#view    roview          included        .1
+#view    rwview          included        system.sysContact
+#view    rwview          included        system.sysName
+#view    rwview          included        system.sysLocation
+#view    rwview          included        interfaces.ifTable.ifEntry.ifAdminStatus
+#view    rwview          included        at.atTable.atEntry.atPhysAddress
+#view    rwview          included        at.atTable.atEntry.atNetAddress
+#view    rwview          included        ip.ipForwarding
+#view    rwview          included        ip.ipDefaultTTL
+#view    rwview          included        ip.ipRouteTable.ipRouteEntry.ipRouteDest
+#view    rwview          included        ip.ipRouteTable.ipRouteEntry.ipRouteIfIndex
+#view    rwview          included        ip.ipRouteTable.ipRouteEntry.ipRouteMetric1
+#view    rwview          included        ip.ipRouteTable.ipRouteEntry.ipRouteMetric2
+#view    rwview          included        ip.ipRouteTable.ipRouteEntry.ipRouteMetric3
+#view    rwview          included        ip.ipRouteTable.ipRouteEntry.ipRouteMetric4
+#view    rwview          included        ip.ipRouteTable.ipRouteEntry.ipRouteType
+#view    rwview          included        ip.ipRouteTable.ipRouteEntry.ipRouteAge
+#view    rwview          included        ip.ipRouteTable.ipRouteEntry.ipRouteMask
+#view    rwview          included        ip.ipRouteTable.ipRouteEntry.ipRouteMetric5
+#view    rwview          included        ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaIfIndex
+#view    rwview          included        ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaPhysAddress
+#view    rwview          included        ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaNetAddress
+#view    rwview          included        ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaType
+#view    rwview          included        tcp.tcpConnTable.tcpConnEntry.tcpConnState
+#view    rwview          included        egp.egpNeighTable.egpNeighEntry.egpNeighEventTrigger
+#view    rwview          included        snmp.snmpEnableAuthenTraps
+
+# Finally, grant the group read-only access to the systemview view.
+#       group          context sec.model sec.level prefix read   write  notif
+#access  notConfigGroup ""      any       noauth    exact  roview rwview none
+
+
+
+###############################################################################
+# System contact information
+#
+
+# It is also possible to set the sysContact and sysLocation system
+# variables through the snmpd.conf file:
+
+syslocation Unknown (edit /etc/snmp/snmpd.conf)
+syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
+
+# Example output of snmpwalk:
+#   % snmpwalk -v 1 localhost -c public system
+#   system.sysDescr.0 = "SunOS name sun4c"
+#   system.sysObjectID.0 = OID: enterprises.ucdavis.ucdSnmpAgent.sunos4
+#   system.sysUpTime.0 = Timeticks: (595637548) 68 days, 22:32:55
+#   system.sysContact.0 = "Me <me@somewhere.org>"
+#   system.sysName.0 = "name"
+#   system.sysLocation.0 = "Right here, right now."
+#   system.sysServices.0 = 72
+
+
+###############################################################################
+# Logging
+#
+
+# We do not want annoying "Connection from UDP: " messages in syslog.
+# If the following option is commented out, snmpd will print each incoming
+# connection, which can be useful for debugging.
+
+dontLogTCPWrappersConnects yes
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# Process checks.
+#
+#  The following are examples of how to use the agent to check for
+#  processes running on the host.  The syntax looks something like:
+#
+#  proc NAME [MAX=0] [MIN=0]
+#
+#  NAME:  the name of the process to check for.  It must match
+#         exactly (ie, http will not find httpd processes).
+#  MAX:   the maximum number allowed to be running.  Defaults to 0.
+#  MIN:   the minimum number to be running.  Defaults to 0.
+
+#
+#  Examples (commented out by default):
+#
+
+#  Make sure mountd is running
+#proc mountd
+
+#  Make sure there are no more than 4 ntalkds running, but 0 is ok too.
+#proc ntalkd 4
+
+#  Make sure at least one sendmail, but less than or equal to 10 are running.
+#proc sendmail 10 1
+
+#  A snmpwalk of the process mib tree would look something like this:
+# 
+# % snmpwalk -v 1 localhost -c public .1.3.6.1.4.1.2021.2
+# enterprises.ucdavis.procTable.prEntry.prIndex.1 = 1
+# enterprises.ucdavis.procTable.prEntry.prIndex.2 = 2
+# enterprises.ucdavis.procTable.prEntry.prIndex.3 = 3
+# enterprises.ucdavis.procTable.prEntry.prNames.1 = "mountd"
+# enterprises.ucdavis.procTable.prEntry.prNames.2 = "ntalkd"
+# enterprises.ucdavis.procTable.prEntry.prNames.3 = "sendmail"
+# enterprises.ucdavis.procTable.prEntry.prMin.1 = 0
+# enterprises.ucdavis.procTable.prEntry.prMin.2 = 0
+# enterprises.ucdavis.procTable.prEntry.prMin.3 = 1
+# enterprises.ucdavis.procTable.prEntry.prMax.1 = 0
+# enterprises.ucdavis.procTable.prEntry.prMax.2 = 4
+# enterprises.ucdavis.procTable.prEntry.prMax.3 = 10
+# enterprises.ucdavis.procTable.prEntry.prCount.1 = 0
+# enterprises.ucdavis.procTable.prEntry.prCount.2 = 0
+# enterprises.ucdavis.procTable.prEntry.prCount.3 = 1
+# enterprises.ucdavis.procTable.prEntry.prErrorFlag.1 = 1
+# enterprises.ucdavis.procTable.prEntry.prErrorFlag.2 = 0
+# enterprises.ucdavis.procTable.prEntry.prErrorFlag.3 = 0
+# enterprises.ucdavis.procTable.prEntry.prErrMessage.1 = "No mountd process running."
+# enterprises.ucdavis.procTable.prEntry.prErrMessage.2 = ""
+# enterprises.ucdavis.procTable.prEntry.prErrMessage.3 = ""
+# enterprises.ucdavis.procTable.prEntry.prErrFix.1 = 0
+# enterprises.ucdavis.procTable.prEntry.prErrFix.2 = 0
+# enterprises.ucdavis.procTable.prEntry.prErrFix.3 = 0
+#
+#  Note that the errorFlag for mountd is set to 1 because one is not
+#  running (in this case an rpc.mountd is, but thats not good enough),
+#  and the ErrMessage tells you what's wrong.  The configuration
+#  imposed in the snmpd.conf file is also shown.  
+# 
+#  Special Case:  When the min and max numbers are both 0, it assumes
+#  you want a max of infinity and a min of 1.
+#
+
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# Executables/scripts
+#
+
+#
+#  You can also have programs run by the agent that return a single
+#  line of output and an exit code.  Here are two examples.
+#
+#  exec NAME PROGRAM [ARGS ...]
+#
+#  NAME:     A generic name. The name must be unique for each exec statement.
+#  PROGRAM:  The program to run.  Include the path!
+#  ARGS:     optional arguments to be passed to the program
+
+# a simple hello world
+
+#exec echotest /bin/echo hello world
+
+# Run a shell script containing:
+#
+# #!/bin/sh
+# echo hello world
+# echo hi there
+# exit 35
+#
+# Note:  this has been specifically commented out to prevent
+# accidental security holes due to someone else on your system writing
+# a /tmp/shtest before you do.  Uncomment to use it.
+#
+#exec shelltest /bin/sh /tmp/shtest
+
+# Then, 
+# % snmpwalk -v 1 localhost -c public .1.3.6.1.4.1.2021.8
+# enterprises.ucdavis.extTable.extEntry.extIndex.1 = 1
+# enterprises.ucdavis.extTable.extEntry.extIndex.2 = 2
+# enterprises.ucdavis.extTable.extEntry.extNames.1 = "echotest"
+# enterprises.ucdavis.extTable.extEntry.extNames.2 = "shelltest"
+# enterprises.ucdavis.extTable.extEntry.extCommand.1 = "/bin/echo hello world"
+# enterprises.ucdavis.extTable.extEntry.extCommand.2 = "/bin/sh /tmp/shtest"
+# enterprises.ucdavis.extTable.extEntry.extResult.1 = 0
+# enterprises.ucdavis.extTable.extEntry.extResult.2 = 35
+# enterprises.ucdavis.extTable.extEntry.extOutput.1 = "hello world."
+# enterprises.ucdavis.extTable.extEntry.extOutput.2 = "hello world."
+# enterprises.ucdavis.extTable.extEntry.extErrFix.1 = 0
+# enterprises.ucdavis.extTable.extEntry.extErrFix.2 = 0
+
+# Note that the second line of the /tmp/shtest shell script is cut
+# off.  Also note that the exit status of 35 was returned.
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# disk checks
+#
+
+# The agent can check the amount of available disk space, and make
+# sure it is above a set limit.  
+
+# disk PATH [MIN=100000]
+#
+# PATH:  mount path to the disk in question.
+# MIN:   Disks with space below this value will have the Mib's errorFlag set.
+#        Default value = 100000.
+
+# Check the / partition and make sure it contains at least 10 megs.
+
+#disk / 10000
+
+# % snmpwalk -v 1 localhost -c public .1.3.6.1.4.1.2021.9
+# enterprises.ucdavis.diskTable.dskEntry.diskIndex.1 = 0
+# enterprises.ucdavis.diskTable.dskEntry.diskPath.1 = "/" Hex: 2F 
+# enterprises.ucdavis.diskTable.dskEntry.diskDevice.1 = "/dev/dsk/c201d6s0"
+# enterprises.ucdavis.diskTable.dskEntry.diskMinimum.1 = 10000
+# enterprises.ucdavis.diskTable.dskEntry.diskTotal.1 = 837130
+# enterprises.ucdavis.diskTable.dskEntry.diskAvail.1 = 316325
+# enterprises.ucdavis.diskTable.dskEntry.diskUsed.1 = 437092
+# enterprises.ucdavis.diskTable.dskEntry.diskPercent.1 = 58
+# enterprises.ucdavis.diskTable.dskEntry.diskErrorFlag.1 = 0
+# enterprises.ucdavis.diskTable.dskEntry.diskErrorMsg.1 = ""
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# load average checks
+#
+
+# load [1MAX=12.0] [5MAX=12.0] [15MAX=12.0]
+#
+# 1MAX:   If the 1 minute load average is above this limit at query
+#         time, the errorFlag will be set.
+# 5MAX:   Similar, but for 5 min average.
+# 15MAX:  Similar, but for 15 min average.
+
+# Check for loads:
+#load 12 14 14
+
+# % snmpwalk -v 1 localhost -c public .1.3.6.1.4.1.2021.10
+# enterprises.ucdavis.loadTable.laEntry.loadaveIndex.1 = 1
+# enterprises.ucdavis.loadTable.laEntry.loadaveIndex.2 = 2
+# enterprises.ucdavis.loadTable.laEntry.loadaveIndex.3 = 3
+# enterprises.ucdavis.loadTable.laEntry.loadaveNames.1 = "Load-1"
+# enterprises.ucdavis.loadTable.laEntry.loadaveNames.2 = "Load-5"
+# enterprises.ucdavis.loadTable.laEntry.loadaveNames.3 = "Load-15"
+# enterprises.ucdavis.loadTable.laEntry.loadaveLoad.1 = "0.49" Hex: 30 2E 34 39 
+# enterprises.ucdavis.loadTable.laEntry.loadaveLoad.2 = "0.31" Hex: 30 2E 33 31 
+# enterprises.ucdavis.loadTable.laEntry.loadaveLoad.3 = "0.26" Hex: 30 2E 32 36 
+# enterprises.ucdavis.loadTable.laEntry.loadaveConfig.1 = "12.00"
+# enterprises.ucdavis.loadTable.laEntry.loadaveConfig.2 = "14.00"
+# enterprises.ucdavis.loadTable.laEntry.loadaveConfig.3 = "14.00"
+# enterprises.ucdavis.loadTable.laEntry.loadaveErrorFlag.1 = 0
+# enterprises.ucdavis.loadTable.laEntry.loadaveErrorFlag.2 = 0
+# enterprises.ucdavis.loadTable.laEntry.loadaveErrorFlag.3 = 0
+# enterprises.ucdavis.loadTable.laEntry.loadaveErrMessage.1 = ""
+# enterprises.ucdavis.loadTable.laEntry.loadaveErrMessage.2 = ""
+# enterprises.ucdavis.loadTable.laEntry.loadaveErrMessage.3 = ""
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# Extensible sections.
+# 
+
+# This alleviates the multiple line output problem found in the
+# previous executable mib by placing each mib in its own mib table:
+
+# Run a shell script containing:
+#
+# #!/bin/sh
+# echo hello world
+# echo hi there
+# exit 35
+#
+# Note:  this has been specifically commented out to prevent
+# accidental security holes due to someone else on your system writing
+# a /tmp/shtest before you do.  Uncomment to use it.
+#
+# exec .1.3.6.1.4.1.2021.50 shelltest /bin/sh /tmp/shtest
+
+# % snmpwalk -v 1 localhost -c public .1.3.6.1.4.1.2021.50
+# enterprises.ucdavis.50.1.1 = 1
+# enterprises.ucdavis.50.2.1 = "shelltest"
+# enterprises.ucdavis.50.3.1 = "/bin/sh /tmp/shtest"
+# enterprises.ucdavis.50.100.1 = 35
+# enterprises.ucdavis.50.101.1 = "hello world."
+# enterprises.ucdavis.50.101.2 = "hi there."
+# enterprises.ucdavis.50.102.1 = 0
+
+# Now the Output has grown to two lines, and we can see the 'hi
+# there.' output as the second line from our shell script.
+#
+# Note that you must alter the mib.txt file to be correct if you want
+# the .50.* outputs above to change to reasonable text descriptions.
+
+# Other ideas:
+# 
+# exec .1.3.6.1.4.1.2021.51 ps /bin/ps 
+# exec .1.3.6.1.4.1.2021.52 top /usr/local/bin/top
+# exec .1.3.6.1.4.1.2021.53 mailq /usr/bin/mailq
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# Pass through control.
+# 
+
+# Usage:
+#   pass MIBOID EXEC-COMMAND
+#
+# This will pass total control of the mib underneath the MIBOID
+# portion of the mib to the EXEC-COMMAND.  
+#
+# Note:  You'll have to change the path of the passtest script to your
+# source directory or install it in the given location.
+# 
+# Example:  (see the script for details)
+#           (commented out here since it requires that you place the
+#           script in the right location. (its not installed by default))
+
+# pass .1.3.6.1.4.1.2021.255 /bin/sh /usr/local/local/passtest
+
+# % snmpwalk -v 1 localhost -c public .1.3.6.1.4.1.2021.255
+# enterprises.ucdavis.255.1 = "life the universe and everything"
+# enterprises.ucdavis.255.2.1 = 42
+# enterprises.ucdavis.255.2.2 = OID: 42.42.42
+# enterprises.ucdavis.255.3 = Timeticks: (363136200) 42 days, 0:42:42
+# enterprises.ucdavis.255.4 = IpAddress: 127.0.0.1
+# enterprises.ucdavis.255.5 = 42
+# enterprises.ucdavis.255.6 = Gauge: 42
+#
+# % snmpget -v 1 localhost public .1.3.6.1.4.1.2021.255.5
+# enterprises.ucdavis.255.5 = 42
+#
+# % snmpset -v 1 localhost public .1.3.6.1.4.1.2021.255.1 s "New string"
+# enterprises.ucdavis.255.1 = "New string"
+#
+
+# For specific usage information, see the man/snmpd.conf.5 manual page
+# as well as the local/passtest script used in the above example.
+
+###############################################################################
+# Further Information
+#
+#  See the snmpd.conf manual page, and the output of "snmpd -H".
diff --git a/SOURCES/net-snmpd.sysconfig b/SOURCES/net-snmpd.sysconfig
new file mode 100644
index 0000000..6949ec0
--- /dev/null
+++ b/SOURCES/net-snmpd.sysconfig
@@ -0,0 +1,3 @@
+# snmpd command line options
+# '-f' is implicitly added by snmpd systemd unit file
+# OPTIONS="-LS0-6d"
diff --git a/SOURCES/net-snmptrapd.sysconfig b/SOURCES/net-snmptrapd.sysconfig
new file mode 100644
index 0000000..85e3128
--- /dev/null
+++ b/SOURCES/net-snmptrapd.sysconfig
@@ -0,0 +1,3 @@
+# snmptrapd command line options
+# '-f' is implicitly added by snmptrapd systemd unit file
+# OPTIONS="-Lsd"
diff --git a/SOURCES/snmpd.service b/SOURCES/snmpd.service
new file mode 100644
index 0000000..8f6cb2e
--- /dev/null
+++ b/SOURCES/snmpd.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Simple Network Management Protocol (SNMP) Daemon.
+After=syslog.target network-online.target
+
+[Service]
+Type=notify
+Environment=OPTIONS="-LS0-6d"
+EnvironmentFile=-/etc/sysconfig/snmpd
+ExecStart=/usr/sbin/snmpd $OPTIONS -f
+ExecReload=/bin/kill -HUP $MAINPID
+
+[Install]
+WantedBy=multi-user.target
diff --git a/SOURCES/snmptrapd.service b/SOURCES/snmptrapd.service
new file mode 100644
index 0000000..ec71e75
--- /dev/null
+++ b/SOURCES/snmptrapd.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Simple Network Management Protocol (SNMP) Trap Daemon.
+After=syslog.target network-online.target
+
+[Service]
+Type=notify
+Environment=OPTIONS="-Lsd"
+EnvironmentFile=-/etc/sysconfig/snmptrapd
+ExecStart=/usr/sbin/snmptrapd $OPTIONS -f
+ExecReload=/bin/kill -HUP $MAINPID
+
+[Install]
+WantedBy=multi-user.target
diff --git a/SPECS/net-snmp.spec b/SPECS/net-snmp.spec
new file mode 100644
index 0000000..e72f5b2
--- /dev/null
+++ b/SPECS/net-snmp.spec
@@ -0,0 +1,1979 @@
+# use nestnmp_check 0 to speed up packaging by disabling 'make test'
+%{!?netsnmp_check: %global netsnmp_check 1}
+
+# Arches on which we need to prevent arch conflicts on net-snmp-config.h
+%global multilib_arches %{ix86} ia64 ppc ppc64 s390 s390x x86_64 sparc sparcv9 sparc64 aarch64
+
+# actual soname version
+%global soname  40
+
+Summary:    A collection of SNMP protocol tools and libraries
+Name:       net-snmp
+Version:    5.9.1
+Release:    7%{?dist}
+Epoch:      1
+
+License:    BSD
+URL:        http://net-snmp.sourceforge.net/
+Source0:    https://downloads.sourceforge.net/project/net-snmp/net-snmp/%{version}/net-snmp-%{version}.tar.gz
+Source1:    net-snmp.redhat.conf
+Source2:    net-snmp-config.h
+Source3:    net-snmp-config
+Source4:    net-snmp-trapd.redhat.conf
+Source5:    net-snmpd.sysconfig
+Source6:    net-snmptrapd.sysconfig
+Source7:    net-snmp-tmpfs.conf
+Source8:    snmpd.service
+Source9:    snmptrapd.service
+Source10:   IETF-MIB-LICENSE.txt
+
+Patch1:     net-snmp-5.9-pie.patch
+Patch2:     net-snmp-5.9-dir-fix.patch
+Patch3:     net-snmp-5.9-multilib.patch
+Patch4:     net-snmp-5.9-test-debug.patch
+Patch5:     net-snmp-5.7.2-cert-path.patch
+Patch6:     net-snmp-5.9-cflags.patch
+Patch7:     net-snmp-5.8-Remove-U64-typedef.patch
+Patch8:     net-snmp-5.9-libnetsnmptrapd-against-MYSQL_LIBS.patch
+Patch9:     net-snmp-5.7.3-iterator-fix.patch
+Patch10:    net-snmp-5.9-autofs-skip.patch
+Patch11:    net-snmp-5.9-usage-exit.patch
+Patch12:    net-snmp-5.9-coverity.patch
+Patch13:    net-snmp-5.9-dskTable-dynamic.patch
+Patch14:    net-snmp-5.8-expand-SNMPCONFPATH.patch
+Patch15:    net-snmp-5.8-duplicate-ipAddress.patch
+Patch16:    net-snmp-5.9-memory-reporting.patch
+Patch17:    net-snmp-5.8-man-page.patch
+Patch18:    net-snmp-5.8-ipAddress-faster-load.patch
+Patch19:    net-snmp-5.8-rpm-memory-leak.patch
+Patch20:    net-snmp-5.9-aes-config.patch
+Patch21:    net-snmp-5.8-clientaddr-error-message.patch
+Patch22:    net-snmp-5.9-ECC-cert.patch
+Patch23:    net-snmp-5.9-intermediate-certs.patch
+Patch24:    net-snmp-5.9-twice-IP-parsing.patch
+Patch25:    net-snmp-5.9-openssl-3.0.patch
+
+# Modern RPM API means at least EL6
+Patch101:   net-snmp-5.8-modern-rpm-api.patch
+
+#disable this patch due compatibility issues
+Patch102:   net-snmp-5.9-python3.patch
+Patch103:   net-snmp-5.9.1-python-usenumeric.patch
+
+Requires:        %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release}
+Requires:        %{name}-agent-libs%{?_isa} = %{epoch}:%{version}-%{release}
+# This is actually needed for the %%triggerun script but Requires(triggerun)
+# is not valid.  We can use %%post because this particular %%triggerun script
+# should fire just after this package is installed.
+%{?systemd_requires}
+BuildRequires: make
+BuildRequires:   systemd
+BuildRequires:   gcc
+BuildRequires:   openssl-devel, bzip2-devel, elfutils-devel
+BuildRequires:   libselinux-devel, elfutils-libelf-devel, rpm-devel
+BuildRequires:   perl-devel, perl(ExtUtils::Embed), procps
+BuildRequires:   python3-devel, python3-setuptools
+BuildRequires:   chrpath
+BuildRequires:   mariadb-connector-c-devel
+# for netstat, needed by 'make test'
+BuildRequires:   net-tools
+# for make test
+BuildRequires:   perl(:VERSION) >= 5.6
+BuildRequires:   perl(AutoLoader)
+BuildRequires:   perl(blib)
+BuildRequires:   perl(Carp)
+BuildRequires:   perl(DynaLoader)
+BuildRequires:   perl(Exporter)
+BuildRequires:   perl(overload)
+BuildRequires:   perl(strict)
+BuildRequires:   perl(TAP::Harness)
+BuildRequires:   perl(vars)
+BuildRequires:   perl(warnings)
+%ifnarch s390 s390x ppc64le
+BuildRequires:   lm_sensors-devel >= 3
+%endif
+BuildRequires:   autoconf, automake
+
+%description
+SNMP (Simple Network Management Protocol) is a protocol used for
+network management. The NET-SNMP project includes various SNMP tools:
+an extensible agent, an SNMP library, tools for requesting or setting
+information from SNMP agents, tools for generating and handling SNMP
+traps, a version of the netstat command which uses SNMP, and a Tk/Perl
+mib browser. This package contains the snmpd and snmptrapd daemons,
+documentation, etc.
+
+You will probably also want to install the net-snmp-utils package,
+which contains NET-SNMP utilities.
+
+%package utils
+Summary:  Network management utilities using SNMP, from the NET-SNMP project
+Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release}
+
+%description utils
+The net-snmp-utils package contains various utilities for use with the
+NET-SNMP network management project.
+
+Install this package if you need utilities for managing your network
+using the SNMP protocol. You will also need to install the net-snmp
+package.
+
+%package devel
+Summary:  The development environment for the NET-SNMP project
+Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release}
+Requires: %{name}-agent-libs%{?_isa} = %{epoch}:%{version}-%{release}
+Requires: elfutils-devel, rpm-devel, elfutils-libelf-devel, openssl-devel
+%ifnarch s390 s390x ppc64le
+Requires: lm_sensors-devel
+%endif
+# pull perl development libraries, net-snmp agent libraries may link to them
+Requires: perl-devel%{?_isa}
+
+%description devel
+The net-snmp-devel package contains the development libraries and
+header files for use with the NET-SNMP project's network management
+tools.
+
+Install the net-snmp-devel package if you would like to develop
+applications for use with the NET-SNMP project's network management
+tools. You'll also need to have the net-snmp and net-snmp-utils
+packages installed.
+
+%package perl
+Summary:       The perl NET-SNMP module and the mib2c tool
+Requires:      %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release}, perl-interpreter
+Requires:      %{name}-agent-libs%{?_isa} = %{epoch}:%{version}-%{release}
+Requires:      %{name}-devel%{?_isa} = %{epoch}:%{version}-%{release}
+BuildRequires: perl-interpreter
+BuildRequires: perl-generators
+
+%description perl
+The net-snmp-perl package contains the perl files to use SNMP from within
+Perl.
+
+Install the net-snmp-perl package, if you want to use mib2c or SNMP 
+with perl.
+
+%package gui
+Summary:  An interactive graphical MIB browser for SNMP
+Requires: perl-Tk, net-snmp-perl%{?_isa} = %{epoch}:%{version}-%{release}
+
+%description gui
+The net-snmp-gui package contains tkmib utility, which is a graphical user 
+interface for browsing the Message Information Bases (MIBs). It is also 
+capable of sending or retrieving the SNMP management information to/from 
+the remote agents interactively.
+
+Install the net-snmp-gui package, if you want to use this interactive utility.
+
+%package libs
+Summary: The NET-SNMP runtime client libraries
+
+%description libs
+The net-snmp-libs package contains the runtime client libraries for shared
+binaries and applications.
+
+%package agent-libs
+Summary:   The NET-SNMP runtime agent libraries
+# the libs link against libperl.so:
+Requires:  perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
+Requires:  %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release}
+
+%description agent-libs
+The net-snmp-agent-libs package contains the runtime agent libraries for shared
+binaries and applications.
+
+%package -n python3-net-snmp
+%{?python_provide:%python_provide python3-net-snmp}
+# Remove before F30
+Provides:  %{name}-python = %{version}-%{release}
+Provides:  %{name}-python%{?_isa} = %{version}-%{release}
+Obsoletes: %{name}-python < %{version}-%{release}
+Summary:   The Python 'netsnmp' module for the Net-SNMP
+Requires:  %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release}
+
+%description -n python3-net-snmp
+The 'netsnmp' module provides a full featured, tri-lingual SNMP (SNMPv3, 
+SNMPv2c, SNMPv1) client API. The 'netsnmp' module internals rely on the
+Net-SNMP toolkit library.
+
+%prep
+%setup -q
+cp %{SOURCE10} .
+
+%ifnarch ia64
+%patch1 -p1 -b .pie
+%endif
+
+%patch2 -p1 -b .dir-fix
+%patch3 -p1 -b .multilib
+%patch4 -p1
+%patch5 -p1 -b .cert-path
+%patch6 -p1 -b .cflags
+%patch7 -p1 -b .u64-remove
+%patch8 -p1 -b .perlfix
+%patch9 -p1 -b .iterator-fix
+%patch10 -p1 -b .autofs-skip
+%patch11 -p1 -b .usage-fix
+%patch12 -p1 -b .coverity
+%patch13 -p1 -b .dskTable-dynamic
+%patch14 -p1 -b .expand-SNMPCONFPATH
+%patch15 -p1 -b .duplicate-ipAddress
+%patch16 -p1 -b .memory-reporting
+%patch17 -p1 -b .man-page
+%patch18 -p1 -b .ipAddress-faster-load
+%patch19 -p1 -b .rpm-memory-leak
+%patch20 -p1 -b .aes-config
+%patch21 -p1 -b .clientaddr-error-message
+%patch22 -p1 -b .ECC-cert
+%patch23 -p1 -b .intermediate-certs
+%patch24 -p1 -b .twice-IP-parsing
+%patch25 -p1 -b .openssl-3-0
+
+%patch101 -p1 -b .modern-rpm-api
+%patch102 -p1
+%patch103 -p1
+
+# disable failing test - see https://bugzilla.redhat.com/show_bug.cgi?id=680697
+rm testing/fulltests/default/T200*
+
+%build
+
+# Autoreconf to get autoconf 2.69 for ARM (#926223)
+autoreconf
+
+MIBS="host agentx smux \
+     ucd-snmp/diskio tcp-mib udp-mib mibII/mta_sendmail \
+     ip-mib/ipv4InterfaceTable ip-mib/ipv6InterfaceTable \
+     ip-mib/ipAddressPrefixTable/ipAddressPrefixTable \
+     ip-mib/ipDefaultRouterTable/ipDefaultRouterTable \
+     ip-mib/ipv6ScopeZoneIndexTable ip-mib/ipIfStatsTable \
+     sctp-mib rmon-mib etherlike-mib"
+
+%ifnarch s390 s390x ppc64le
+# there are no lm_sensors on s390
+MIBS="$MIBS ucd-snmp/lmsensorsMib"
+%endif
+
+%configure \
+    --disable-static --enable-shared \
+    --enable-as-needed \
+    --enable-blumenthal-aes \
+    --enable-embedded-perl \
+    --enable-ipv6 \
+    --enable-local-smux \
+    --enable-mfd-rewrites \
+    --enable-ucd-snmp-compatibility \
+    --disable-des \
+    --sysconfdir=%{_sysconfdir} \
+    --with-cflags="$RPM_OPT_FLAGS -fPIE" \
+    --with-ldflags="$RPM_LD_FLAGS -lm" \
+    --with-logfile="/var/log/snmpd.log" \
+    --with-mib-modules="$MIBS" \
+    --with-mysql \
+    --with-openssl \
+    --with-persistent-directory="/var/lib/net-snmp" \
+    --with-perl-modules="INSTALLDIRS=vendor" \
+    --with-pic \
+    --with-security-modules=tsm  \
+    --with-sys-location="Unknown" \
+    --with-systemd \
+    --with-temp-file-pattern=/run/net-snmp/snmp-tmp-XXXXXX \
+    --with-transports="DTLSUDP TLSTCP" \
+    --with-sys-contact="root@localhost" \
+    --without-pcre <<EOF
+EOF
+
+# store original libtool file, we will need it later
+cp libtool libtool.orig
+# remove rpath from libtool
+sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
+sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
+
+# the package is not %%_smp_mflags safe
+%{__make}
+
+# remove rpath from compiled perl libs
+find perl/blib -type f -name "*.so" -print -exec chrpath --delete {} \;
+
+# compile python module
+pushd python
+%{__python3} setup.py --basedir="../" build
+popd
+
+
+%install
+make install DESTDIR=%{buildroot}
+
+# Determine which arch net-snmp-config.h is going to try to #include.
+basearch=%{_arch}
+%ifarch %{ix86}
+basearch=i386
+%endif
+
+%ifarch %{multilib_arches}
+# Do an net-snmp-config.h switcheroo to avoid file conflicts on systems where you
+# can have both a 32- and 64-bit version of the library, as they each need
+# their own correct-but-different versions of net-snmp-config.h to be usable.
+mv %{buildroot}/%{_bindir}/net-snmp-config %{buildroot}/%{_bindir}/net-snmp-config-${basearch}
+install -m 755 %SOURCE3 %{buildroot}/%{_bindir}/net-snmp-config
+mv %{buildroot}/%{_includedir}/net-snmp/net-snmp-config.h %{buildroot}/%{_includedir}/net-snmp/net-snmp-config-${basearch}.h
+install -m644 %SOURCE2 %{buildroot}/%{_includedir}/net-snmp/net-snmp-config.h
+%endif
+
+install -d %{buildroot}%{_sysconfdir}/snmp
+install -m 644 %SOURCE1 %{buildroot}%{_sysconfdir}/snmp/snmpd.conf
+install -m 644 %SOURCE4 %{buildroot}%{_sysconfdir}/snmp/snmptrapd.conf
+
+install -d %{buildroot}%{_sysconfdir}/sysconfig
+install -m 644 %SOURCE5 %{buildroot}%{_sysconfdir}/sysconfig/snmpd
+install -m 644 %SOURCE6 %{buildroot}%{_sysconfdir}/sysconfig/snmptrapd
+
+# prepare /var/lib/net-snmp
+install -d %{buildroot}%{_localstatedir}/lib/net-snmp
+install -d %{buildroot}%{_localstatedir}/lib/net-snmp/mib_indexes
+install -d %{buildroot}%{_localstatedir}/lib/net-snmp/cert_indexes
+install -d %{buildroot}%{_localstatedir}/run/net-snmp
+
+# remove things we don't want to distribute
+rm -f %{buildroot}%{_bindir}/snmpinform
+ln -s snmptrap %{buildroot}/usr/bin/snmpinform
+rm -f %{buildroot}%{_bindir}/snmpcheck
+rm -f %{buildroot}/%{_bindir}/fixproc
+rm -f %{buildroot}/%{_mandir}/man1/fixproc*
+rm -f %{buildroot}/%{_bindir}/ipf-mod.pl
+rm -f %{buildroot}/%{_libdir}/*.la
+rm -f %{buildroot}/%{_libdir}/libsnmp*
+
+# remove special perl files
+find %{buildroot} -name perllocal.pod \
+    -o -name .packlist \
+    -o -name "*.bs" \
+    -o -name Makefile.subs.pl \
+    | xargs -ri rm -f {}
+# remove docs that do not apply to Linux
+rm -f README.aix README.hpux11 README.osX README.Panasonic_AM3X.txt README.solaris README.win32
+
+# copy missing mib2c.conf files
+install -m 644 local/mib2c.*.conf %{buildroot}%{_datadir}/snmp
+
+# install python module
+pushd python
+%{__python3} setup.py --basedir=.. install -O1 --skip-build --root %{buildroot} 
+popd
+
+find %{buildroot} -name '*.so' | xargs chmod 0755
+
+# trim down massive ChangeLog
+dd bs=1024 count=250 if=ChangeLog of=ChangeLog.trimmed
+
+# convert files to UTF-8
+for file in README COPYING; do
+    iconv -f 8859_1 -t UTF-8 <$file >$file.utf8
+    mv $file.utf8 $file
+done
+
+# remove executable bit from documentation samples
+chmod 644 local/passtest local/ipf-mod.pl
+
+# systemd stuff
+install -m 755 -d %{buildroot}/%{_tmpfilesdir}
+install -m 644 %SOURCE7 %{buildroot}/%{_tmpfilesdir}/net-snmp.conf
+install -m 755 -d %{buildroot}/%{_unitdir}
+install -m 644 %SOURCE8 %SOURCE9 %{buildroot}/%{_unitdir}/
+
+%check
+%if %{netsnmp_check}
+%ifarch ppc ppc64
+rm -vf testing/fulltests/default/T200snmpv2cwalkall_simple
+%endif
+# restore libtool, for unknown reason it does not work with the one without rpath
+cp -f libtool.orig libtool
+# temporary workaround to make test "extending agent functionality with pass" working
+chmod 755 local/passtest
+
+LD_LIBRARY_PATH=%{buildroot}/%{_libdir} make test
+
+%endif
+
+
+%post
+%systemd_post snmpd.service snmptrapd.service
+
+%preun
+%systemd_preun snmpd.service snmptrapd.service
+
+
+%postun
+%systemd_postun_with_restart snmpd.service snmptrapd.service
+
+%ldconfig_scriptlets libs
+%ldconfig_scriptlets agent-libs
+
+%files
+%doc COPYING ChangeLog.trimmed EXAMPLE.conf FAQ NEWS TODO
+%doc README README.agent-mibs README.agentx README.krb5 README.snmpv3
+%doc local/passtest local/ipf-mod.pl
+%doc README.thread AGENT.txt PORTING local/README.mib2c
+%doc IETF-MIB-LICENSE.txt
+%dir %{_sysconfdir}/snmp
+%config(noreplace) %attr(0600,root,root) %{_sysconfdir}/snmp/snmpd.conf
+%config(noreplace) %attr(0600,root,root) %{_sysconfdir}/snmp/snmptrapd.conf
+%{_bindir}/snmpconf
+%{_bindir}/net-snmp-create-v3-user
+%{_sbindir}/*
+%attr(0644,root,root) %{_mandir}/man[58]/snmp*d*
+%attr(0644,root,root) %{_mandir}/man5/snmp_config.5.gz
+%attr(0644,root,root) %{_mandir}/man5/variables*
+%attr(0644,root,root) %{_mandir}/man1/net-snmp-create-v3-user*
+%attr(0644,root,root) %{_mandir}/man1/snmpconf.1.gz
+%dir %{_datadir}/snmp
+%{_datadir}/snmp/snmpconf-data
+%dir %{_localstatedir}/run/net-snmp
+%{_tmpfilesdir}/net-snmp.conf
+%{_unitdir}/snmp*
+%config(noreplace) %{_sysconfdir}/sysconfig/snmpd
+%config(noreplace) %{_sysconfdir}/sysconfig/snmptrapd
+%{_bindir}/agentxtrap
+%attr(0644,root,root) %{_mandir}/man1/agentxtrap.1*
+
+%files utils
+%{_bindir}/encode_keychange
+%{_bindir}/snmp[^c-]*
+%attr(0644,root,root) %{_mandir}/man1/snmp[^-]*.1*
+%attr(0644,root,root) %{_mandir}/man1/encode_keychange*.1*
+%attr(0644,root,root) %{_mandir}/man5/snmp.conf.5.gz
+%attr(0644,root,root) %{_mandir}/man5/variables.5.gz
+
+%files devel
+%{_libdir}/lib*.so
+%{_libdir}/pkgconfig/*
+%{_includedir}/*
+%attr(0644,root,root) %{_mandir}/man3/*.3.*
+%attr(0755,root,root) %{_bindir}/net-snmp-config*
+%attr(0644,root,root) %{_mandir}/man1/net-snmp-config*.1.*
+
+%files perl
+%{_bindir}/mib2c-update
+%{_bindir}/mib2c
+%{_bindir}/snmp-bridge-mib
+%{_bindir}/net-snmp-cert
+%{_bindir}/checkbandwidth
+%dir %{_datadir}/snmp
+%{_datadir}/snmp/mib2c*
+%{_datadir}/snmp/*.pl
+%{_bindir}/traptoemail
+%attr(0644,root,root) %{_mandir}/man[15]/mib2c*
+%attr(0644,root,root) %{_mandir}/man3/*.3pm.*
+%attr(0644,root,root) %{_mandir}/man1/traptoemail*.1*
+%attr(0644,root,root) %{_mandir}/man1/snmp-bridge-mib.1*
+%{perl_vendorarch}/*SNMP*
+%{perl_vendorarch}/auto/*SNMP*
+%{perl_vendorarch}/auto/Bundle/*SNMP*
+%{perl_vendorarch}/Bundle/MakefileSubs.pm
+
+%files -n python3-net-snmp
+%doc README
+%{python3_sitearch}/*
+
+%files gui
+%{_bindir}/tkmib
+%attr(0644,root,root) %{_mandir}/man1/tkmib.1*
+
+%files libs
+%doc COPYING README ChangeLog.trimmed FAQ NEWS TODO
+%doc IETF-MIB-LICENSE.txt
+%{_libdir}/libnetsnmp.so.%{soname}*
+%dir %{_datadir}/snmp
+%dir %{_datadir}/snmp/mibs
+%{_datadir}/snmp/mibs/*
+%dir %{_localstatedir}/lib/net-snmp
+%dir %{_localstatedir}/lib/net-snmp/mib_indexes
+%dir %{_localstatedir}/lib/net-snmp/cert_indexes
+
+%files agent-libs
+%{_libdir}/libnetsnmpagent*.so.%{soname}*
+%{_libdir}/libnetsnmphelpers*.so.%{soname}*
+%{_libdir}/libnetsnmpmibs*.so.%{soname}*
+%{_libdir}/libnetsnmptrapd*.so.%{soname}*
+
+%changelog
+* Wed Oct 13 2021 Josef Ridky <jridky@redhat.com> - 1:5.9.1-7
+- fix FTBFS due of OpenSSL update (#2001430)
+
+* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 1:5.9.1-6
+- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
+  Related: rhbz#1991688
+
+* Fri Aug  6 2021 Florian Weimer <fweimer@redhat.com> - 1:5.9.1-5
+- Rebuild to pick up new build flags from redhat-rpm-config (#1984652)
+
+* Mon Jul 19 2021 Josef Ridky <jridky@redhat.com> - 1:5.9.1-4
+- fix UseNumeric in Python library (#1970938)
+
+* Wed Jun 16 2021 Mohan Boddu <mboddu@redhat.com> - 1:5.9.1-3
+- Rebuilt for RHEL 9 BETA for openssl 3.0
+  Related: rhbz#1971065
+
+* Thu Jun 03 2021 Josef Ridky <jridky@redhat.com> - 1:5.9.1-2
+- Upload new source tarball
+
+* Thu May 27 2021 Josef Ridky <jridky@redhat.com> - 1:5.9.1-1
+- New upstream release 5.9.1 (#1964963)
+
+* Wed May 26 2021 Josef Ridky <jridky@redhat.com> 1:5.9-11
+- disable DES and port for OpenSSL 3.0 (#1958073)
+
+* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 1:5.9-10
+- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
+
+* Mon Mar 15 2021 Josef Ridky <jridky@redhat.com> - 1:5.9-9
+- fix issue with parsing IPv4 address twice
+
+* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 1:5.9-8
+- Rebuilt for updated systemd-rpm-macros
+  See https://pagure.io/fesco/issue/2583.
+
+* Thu Feb 04 2021 Josef Ridky <jridky@redhat.com> - 1:5.9-7
+- remove file with unsupported license
+- use make and make install macros
+
+* Thu Jan 28 2021 Josef Ridky <jridky@redhat.com> - 1:5.9-6
+- add support for digests detected from ECC certificates
+- add support for intermediate certificates
+- fix crash caused by small buffer size
+
+* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1:5.9-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Mon Jan 18 2021 Josef Ridky <jridky@redhat.com> - 1:5.9-4
+- fix issue with parsing long trap headers (#1912725)
+- fix error message when the address specified by clientaddr option
+  is wrong or cannot be bound
+- fix issue with quoting empty passphrase
+
+* Wed Nov 18 2020 Josef Ridky <jridky@redhat.com> - 1:5.9-3
+- update net-snmp-tmpfs.conf for /var/run to /run (#1893471)
+
+* Tue Sep 01 2020 Josef Ridky <jridky@redhat.com> - 1:5.9-2
+- Disable pcre binding
+- Add support for available memory report
+
+* Mon Aug 17 2020 Josef Ridky <jridky@redhat.com> - 1:5.9-1
+- New upstream release 5.9
+
+* Tue Aug 04 2020 Josef Ridky <jridky@redhat.com> - 1:5.8-25
+- link math library to fix FTBFS for hplip (#1863855)
+
+* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1:5.8-24
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Tue Jul 07 2020 Josef Ridky <jridky@redhat.com> - 1:5.8-23
+- change /var/run/net-snmp to /run/net-snmp (#1737631)
+
+* Tue Jul 07 2020 Josef Ridky <jridky@redhat.com> - 1:5.8-22
+- proxied OIDs unspecified in proxy statement in snmpd.conf
+- UCD-SNMP-MIB::dskTable doesn't update dynamically
+- expand SNMPCONFPATH variable
+- log meningful message on duplicate IP address
+- memory reporting adjustment
+- fix typos in man page
+- speedup ipAddressTable loading
+- fix memory leak when shut down librpm
+- services starts after network-online.target
+- add missing part of memory leak patch
+- add support for AES192 and AES256
+- fix net-snmp-config wrapper script (#1815984)
+
+* Mon Jun 22 2020 Jitka Plesnikova <jplesnik@redhat.com> - 1:5.8-21
+- Perl 5.32 rebuild
+
+* Tue May 26 2020 Miro Hrončok <mhroncok@redhat.com> - 1:5.8-20
+- Rebuilt for Python 3.9
+
+* Thu Apr 09 2020 Josef Ridky <jridky@redhat.com> -1:5.8-19
+- update skip_autofs patch (#1810104)
+- exit snmpd after snmpd -h command
+- fix issues found by coverity scan
+- fix issue with flood messages
+- fix double free or corruption error when freeing security context
+
+* Tue Mar 24 2020 Petr Pisar <ppisar@redhat.com> - 1:5.8-18
+- Build-require Perl dependencies for running the tests
+
+* Wed Feb 26 2020 Josef Ridky <jridky@redhat.com> - 1:5.8-17
+- fix config error with RPM library (#1807274)
+
+* Mon Feb 17 2020 Josef Ridky <jridky@redhat.com> - 1:5.8-16
+- set net-snmp-devel as requirement for net-snmp-perl
+
+* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1:5.8-15
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Thu Oct 03 2019 Miro Hrončok <mhroncok@redhat.com> - 1:5.8-14
+- Rebuilt for Python 3.8.0rc1 (#1748018)
+
+* Thu Sep 19 2019 Josef Ridky <jridky@redhat.com> - 1:5.8-13
+- Fix snmpv3 trap forwarding (#1753506)
+
+* Mon Aug 19 2019 Miro Hrončok <mhroncok@redhat.com> - 1:5.8-12
+- Rebuilt for Python 3.8
+
+* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1:5.8-11
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Fri Jun 28 2019 Josef Ridky <jridky@redhat.com> - 1:5.8-10
+- remove file with unsupported license
+- fix daemon crash on resend request (#1663027)
+- fix issue with trapsink default port
+
+* Mon Jun 10 22:13:21 CET 2019 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 1:5.8-9
+- Rebuild for RPM 4.15
+
+* Mon Jun 10 15:42:03 CET 2019 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 1:5.8-8
+- Rebuild for RPM 4.15
+
+* Thu May 30 2019 Jitka Plesnikova <jplesnik@redhat.com> - 1:5.8-7
+- Perl 5.30 rebuild
+
+* Thu Feb 07 2019 Josef Ridky <jridky@redhat.com> - 1:5.8-6
+- fix IPv6 address assignment for clientaddr option (#1673272)
+
+* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1:5.8-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Mon Jan 14 2019 Björn Esser <besser82@fedoraproject.org> - 1:5.8-4
+- Rebuilt for libcrypt.so.2 (#1666033)
+
+* Tue Nov 27 2018 Josef Ridky <jridky@redhat.com> - 1:5.8-3
+- backport memory leak fixes from upstream
+- add fPIE to CFLAGS (#1543853)
+- use default LDFLAGS
+
+* Mon Jul 23 2018 Josef Ridky <jridky@redhat.com> - 1:5.8-2
+- fix unresoved error with mysql functions
+- implement changes to announce soname changes
+
+* Wed Jul 18 2018 Josef Ridky <jridky@redhat.com> - 1:5.8-1
+- New upstream release 5.8
+- remove APSL downstream patch due this copyright is already 
+  coveret by part 8 in COPYING file
+
+* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1:5.7.3-42
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Sat Jul 07 2018 Miro Hrončok <mhroncok@redhat.com> - 1:5.7.3-41
+- Rebuilt for Python 3.7
+
+* Wed Jun 27 2018 Jitka Plesnikova <jplesnik@redhat.com> - 1:5.7.3-40
+- Perl 5.28 rebuild
+
+* Mon May 21 2018 Josef Ridky <jridky@redhat.com> - 1:5.7.3-39
+- python3 support draft
+
+* Mon May 21 2018 Josef Ridky <jridky@redhat.com> - 1:5.7.3-38
+- revert Python3 support
+
+* Tue Mar 27 2018 Josef Ridky <jridky@redhat.com> - 1:5.7.3-37
+- backport upstream patch for structure iterator 
+
+* Thu Mar 08 2018 Josef Ridky <jridky@redhat.com> - 1:5.7.3-36
+- CVE-2018-1000116 Heap corruption in snmp_pdu_parse (#1552844)
+
+* Tue Feb 27 2018 Josef Ridky <jridky@redhat.com> - 1:5.7.3-35
+- compile against Python3
+- add gcc requirement
+- remove rm buildroot
+
+* Fri Feb 16 2018 Josef Ridky <jridky@redhat.com> - 1:5.7.3-34
+- fix wrong systemd patch (#1545946)
+
+* Thu Feb 08 2018 Josef Ridky <jridky@redhat.com> - 1:5.7.3-33
+- Fix strstr() crash when looking for RPM Group tag
+- Fix wrong usage of structure iterator
+- Fix issue with statistics from autofs
+
+* Thu Feb 08 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1:5.7.3-32
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Sat Feb 03 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 1:5.7.3-31
+- Switch to %%ldconfig_scriptlets
+
+* Wed Jan 31 2018 Josef Ridky <jridky@redhat.com> - 1:5.7.3-30
+- remove Group tag
+- remove sysvinit package and init files (no longer needed)
+- fix python2 references and dependencies in spec file
+
+* Sat Jan 20 2018 Björn Esser <besser82@fedoraproject.org> - 1:5.7.3-29
+- Rebuilt for switch to libxcrypt
+
+* Wed Dec 13 2017 Josef Ridky <jridky@redhat.com> - 1:5.7.3-28
+- remove tcp_wrapper (#1518768)
+- use mariadb-connector instead of mysql-devel (#1339272)
+
+* Sun Aug 20 2017 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 1:5.7.3-27
+- Add Provides for the old name without %%_isa
+
+* Sat Aug 19 2017 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 1:5.7.3-26
+- Python 2 binary package renamed to python2-net-snmp
+  See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3
+
+* Fri Aug 11 2017 Igor Gnatenko <ignatenko@redhat.com> - 1:5.7.3-25
+- Rebuilt after RPM update (№ 3)
+
+* Thu Aug 10 2017 Igor Gnatenko <ignatenko@redhat.com> - 1:5.7.3-24
+- Rebuilt for RPM soname bump
+
+* Thu Aug 10 2017 Igor Gnatenko <ignatenko@redhat.com> - 1:5.7.3-23
+- Rebuilt for RPM soname bump
+
+* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1:5.7.3-22
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
+* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1:5.7.3-21
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Thu Jul 20 2017 Adam Williamson <awilliam@redhat.com> -1:5.7.3-20
+- Edit fix of issue with undefined symbol my_progname when try to load
+  NetSNMP::TrapReceiver in perl script (#1470004)
+
+* Thu Jul 20 2017 Josef Ridky <jridky@redhat.com> - 1:5.7.3-19
+- Fix issue with undefined symbol my_progname when try to load NetSNMP::TrapReceiver in perl script. (#1470004)
+
+* Wed Jul 19 2017 Adam Williamson <awilliam@redhat.com> - 1:5.7.3-18
+- Fix build with MariaDB 10.2
+
+* Thu Jul 13 2017 Petr Pisar <ppisar@redhat.com> - 1:5.7.3-17
+- perl dependency renamed to perl-interpreter
+  <https://fedoraproject.org/wiki/Changes/perl_Package_to_Install_Core_Modules>
+
+* Sun Jun 04 2017 Jitka Plesnikova <jplesnik@redhat.com> - 1:5.7.3-16
+- Perl 5.26 rebuild
+
+* Wed Feb 15 2017 Josef Ridky <jridky@redhat.com> - 1:5.7.3-15
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+- Add support for new version of OpenSSL library (#1423984)
+
+* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1:5.7.3-14
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Fri Aug 12 2016 Josef Ridky <jridky@redhat.com> - 1:5.7.3-13
+- net-snmp.redhat.conf: update default configuration to conform to the best practices (#1359123)
+- nmp_transport.c: use strtok_r for strtok to avoid a race condition (#1366282)
+
+* Tue Jul 19 2016 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:5.7.3-12
+- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages
+
+* Sun May 15 2016 Jitka Plesnikova <jplesnik@redhat.com> - 1:5.7.3-11
+- Perl 5.24 rebuild
+
+* Mon May 09 2016 Jitka Plesnikova <jplesnik@redhat.com> - 1:5.7.3-10
+- Updated net-snmp to build against Perl 5.24
+
+* Wed Feb 24 2016 Jan Safranek <jsafrane@redhat.com> - 1:5.7.3-9
+- Trim net-snmp-config --cflags output (#1309080)
+
+* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1:5.7.3-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Mon Jul 27 2015 Richard W.M. Jones <rjones@redhat.com> - 1:5.7.3-7
+- Bump version to rebuild against new RPM in Rawhide.
+
+* Tue Jul 14 2015 Jan Safranek <jsafrane@redhat.com> - 1:5.7.3-6
+- Recompile with -Wformat (#1242766)
+
+* Fri Jun 26 2015 Jan Safranek <jsafrane@redhat.com> - 1:5.7.3-5
+- Fixed snmpstatus crashing when receiving invalid response (#1233738)
+
+* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:5.7.3-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Wed Jun 03 2015 Jitka Plesnikova <jplesnik@redhat.com> - 1:5.7.3-3
+- Perl 5.22 rebuild
+
+* Thu Mar 05 2015 Adam Jackson <ajax@redhat.com> 1:5.7.3-2
+- Disable sysvinit subpackage on F23+
+
+* Tue Feb 17 2015 Jan Safranek <jsafrane@redhat.com> - 1:5.7.3-1
+- Update to 5.7.3
+
+* Fri Sep 05 2014 Jitka Plesnikova <jplesnik@redhat.com> - 1:5.7.2-24
+- Perl 5.20 rebuild
+
+* Mon Sep  1 2014 Jan Safranek <jsafrane@redhat.com> - 1:5.7.2-23
+- Fixed CVE-2014-3565
+- Fixed net-snmp-cert tool, now it does not depend on net-snmp-devel (#1134475)
+
+* Tue Aug 26 2014 Jitka Plesnikova <jplesnik@redhat.com> - 1:5.7.2-22
+- Perl 5.20 rebuild
+
+* Sun Aug 17 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:5.7.2-21
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+
+* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:5.7.2-20
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Tue Mar  4 2014 Jan Safranek <jsafrane@redhat.com> - 1:5.7.2-19
+- Fixed buffer overflow in ICMP-MIB (#1071753)
+
+* Wed Jan 15 2014 Jan Safranek <jsafrane@redhat.com> - 1:5.7.2-18
+- Added support for ppc64le architecture (#1052431)
+
+* Thu Jan  9 2014 Jan Safranek <jsafrane@redhat.com> - 1:5.7.2-17
+- Moved tmpfiles.d config file to /usr/lib
+
+* Thu Dec  5 2013 Jan Safranek <jsafrane@redhat.com> - 1:5.7.2-16
+- Fixed snmpd crashing when AgentX subagent disconnects in the middle of
+  request processing (#1038011)
+
+* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:5.7.2-15
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
+
+* Wed Jul 17 2013 Petr Pisar <ppisar@redhat.com> - 1:5.7.2-14
+- Perl 5.18 rebuild
+
+* Thu Jun 27 2013 Jan Safranek <jsafrane@redhat.com> - 1:5.7.2-13
+- set permissions of snmpd.conf and snmptrapd conf to 0600 to prevent
+  users from reading passwords and community strings.
+
+* Tue May 21 2013 Jan Safranek <jsafrane@redhat.com> - 1:5.7.2-12
+- added btrfs support to hrFSTable (#965348)
+
+* Mon May  6 2013 Jan Safranek <jsafrane@redhat.com> - 1:5.7.2-11
+- added aarch64 to multilib architectures.
+
+* Mon Apr 22 2013 Jan Safranek <jsafrane@redhat.com> - 1:5.7.2-10
+- moved agentxtrap utility to net-snmp subpackage,
+  it needs libraries provided by net-snmp-agent-libs.
+  
+* Thu Apr 18 2013 Jan Safranek <jsafrane@redhat.com> - 1:5.7.2-9
+- moved agentxtrap utility to net-snmp-utils subpackage,
+  it's an utility, not a daemon.
+
+* Mon Mar 25 2013 Jan Safranek <jsafrane@redhat.com> - 1:5.7.2-8
+- added autoreconf to be able to build on aarch64 (#926223)
+
+* Thu Feb 14 2013 Tom Callaway <spot@fedoraproject.org> 1:5.7.2-7
+- add missing IETF MIB license text (BSD)
+
+* Thu Feb  7 2013 Jan Safranek <jsafrane@redhat.com> - 1:5.7.2-6
+- fixed net-snmp-create-v3-user to have the same content on all architectures
+- /var/lib/net-snmp/mib_indexes and cert_indexes added to net-snmp-libs
+  (#906761)
+
+* Thu Jan 17 2013 Jan Safranek <jsafrane@redhat.com> - 1:5.7.2-5
+- Python: fixed IPADDRESS size on 64-bit systems (#895357)
+
+* Mon Nov 12 2012 Jan Safranek <jsafrane@redhat.com> - 1:5.7.2-4
+- Fixed systemd support (#875632).
+
+* Mon Oct 29 2012 Jan Safranek <jsafrane@redhat.com> - 1:5.7.2-3
+- Added direct dependency on perl-devel with architectute in
+  net-snmp-devel package to pull proper dependencies.
+
+* Wed Oct 24 2012 Jan Safranek <jsafrane@redhat.com> - 1:5.7.2-2
+- Fixed net-snmp dependency on net-snmp-agent-libs.
+
+* Thu Oct 18 2012 Jan Safranek <jsafrane@redhat.com> - 1:5.7.2-1
+- Updated to 5.7.2
+
+* Mon Aug 27 2012 Jan Safranek <jsafrane@redhat.com> - 1:5.7.1-10
+- Updated RPM scriplets with latest systemd-rpm macros (#850403).
+- Fixed fedora-review tool complaints.
+
+* Fri Jul 20 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:5.7.1-9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
+* Fri Jun 08 2012 Petr Pisar <ppisar@redhat.com> - 1:5.7.1-8
+- Perl 5.16 rebuild
+
+* Fri May 18 2012 Jan Safranek <jsafrane@redhat.com> 5.7.1-7
+- Move /var/lib/net-snmp from net-snmp to net-snmp-libs (#822508)
+
+* Mon Apr 23 2012 Karsten Hopp <karsten@redhat.com> 5.7.1-6
+- Temporarily disable T200snmpv2cwalkall_simple test on ppc(64) until
+  bug 814829 is fixed
+
+* Fri Mar 30 2012 Jan Safranek <jsafrane@redhat.com> - 1:5.7.1-5
+- Rebuilt for new rpm
+
+* Fri Jan 13 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:5.7.1-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
+
+* Mon Nov 28 2011 Jan Safranek <jsafrane@redhat.com> - 1:5.7.1-3
+- re-introduced /etc/sysconfig files (#752821)
+
+* Wed Oct  5 2011 Jan Safranek <jsafrane@redhat.com> - 1:5.7.1-2
+- fixed perl linking (#742678)
+
+* Tue Oct  4 2011 Jan Safranek <jsafrane@redhat.com> - 1:5.7.1-1
+- updated to 5.7.1:
+  - Fixed the mib-parsing-bug introduced shortly before 5.7
+  - fixed rounding errors for disk percentage calculations
+  - Many other miscellaneous minor bug fixes
+
+* Tue Sep 06 2011 Dan Horák <dan[at]danny.cz> - 1:5.7-7
+- disable failing test on s390(x) (#680697)
+
+* Thu Aug 11 2011 Jan Safranek <jsafrane@redhat.com> - 1:5.7-6
+- added new net-snmp-agent-libs subpackage with agent libraries
+  -> net-snmp-libs do not need perl and lm_sensors libs
+- removed libsnmp.so, it's not used in Fedora (#729811)
+- added README.systemd
+- added new net-snmp-sysvinit subpackage with legacy init scripts
+  (#718183)
+
+* Tue Aug  9 2011 Jan Safranek <jsafrane@redhat.com> - 1:5.7-5
+- integrated with systemd (#718183)
+
+* Thu Jul 21 2011 Petr Sabata <contyk@redhat.com> - 1:5.7-4
+- Perl mass rebuild
+
+* Wed Jul 20 2011 Petr Sabata <contyk@redhat.com> - 1:5.7-3
+- Perl mass rebuild
+
+* Fri Jul  8 2011 Jan Safranek <jsafrane@redhat.com> - 1:5.7-2
+- restored rpath in net-snmp-config output - SNMP subagent won't link
+  with libsnmpagent.so without it, linker needs to know location
+  of libperl.so
+- fixed check section to make tests pass on machine without DNS
+
+* Thu Jul  7 2011 Jan Safranek <jsafrane@redhat.com> - 1:5.7-1
+- updated to net-snmp-5.7
+
+* Mon Jun 20 2011 Marcela Mašláňová <mmaslano@redhat.com> - 1:5.6.1-9
+- Perl mass rebuild
+
+* Thu Jun 09 2011 Marcela Mašláňová <mmaslano@redhat.com> - 1:5.6.1-8
+- Perl 5.14 mass rebuild
+
+* Wed Mar 23 2011 Jan Safranek <jsafrane@redhat.com> - 1:5.6.1-7
+- Rebuild against newer mysql
+
+* Sat Feb 26 2011 Dennis Gilmore <dennis@ausil.us> - 1:5.6.1-6
+- disable failing test on sparc64
+
+* Tue Feb 15 2011 Jan Safranek <jsafrane@redhat.com> - 1:5.6.1-5
+- enabled MySQL support in snmptrapd
+
+* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:5.6.1-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Wed Jan 19 2011 Jan Safranek <jsafrane@redhat.com> - 1:5.6.1-3
+- Rebuild (again) against newer rpm, now with proper rpm-4.9 detection
+
+* Wed Jan 19 2011 Matthias Clasen <mclasen@redhat.com> - 1:5.6.1-2
+- Rebuild against newer rpm
+
+* Tue Jan  4 2011 Jan Safranek <jsafrane@redhat.com> - 1:5.6.1-1
+- updated to net-snmp-5.6.1
+
+* Mon Dec  6 2010 Jan Safranek <jsafrane@redhat.com> - 1:5.6-5
+- re-create /var/run/net-snmp on boot using tmpfiles.d (#656637)
+- move snmp-bridge-mib and net-snmp-cert utilities to net-snmp-perl
+  subpackage, net-snmp-utils subpackage does not depend on Perl now
+
+* Tue Nov 23 2010 Jan Safranek <jsafrane@redhat.com> - 1:5.6-4
+- properly fix failing tests on ppc/s390 (#655731)
+
+* Mon Nov 22 2010 Dan Horák <dan[at]danny.cz> - 1:5.6-3
+- temporarily disable a test failing on ppc/s390 arches
+
+* Fri Nov  5 2010 Jan Safranek <jsafrane@redhat.com> - 1:5.6-2
+- fixed c++ guards in net-snmp header files (#650219)
+
+* Mon Oct 25 2010 Jan Safranek <jsafrane@redhat.com> - 1:5.6-1
+- updated to net-snmp-5.6
+
+* Mon Oct 11 2010 Jan Safranek <jsafrane@redhat.com> - 1:5.5-21
+- fixed truncation of sysObjectID (#640848)
+
+* Thu Aug 19 2010 Jan Safranek <jsafrane@redhat.com> - 1:5.5-20
+- Remove rpath from net-snmp-config output (#554747)
+
+* Wed Aug  4 2010 Jan Safranek <jsafrane@redhat.com> - 1:5.5-19
+- Add APSL 2.0 license to COPYING file
+
+* Wed Jul 21 2010 David Malcolm <dmalcolm@redhat.com> - 1:5.5-18
+- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild
+
+* Tue Jul 20 2010 Jan Safranek <jsafrane@redhat.com> - 1:5.5-17
+- fixed temporary filename generation in snmptrapd (#616347)
+
+* Mon Jun 28 2010 Jan Safranek <jsafrane@redhat.com> - 1:5.5-16
+- rebuild for new perl
+
+* Wed Jun 16 2010 Jan Safranek <jsafrane@redhat.com> - 1:5.5-14
+- add missing struct.h header file (#603243)
+
+* Wed Jun 16 2010 Jan Safranek <jsafrane@redhat.com> - 1:5.5-13
+- add missing include files from util_funcs directory (#603243)
+
+* Tue Jun 01 2010 Marcela Maslanova <mmaslano@redhat.com> - 1:5.5-13
+- Mass rebuild with perl-5.12.0
+
+* Tue Feb  2 2010 Jan Safranek <jsafrane@redhat.com> - 1:5.5-12
+- store temporary files in /var/run/net-snmp instead of /tmp -
+  SELinux does not like it.
+
+* Tue Jan 12 2010 Stepan Kasal <skasal@redhat.com> - 1:5.5-11
+- move the perl(:MODULE_COMPAT_5.10.x) require to net-snmp-libs
+
+* Tue Jan 12 2010 Jan Safranek <jsafrane@redhat.com> - 1:5.5-10
+- document various legacy options in this spec file
+
+* Tue Jan 12 2010 Stepan Kasal <skasal@redhat.com> - 1:5.5-9
+- require perl(:MODULE_COMPAT_5.10.x) because the package links against
+  libperl.so
+
+* Tue Jan  5 2010 Jan Safranek <jsafrane@redhat.com> - 1:5.5-8
+- fix invalid access to memory in tcpListenerTable (#551030)
+
+* Mon Dec 21 2009 Jan Safranek <jsafrane@redhat.com> - 1:5.5-7
+- fix crash with interfaces without broadcast addresses (like OpenVPN's tun0)
+  (#544849)
+
+* Tue Dec  8 2009 Jan Safranek <jsafrane@redhat.com> - 1:5.5-6
+- fix compilation of the python module
+
+* Mon Dec  7 2009 Stepan Kasal <skasal@redhat.com> - 1:5.5-5
+- rebuild against perl 5.10.1
+
+* Wed Dec  2 2009 Jan Safranek <jsafrane@redhat.com> 1:5.5-4
+- fix udpTable indexes on big-endian systems (#543352)
+- fix snmptrapd init script to survive with empty /etc/sysconfig/snmptrapd
+- lower the default log level of snmpd to get rid of the debug messages
+
+* Wed Nov 25 2009 Jan Safranek <jsafrane@redhat.com>  1:5.5-3
+- prepare the .spec file for review
+- run automatic regression suite after the compilation of the package
+  to check for obvious regressions
+- remove unnecessary package dependencies
+
+* Tue Nov 24 2009 Jan Safranek <jsafrane@redhat.com>  1:5.5-2
+- introduce /etc/sysconfig/snmptrapd. Use it to specify snmptrapd command
+  line options.  /etc/snmp/snmptrapd.options is not used anymore (#540799)
+- build-in ipAddressPrefixTable, ipDefaultRouterTable, ipv6ScopeZoneIndexTable,
+  ipIfStatsTable, SCTP-MIB, RMON-MIB and Etherlike-MIBs
+- remove ucd5820stat helper script, it depends on get5820stats, which is not
+  available in Fedora
+- move sample services ipf-mod.pl to documentation
+- remove logrotate config, snmpd logs into syslog
+
+* Tue Sep 29 2009 Jan Safranek Jan Safranek <jsafranek@redhat.com> 5.5-1
+- update to Net-SNMP 5.5
+- remove static libraries from -devel subpackage
+
+* Mon Sep 14 2009 Jan Safranek <orion@cora.nwra.com> 1:5.4.2.1-17
+- implement force-reload command in initscripts (#523126)
+
+* Fri Aug 21 2009 Tomas Mraz <tmraz@redhat.com> - 1:5.4.2.1-16
+- rebuilt with new openssl
+
+* Fri Aug 14 2009 Orion Poplawski <orion@cora.nwra.com> 1:5.4.2.1-15
+- Prevent post script failure on fresh installs
+
+* Sat Jul 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:5.4.2.1-14
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
+
+* Wed Jul  1 2009 Jan Safranek <jsafranek@redhat.com> 5.4.2.1-13
+- package cleanup, remove unnecessary patches
+- move local state file from /var/net-snmp/ to /var/lib/net-snmp
+
+* Wed Jul  1 2009 Jan Safranek <jsafranek@redhat.com> 5.4.2.1-12
+- make the default configuration less noisy, i.e. do not print "Connection from
+  UDP:" and "Received SNMP packet(s) from UDP:" messages on each connection.
+  (#509055)
+
+* Mon May 18 2009 Jan Safranek <jsafranek@redhat.com> 5.4.2.1-11
+- fix divison-by-zero in cpu statistics (#501210)
+
+* Fri Mar 06 2009 Jesse Keating <jkeating@redhat.com> - 5.4.2.1-10
+- Rebuild for new rpm
+
+* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:5.4.2.1-9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
+
+* Mon Feb 16 2009 Jan Safranek <jsafranek@redhat.com> 5.4.2.1-8
+- fix tcp_wrappers integration (CVE-2008-6123)
+
+* Fri Jan 30 2009 Karsten Hopp <karsten@redhat.com> 5.4.2.1-7
+- fix build on s390x which has no libsensors
+
+* Sat Jan 17 2009 Tomas Mraz <tmraz@redhat.com> 5.4.2.1-7
+- rebuild with new openssl
+
+* Wed Dec 17 2008 Jan Safranek <jsafranek@redhat.com> 5.4.2.1-6
+- rebuilt for new python again...
+
+* Mon Dec  1 2008 Jan Safranek <jsafranek@redhat.com> 5.4.2.1-5
+- fix rpm ownership of all created directories (#473582)
+
+* Mon Dec  1 2008 Jan Safranek <jsafranek@redhat.com> 5.4.2.1-4
+- Rebuild for fixed rpm (#473420)
+
+* Sat Nov 29 2008 Ignacio Vazquez-Abrams <ivazqueznet+rpm@gmail.com> - 1:5.4.2.1-3
+- Rebuild for Python 2.6
+
+* Mon Nov  3 2008 Jan Safranek <jsafranek@redhat.com> 5.4.2.1-1
+- explicitly require the right version and release of net-snmp and
+  net-snmp-libs
+- update to net-snmp-5.4.2.1 to fix CVE-2008-4309
+
+* Fri Sep 26 2008 Jan Safranek <jsafranek@redhat.com> 5.4.2-3
+- further tune up the distribution of files among subpackages
+  and dependencies
+
+* Fri Sep 26 2008 Jan Safranek <jsafranek@redhat.com> 5.4.2-2
+- redistribute the perl scripts to the net-snmp package,
+  net-snmp-utils doesn't depend on perl now (#462484)
+
+* Wed Sep 17 2008 Jan Safranek <jsafranek@redhat.com> 5.4.2-1
+- update to net-snmp-5.4.2
+
+* Wed Sep 10 2008 John A. Khvatov <ivaxer@fedoraproject.org> 5.4.1-22
+- add net-snmp-python
+
+* Tue Jul 22 2008 Jan Safranek <jsafranek@redhat.com> 5.4.1-21
+- fix perl SNMP::Session::set (#452131)
+
+* Fri Jul 11 2008 Jan Safranek <jsafranek@redhat.com> 5.4.1-20
+- prepare for new rpm version
+
+* Tue Jun 10 2008 Jan Safranek <jsafranek@redhat.com> 5.4.1-19
+- fix various flaws (CVE-2008-2292 CVE-2008-0960)
+
+* Sat May 31 2008 Dennis Gilmore <dennis@ausil.us> 5.4.1-18
+- fix sparc handling in /usr/bin/net-snmp-config
+
+* Thu May 29 2008 Dennis Gilmore <dennis@ausil.us> 5.4.1-17
+- fix sparc handling in /usr/include/net-snmp/net-snmp-config-sparc.h
+
+* Sun May 25 2008 Dennis Gilmore <dennis@ausil.us> 5.4.1-16
+-sparc multilib handling
+
+* Mon Apr 21 2008 Jan Safranek <jsafranek@redhat.com> 5.4.1-15
+- explicitly require lm_sensor > 3 for build (#442718)
+- create multilib net-snmp-config on multilib architectures only
+
+* Tue Mar 18 2008 Tom "spot" Callaway <tcallawa@redhat.com> 5.4.1-14
+- add Requires for versioned perl (libperl.so)
+- get rid of silly file Requires
+
+* Thu Mar  6 2008 Tom "spot" Callaway <tcallawa@redhat.com> 5.4.1-13
+- BR: perl(ExtUtils::Embed)
+
+* Thu Mar  6 2008 Tom "spot" Callaway <tcallawa@redhat.com> 5.4.1-12
+- rebuild for new perl
+
+* Thu Feb 21 2008 Jan Safranek <jsafranek@redhat.com> 5.4.1-11
+- add openssl-devel to the list of netsnmp-devel deps
+
+* Thu Feb 14 2008 Jan Safranek <jsafranek@redhat.com> 5.4.1-10
+- fixing ipNetToMediaNetAddress to show IP address (#432780)
+
+* Tue Feb 12 2008 Jan Safranek <jsafranek@redhat.com> 5.4.1-9
+- introduce /etc/sysconfig/snmpd. Use it to specify snmpd command line options.
+  /etc/snmp/snmpd.options is not used anymore (#431391)
+
+* Mon Jan 28 2008 Jan Safranek <jsafranek@redhat.com> 5.4.1-8
+- init scripts made LSB compliant
+
+* Wed Dec  5 2007 Jan Safranek <jsafranek@redhat.com> 5.4.1-7
+- rebuild for openssl soname bump
+
+* Wed Nov 14 2007 Jan Safranek <jsafranek@redhat.com> 5.4.1-6
+- add support of lm_sensors v3
+- added procps to build dependencies (#380321)
+- removed beecrypt from dependencies
+- fixed crash on reading xen interfaces (#386611)
+
+* Thu Oct 25 2007 Jan Safranek <jsafranek@redhat.com> 5.4.1-5
+- move mib2c-update from net-snmp-utils to net-snmp-perl, where
+  mib2c is located
+- add tkmib to net-snmp-gui package (#167933)
+
+* Tue Oct 16 2007 Jan Safranek <jsafranek@redhat.com> 5.4.1-4
+- License: field fixed to "BSD and CMU"
+
+* Thu Aug 23 2007 Jan Safranek <jsafranek@redhat.com> 5.4.1-3
+- include these tables: ip-mib/ipv4InterfaceTable
+  ip-mib/ipv6InterfaceTable, ip-mib/ipAddressPrefixTable
+- fix Requires of net-snmp-devel to include lmsensors-devel on supported
+  architectures
+
+* Wed Aug 22 2007 Jan Safranek <jsafranek@redhat.com> 5.4.1-2
+- gawk added to build dependencies
+
+* Tue Aug  7 2007 Jan Safranek <jsafranek@redhat.com> 5.4.1-1
+- License: field changed to MIT
+- 5.4.1 integrated
+
+* Tue Jul 31 2007 Jan Safranek <jsafranek@redhat.com> 5.4-16
+- supported lm_sensors on ppc64 (#249255)
+- snmpconf generates config files with proper selinux context
+  (#247462)
+- fix leak  in udp transport (#247771)
+- add alpha to supported archs in net-snmp-config (#246825)
+- fix hrSWInst (#250237)
+
+* Thu Jun 28 2007 Jan Safranek <jsafranek@redhat.com> 5.4-15
+- fix default snmptrapd.conf
+
+* Thu May  3 2007 Jan Safranek <jsafranek@redhat.com> 5.4-14
+- fix snmptrapd hostname logging (#238587)
+- fix udpEndpointProcess remote IP address (#236551)
+- fix -M option of net-snmp-utils (#244784)
+- default snmptrapd.conf added (#243536)
+- fix crash when multiple exec statements have the same name
+  (#243536)
+- fix ugly error message when more interfaces share
+  one IP address (#209861)
+
+* Mon Mar 12 2007 Radek Vokál <rvokal@redhat.com> - 1:5.4-13
+- fix overly verbose log message (#221911)
+- few minor tweaks for review - still not perfect
+- fix linking with lcrypto (#231805)
+
+* Fri Mar  9 2007 Radek Vokál <rvokal@redhat.com> - 5.4-12
+- lm_sensors-devel only where avaliable
+
+* Thu Mar  1 2007 Radek Vokál <rvokal@redhat.com> - 5.4-11
+- fix lm_sensors-devel Requires (#229109)
+
+* Mon Feb 26 2007 Vitezslav Crhonek <vcrhonek@redhat.com> - 5.4-10
+- fix net-snmp-config strange values for --libs (#228588)
+
+* Fri Feb 23 2007 Radek Vokál <rvokal@redhat.com> - 5.4-9
+- fix dependency on lm_sensors-devel (#229109)
+- spec file cleanups
+
+* Tue Jan 23 2007 Radek Vokál <rvokal@redhat.com> - 5.4-8
+- fix occasional segfaults when snmpd starts
+
+* Thu Jan 11 2007 Radek Vokál <rvokal@redhat.com> - 5.4-7
+- fix ethtool extension (#222268)
+
+* Thu Jan 11 2007 Radek Vokál <rvokal@redhat.com> - 5.4-6
+- swith to new disman implementation
+
+* Tue Dec 12 2006 Radek Vokál <rvokal@redhat.com> - 5.4-5
+- fix memleaks in ip-addr and tcpConn
+
+* Thu Dec  7 2006 Radek Vokál <rvokal@redhat.com> - 5.4-4
+- fix rtnetlink.h/if_addr.h 
+
+* Thu Dec  7 2006 Joe Orton <jorton@redhat.com> - 5.4-3
+- add Requires for tcp_wrappers-devel for -devel
+
+* Mon Dec  4 2006 Radek Vokál <rvokal@redhat.com> - 5.4-2
+- rebuilt against tcp_wrappers-devel
+
+* Mon Nov 27 2006 Radek Vokal <rvokal@redhat.com> - 5.4-1
+- upgrade to 5.4
+- patch cleanup
+- snmpd uses /var/run/snmpd.pid (#211264)
+
+* Sun Oct 01 2006 Jesse Keating <jkeating@redhat.com> - 5.3.1-11
+- rebuilt for unwind info generation, broken in gcc-4.1.1-21
+
+* Mon Sep 25 2006 Radek Vokal <rvokal@redhat.com> 5.3.1-10
+- add mibII/mta_sendmail (#207909)
+
+* Fri Sep 22 2006 Radek Vokal <rvokal@redhat.com> 5.3.1-9
+- fix deprecated syscall base_reachable_time (#207273)
+
+* Wed Sep 13 2006 Radek Vokal <rvokal@redhat.com> 5.3.1-8
+- enable smux to listen only on LOCAL by default (#181667)
+- use correct answer adrress 
+
+* Tue Sep  5 2006 Radek Vokal <rvokal@redhat.com> 5.3.1-7
+- better upstream patch for byteorder
+- add epoch to corespond with upstream versioning 
+
+* Wed Aug 30 2006 Radek Vokal <rvokal@redhat.com> 5.3.1.0-6
+- fix IPv4/IPv6 address presentation (#200255)
+
+* Wed Aug 23 2006 Radek Vokal <rvokal@redhat.com> 5.3.1.0-5
+- SMUX support is still needed .. will disappear later!
+- static libs should be in devel not libs (#203571)
+- fix lm_sensors issues
+
+* Tue Aug 22 2006 Radek Vokal <rvokal@redhat.com> 5.3.1.0-4
+- turn off SMUX support (#110931)
+- add dist tag
+
+* Thu Aug 10 2006 Radek Vokal <rvokal@redhat.com> 5.3.1.0-3
+- fix lib dirs in configure (#197684)
+
+* Thu Aug  3 2006 Radek Vokal <rvokal@redhat.com> 5.3.1.0-2
+- better patch for depreciated sysctl call
+
+* Mon Jul 17 2006 Radek Vokal <rvokal@redhat.com> 5.3.1.0-1
+- update to 5.3.1 final version, fix version number
+
+* Wed Jul 12 2006 Radek Vokál <rvokal@redhat.com> 5.3.1.rc4-2
+- fix init script, read .options files from /etc/snmp (#195702)
+
+* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 5.3.1.rc4-1.1
+- rebuild
+
+* Mon Jul 10 2006 Radek Vokal <rvokal@redhat.com> 5.3.1.rc4-1
+- update to release candidate 4
+- fix lib dependencies on 64bit archs
+- supress perl build
+
+* Tue Jun 13 2006 Radek Vokal <rvokal@redhat.com> 5.3.1.pre3-2
+- add tcp-mib (#194856)
+
+* Fri Jun  2 2006 Radek Vokal <rvokal@redhat.com> 5.3.1.pre3-1
+- update to another prerelease (fixes perl agents)
+
+* Fri May 26 2006 Radek Vokal <rvokal@redhat.com> 5.3.1.pre2-4
+- fix lib version 
+
+* Thu May 25 2006 Radek Vokal <rvokal@redhat.com> 5.3.1.pre2-3
+- another multilib fix. Fix also net-snmp-config script
+
+* Wed May 24 2006 Radek Vokal <rvokal@redhat.com> 5.3.1.pre2-2
+- another attempt to fix multilib issue. Generate dummy net-snmp-config.h file
+
+* Tue May 23 2006 Radek Vokal <rvokal@redhat.com> 5.3.1.pre2-1
+- update to 5.3.1.pre2
+- fix multilib issues (#192736)
+  On system with /usr/lib64 use net-snmp-config64 and net-snmp-config64.h
+
+* Sat Apr 15 2006 Radek Vokál <rvokal@redhat.com> 5.3-8
+- fix missing IF-MIB::ifNumber.0 (#189007)
+
+* Wed Apr 05 2006 Radek Vokál <rvokal@redhat.com> 5.3-7
+- fix parsing of /proc/diskstats
+- fix disman monitor crash
+- fix perl vendor name
+- fix OID lookup fail
+
+* Sat Mar 25 2006 Radek Vokal <rvokal@redhat.com> 5.3-6
+- use net.ipv6.neigh.lo.retrans_time_ms (#186546)
+
+* Mon Mar 20 2006 Radek Vokal <rvokal@redhat.com> 5.3-5
+- allow disman/event-mib
+
+* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 5.3-4.2
+- bump again for double-long bug on ppc(64)
+
+* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 5.3-4.1
+- rebuilt for new gcc4.1 snapshot and glibc changes
+
+* Thu Feb  2 2006 Radek Vokál <rvokal@redhat.com> 5.3-4
+- fix crash on s390x and ppc64
+
+* Mon Jan 30 2006 Radek Vokál <rvokal@redhat.com> 5.3-3
+- fix for lm_Senors, the max is no longer a fixed value
+- parsing fixed for /proc/net/if_inet6
+
+* Wed Jan 18 2006 Radek Vokal <rvokal@redhat.com> 5.3-2
+-  Security fix. Bug granting write access to read-only users 
+   or communities which were configured  using the "rocommunity" 
+   or "rouser" snmpd.conf tokens fixed
+
+* Fri Dec 30 2005 Radek Vokal <rvokal@redhat.com>
+- upgrade to 5.3 
+
+* Fri Dec 16 2005 Jesse Keating <jkeating@redhat.com>
+- rebuilt for new gcj
+
+* Fri Dec 16 2005 Radek Vokal <rvokal@redhat.com> - 5.2.2-4
+- check for header files in configure
+- patch for SNMPv3 traps / session user creation (net-snmp bz#1374087)
+
+* Fri Dec 09 2005 Radek Vokal <rvokal@redhat.com> - 5.2.2-3
+- fix ipaddr return type on 64bit machines 
+
+* Wed Dec 07 2005 Radek Vokal <rvokal@redhat.com> - 5.2.2-2
+- fix read problem on stream sockets (net-snmp bz#1337534)
+
+* Tue Nov 29 2005 Radek Vokal <rvokal@redhat.com> - 5.2.2-1
+- upgrade to 5.2.2 final
+
+* Mon Nov 21 2005 Radek Vokal <rvokal@redhat.com> - 5.2.2-0.rc6.1
+- update to rc6, snmpnetstat changes due to license problems
+- persistent files in directory defined by snmp.conf persistentDir are 
+  loaded at startup
+
+* Tue Nov 15 2005 Radek Vokal <rvokal@redhat.com> - 5.2.2-0.rc5.1
+- another release candidate 
+
+* Tue Nov 08 2005 Radek Vokal <rvokal@redhat.com> - 5.2.2-0.rc4.2
+- Remove .la file from net-snmp-libs (#172618)
+- grab new openssl
+
+* Mon Nov 07 2005 Radek Vokal <rvokal@redhat.com> - 5.2.2-0.rc4.1
+- update to release candidate 4
+
+* Tue Nov 01 2005 Radek Vokal <rvokal@redhat.com> - 5.2.2-0.rc3.1
+- release candidate 3 of net-snmp-5.2.2
+
+* Tue Oct 25 2005 Radek Vokal <rvokal@redhat.com> - 5.2.2.rc2-1
+- rc2 prebuilt
+
+* Tue Sep 20 2005 Radek Vokal <rvokal@redhat.com> - 5.2.1.2-3
+- fix endian issues for addresses
+
+* Fri Aug 12 2005 Radek Vokal <rvokal@redhat.com> - 5.2.1.2-2
+- fix for s390x counter32 overflow (sachinp@in.ibm.com)
+
+* Wed Jul 13 2005 Radek Vokal <rvokal@redhat.com> - 5.2.1.2-1
+- CAN-2005-2177 new upstream version fixing DoS (#162908)
+
+* Tue May 31 2005 Radek Vokal <rvokal@redhat.com> - 5.2.1-13
+- CAN-2005-1740 net-snmp insecure temporary file usage (#158770)
+- patch from suse.de
+
+* Wed May 18 2005 Radek Vokal <rvokal@redhat.com> - 5.2.1-12
+- session free fixed, agentx modules build fine (#157851)
+- fixed dependency for net-snmp libs (#156932)
+
+* Wed May 04 2005 Radek Vokal <rvokal@redhat.com> - 5.2.1-11
+- report gigabit Ethernet speeds using Ethtool (#152480)
+
+* Tue Apr 19 2005 Radek Vokal <rvokal@redhat.com> - 5.2.1-10
+- fixed missing requires for devel package (#155221)
+
+* Wed Apr 06 2005 Radek Vokal <rvokal@redhat.com> - 5.2.1-9
+- switching to a different 64bit patch, hopefully 64bit problems are gone for a while
+
+* Mon Apr 04 2005 Radek Vokal <rvokal@redhat.com> - 5.2.1-8
+- net-snmp properly deals with large partitions (#153101) <jryska@redhat.com>
+
+* Thu Mar 31 2005 Radek Vokal <rvokal@redhat.com> - 5.2.1-7
+- agentx double free error fix <jp.fujitsu>
+
+* Thu Mar 24 2005 Radek Vokal <rvokal@redhat.com> - 5.2.1-6
+- fixed unexpected length for type ASN_UNSIGNED (#151892)
+- fixed uptime problems on ia64
+
+* Wed Mar 09 2005 Radek Vokal <rvokal@redhat.com> - 5.2.1-5
+- 64bit needed some changes, was causing timeouts on 64bit archs!? 
+- affects bugs #125432 and #132058
+
+* Tue Mar  1 2005 Tomas Mraz <tmraz@redhat.com> - 5.2.1-4
+- rebuild with openssl-0.9.7e
+
+* Wed Feb 23 2005 Radek Vokal <rvokal@redhat.com> - 5.1.2-3
+- patch from CVS - kill extra carriage return (#144917)
+- removed patch for interface indexing - doesn't show virtual interfaces
+
+* Tue Feb  8 2005 Jeremy Katz <katzj@redhat.com> - 5.2.1-2
+- rebuild for new librpm
+
+* Mon Jan 31 2005 Radek Vokal <rvokal@redhat.com> 5.2.1-1
+- new release, fixing several issues
+- pointer needs to be inicialized (#146417)
+
+* Mon Dec 27 2004 Radek Vokal <rvokal@redhat.com> 5.2-2
+- patch adding ipv6 support to ip system stats
+
+* Tue Nov 30 2004 Radek Vokal <rvokal@redhat.com> 5.2-1
+- net-snmp-5.2, patch clean-up
+
+* Mon Nov 15 2004 Radek Vokal <rvokal@redhat.com> 5.1.2-12
+- snmpd crash with 'interfaces' directives in snmpd.conf fixed #139010
+- rather dirty patch fixing conf directory for net-snmp-config
+
+* Fri Oct 15 2004 Radek Vokal <rvokal@redhat.com> 5.1.2-11
+- Logrotate support added (#125004)
+
+* Thu Oct 14 2004 Phil Knirsch <pknirsch@redhat.com> 5.1.2-10
+- Extended the libwrap and bsdcompat patches
+
+* Mon Oct 11 2004 Phil Knirsch <pknirsch@redhat.com> 5.1.2-9
+- Droped obsolete lm-sensors patch and enabled lmSensors module
+- Marked several patches to be removed for 5.1.3
+
+* Wed Sep 29 2004 Warren Togami <wtogami@redhat.com> 5.1.2-8
+- remove README* that do not apply to Linux
+- trim massive ChangeLog
+
+* Wed Sep 22 2004 Florian La Roche <Florian.LaRoche@redhat.de>
+- move ldconfig post/postun to libs subrpm
+
+* Wed Sep 15 2004 Phil Knirsch <pknirsch@redhat.com> 5.1.2-6
+- Split out libs package for multilib compatibility
+
+* Wed Sep 08 2004 Radek Vokal <rvokal@redhat.com> 5.1.2-4
+- New prereq for net-snmp-devel
+- lelf check removed from configure.in (#128748)
+- fixed snmpd coredump when sent SIGHUP (#127314)
+
+* Tue Sep 07 2004 Radek Vokal <rvokal@redhat.com> 5.1.2-3
+- Agentx failed to send trap, fixed (#130752, #122338)
+
+* Mon Sep 06 2004 Radek Vokal <rvokal@redhat.com> 5.1.2-2
+- Patch fixing uninitalized stack variable in smux_trap_process (#130179)
+
+* Wed Aug 18 2004 Phil Knirsch <pknirsch@redhat.com> 5.1.2-1
+- Update to 5.1.2
+- Removed net-snmp-5.0.1-initializer patch, included upstream
+
+* Tue Jun 15 2004 Phil Knirsch <pknirsch@redhat.com>
+- Fixed small bug in snmptrapd initscript (#126000).
+
+* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Thu May 06 2004 Phil Knirsch <pknirsch@redhat.com> 5.1.1-3
+- Reworked the perl filelist stuff (Thanks to marius feraru).
+
+* Thu Apr 08 2004 Phil Knirsch <pknirsch@redhat.com> 5.1.1-2
+- Added Kaj J. Niemi that fixes ipAdEntIfIndex problem (#119106)
+- Added Kaj J. Niemi to shut up memshared message for 2.6 kernel (#119203)
+
+* Tue Mar 23 2004 Phil Knirsch <pknirsch@redhat.com> 5.1.1-1
+- Update to latest upstream version 5.1.1
+- Included updated patches from Kaj J. Niemi (#118580).
+
+* Thu Mar 18 2004 Phil Knirsch <pknirsch@redhat.com> 5.1-12
+- Hacked an ugly perl hack to get rid of perl RPATH problems.
+- Fixed 64bit patch and applied it. ;-)
+
+* Tue Mar 02 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Wed Feb 04 2004 Phil Knirsch <pknirsch@redhat.com> 5.1-10
+- Included 64bit fix from Mark Langsdorf (#114645).
+
+* Tue Feb 03 2004 Phil Knirsch <pknirsch@redhat.com> 5.1-9
+- Reverted removal of _includir redefiniton due to php-snmp dependancy.
+- Remove SO_BSDCOMPAT setsockopt() call, deprecated.
+
+* Thu Jan 29 2004 Phil Knirsch <pknirsch@redhat.com> 5.1-8
+- Quite a bit of specfile cleanup from Marius FERARU.
+
+* Thu Jan 22 2004 Thomas Woerner <twoerner@redhat.com> 5.1-7
+- enabled pie (snmpd, snmptrapd) - postponed for ia64
+- added --with-pic to configure call
+
+* Thu Jan 15 2004 Phil Knirsch <pknirsch@redhat.com> 5.1-6
+- Fixed 64bit build problems when 32bit popt lib is installed.
+
+* Tue Jan 13 2004 Phil Knirsch <pknirsch@redhat.com> 5.1-5
+- rebuilt
+
+* Sun Jan 11 2004 Florian La Roche <Florian.LaRoche@redhat.de> 5.1-4
+- rebuild for new rpm
+
+* Wed Dec 10 2003 Phil Knirsch <pknirsch@redhat.com> 5.1-3
+- Removed snmpcheck again, needs perl(Tk) which we don't ship (#111194).
+- Fixed getopt definition in include file (#111209).
+- Included Kaj J. Niemi's patch for broken perl module (#111319).
+- Included Kaj J. Niemi's patch for broken async getnext perl call (#111479).
+- Included Kaj J. Niemi's patch for broken hr_storage (#111502).
+
+* Wed Nov 26 2003 Phil Knirsch <pknirsch@redhat.com> 5.1-2
+- Included BuildPrereq on lm_sensors-devel on x86 archs (#110616).
+- Fixed deprecated initscript options (#110618).
+
+* Wed Nov 19 2003 Phil Knirsch <pknirsch@redhat.com> 5.1-1
+- Updated to latest net-snmp-5.1 upstream version.
+- Tons of specfile and patch cleanup.
+- Cleaned up perl stuff (mib2c etc, see #107707).
+- Added lm_sensors support patch for x86 archs from Kaj J. Niemi (#107618).
+- Added support for custom mib paths and mibs to snmptrapd initscript (#102762)
+
+* Mon Oct 13 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.9-2
+- Due to rpm-devel we need elfutils-devel, too (#103982).
+
+* Mon Sep 29 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.9-1
+- Updated to latest upstream version net-snmp-5.0.9
+- Added patch to fix net-snmp-perl problems (#105842).
+
+* Tue Sep 23 2003 Florian La Roche <Florian.LaRoche@redhat.de>
+- allow compiling without tcp_wrappers
+
+* Wed Sep 17 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.8-11.1
+- rebuilt
+
+* Wed Sep 17 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.8-11
+- Fixed permission for net-snmp-config in net-snmp-devel
+
+* Mon Sep 08 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.8-10.1
+- rebuilt
+
+* Mon Sep 08 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.8-10
+- Moved net-snmp-config into devel package (#103927)
+
+* Fri Aug 22 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.8-9.1
+- rebuilt
+
+* Thu Aug 21 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.8-9
+- Added sample config to make net-snmp RFC 1213 compliant.
+
+* Fri Aug 15 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.8-8
+- Fixed problem with perl option (#102420).
+- Added patch for libwrap fix (#77926).
+
+* Tue Aug 12 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.8-7.1
+- rebuilt
+
+* Tue Aug 12 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.8-7
+- Fixed build problems on ppc64
+- Fixed double packaged manpages (#102075).
+
+* Thu Aug 07 2003 Phil Knirsch <pknirsch@redhat.com>
+- Fixed problem with new proc output (#98619, #89960).
+
+* Wed Aug 06 2003 Phil Knirsch <pknirsch@redhat.com>
+- Fixed ro/rw problem with v2 and v3 request (#89612)
+
+* Tue Aug 05 2003 Phil Knirsch <pknirsch@redhat.com>
+- Fixed permission problem for debuginfo (#101456)
+
+* Thu Jul 31 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.8-6.1
+- Fixed file list for latest build.
+
+* Thu Jul 31 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.8-6
+- Fixed build problems for net-snmp-perl.
+
+* Sun Jul 27 2003 Florian La Roche <Florian.LaRoche@redhat.de> 5.0.8-5
+- actually apply ipv6 patch
+
+* Wed Jun 04 2003 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Tue Apr 29 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.8-3
+- bumped release and rebuilt.
+
+* Tue Apr 29 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.8-2
+- Hack to make it build on 64bit platforms with /usr/lib64 correctly.
+- Fixed bug #85071 (leak of open descriptors for ipv6).
+
+* Fri Mar 28 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.8-1
+- Updated to latest upstream version 5.0.8 (bug #88580)
+
+* Thu Feb 13 2003 Phil Knirsch <pknirsch@redhat.com>
+- Included generation of perl stuff. Thanks to Harald Hoyer.
+
+* Wed Feb 12 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.7-1
+- Updated to net-snmp-5.0.7. Fixed especially the performance problem with
+  limited trees.
+
+* Tue Feb 11 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.6-17
+- Fixed ucd-snmp.redhat.conf (#78391).
+- Fixed snmpwalk examples in config file.
+
+* Mon Feb 10 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.6-15
+- Fixed invalid SMUX packet (#83487).
+
+* Thu Feb 06 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.6-14
+- Fixed the libdir problem.
+
+* Wed Feb 05 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.6-13
+- Updated the old libtool rpath patch.
+
+* Wed Jan 22 2003 Tim Powers <timp@redhat.com> 5.0.6-12
+- rebuilt
+
+* Tue Jan 14 2003 Phil Knirsch <pknirsch@redhat.com> 5.0.6-11
+- Updated nolibelf patch and activated it again.
+
+* Tue Jan  7 2003 Nalin Dahyabhai <nalin@redhat.com> 5.0.6-10
+- Rebuild
+
+* Tue Dec 17 2002 Phil Knirsch <pknirsch@redhat.com> 5.0.6-9
+- Added bzip2-devel to BuildPreReq (#76086, #70199).
+
+* Thu Nov 28 2002 Phil Knirsch <pknirsch@redhat.com> 5.0.6-8
+- Added patch to increase SMUXMAXSTRLEN. 
+
+* Thu Nov  7 2002 Tim Powers <timp@redhat.com> 5.0.6-6
+- rebuilt to fix broken deps
+- remove files from the buildroot that we don't want to ship
+
+* Thu Nov  7 2002 Joe Orton <jorton@redhat.com> 5.0.6-5
+- add fix for -DUCD_COMPATIBLE (#77405)
+
+* Thu Nov 07 2002 Phil Knirsch <pknirsch@redhat.com> 5.0.6-4
+- Another bump required. Some more specfile changes.
+
+* Wed Nov 06 2002 Phil Knirsch <pknirsch@redhat.com> 5.0.6-3
+- Bumped release and rebuilt.
+- Removed all dbFOO cruft again.
+
+* Wed Oct 09 2002 Phil Knirsch <pknirsch@redhat.com> 5.0.6-2
+- Updated to latest released version.
+
+* Sat Aug 31 2002 Florian La Roche <Florian.LaRoche@redhat.de>
+- do not link against -lelf
+
+* Thu Jun 27 2002 Phil Knirsch <pknirsch@redhat.com> 5.0.1-5
+- Added --enable-ucd-snmp-compatibility for compatibility with older version
+  and fixed installation thereof.
+- Got rid of the perl(Tk) dependancy by removing snmpcheck.
+- Include /usr/include/ucd-snmp in the filelist.
+- Fixed a problem with the ucd-snmp/version.h file.
+
+* Wed Jun 26 2002 Phil Knirsch <pknirsch@redhat.com> 5.0.1-1
+- Updated to 5.0.1
+- Dropped --enable-reentrant as it's currently broken
+
+* Tue Apr 23 2002 Phil Knirsch <pknirsch@redhat.com> 5.0-1
+- Switch to latest stable version, 5.0
+- Renamed the packate to net-snmp and obsoleted ucd-snmp.
+
+* Wed Apr 17 2002 Phil Knirsch <pknirsch@redhat.com> 4.2.4-3
+- Fixed problem with reload in initscript (#63526).
+
+* Mon Apr 15 2002 Tim Powers <timp@redhat.com> 4.2.4-2
+- rebuilt in new environment
+
+* Mon Apr 15 2002 Tim Powers <timp@redhat.com> 4.2.4-1
+- update to 4.2.4 final
+
+* Sat Apr 13 2002 Phil Knirsch <pknirsch@redhat.com> 4.2.4.pre3-5
+- Added some missing files to the %%files section.
+
+* Tue Apr 09 2002 Phil Knirsch <pknirsch@redhat.com> 4.2.4.pre3-4
+- Hardcoded the ETC_MNTTAB to point to "/etc/mtab".
+
+* Mon Apr 08 2002 Phil Knirsch <pknirsch@redhat.com> 4.2.4.pre3-3
+- Removed the check for dbFOO as we don't want to add another requirement.
+
+* Fri Apr 05 2002 Phil Knirsch <pknirsch@redhat.com> 4.2.4.pre3-2
+- Added missing BuildPrereq to openssl-devel (#61525)
+
+* Thu Apr 04 2002 Phil Knirsch <pknirsch@redhat.com> 4.2.4.pre3-1
+- Added ucd5820stat to the files section.
+- Updated to latest version (4.2.4.pre3)
+
+* Mon Mar 18 2002 Phil Knirsch <pknirsch@redhat.com> 4.2.4.pre2-1
+- Updated to latest version (4.2.4.pre2)
+
+* Tue Jan 29 2002 Phil Knirsch <pknirsch@redhat.com> 4.2.3-4
+- Added the snmptrapd init script as per request (#49205)
+- Fixed the again broken rpm query stuff (#57444)
+- Removed all old and none-used db related stuff (libs and header checks/files)
+
+* Mon Jan 07 2002 Phil Knirsch <pknirsch@redhat.com> 4.2.3-2
+- Included the Axioma Security Research fix for snmpnetstat from bugtraq.
+
+* Mon Dec 03 2001 Phil Knirsch <phil@redhat.de> 4.2.3-1
+- Update to 4.2.3 final.
+- Fixed libtool/rpath buildroot pollution problem.
+- Fixed library naming problem.
+
+* Fri Oct  5 2001 Philipp Knirsch <pknirsch@redhat.de>
+- Fixed a server segfault for snmpset operation (#53640). Thanks to Josh Giles
+  and Wes Hardaker for the patch.
+
+* Mon Sep 10 2001 Philipp Knirsch <pknirsch@redhat.de>
+- Fixed problem with RUNTESTS script.
+
+* Tue Sep  4 2001 Preston Brown <pbrown@redhat.com>
+- fixed patch related to bug #35016 (Dell)
+
+* Fri Aug 24 2001 Philipp Knirsch <pknirsch@redhat.de> 4.2.1-6
+- Fixed snmpd description (#52366)
+
+* Wed Aug 22 2001 Philipp Knirsch <pknirsch@redhat.de>
+- Final bcm5820 fix. Last one was broken.
+- Fixed bugzilla bug (#51960) where the binaries contained rpath references.
+
+* Wed Aug 15 2001 Philipp Knirsch <pknirsch@redhat.de>
+- Fixed a couple of security issues:
+  o /tmp race and setgroups() privilege problem
+  o Various buffer overflow and format string issues.
+  o One signedness problem in ASN handling.
+- Fixed an important RFE to support bcm5820 cards. (#51125)
+
+* Fri Jul 20 2001 Philipp Knirsch <pknirsch@redhat.de>
+- Removed tkmib from the package once again as we don't ship the Tk.pm CPAN
+  perl module required to run it (#49363)
+- Added missing Provides for the .so.0 libraries as rpm doesn't seem to find
+  those during the build anymore (it used to) (#46388)
+
+* Thu Jul 19 2001 Philipp Knirsch <pknirsch@redhat.de>
+- Enabled IPv6 support (RFE #47764)
+- Hopefully final fix of snmpwalk problem (#42153). Thanks to Douglas Warzecha
+  for the patch and Matt Domsch for reporting the problem.
+
+* Tue Jun 26 2001 Philipp Knirsch <pknirsch@redhat.de>
+- Fixed smux compilation problems (#41452)
+- Fixed wrong paths displayed in manpages (#43053)
+
+* Mon Jun 25 2001 Philipp Knirsch <pknirsch@redhat.de>
+- Updated to 4.2.1. Removed 2 obsolete patches (fromcvs and #18153)
+- Include /usr/share/snmp/snmpconf in %%files
+
+* Wed Jun 13 2001 Than Ngo <than@redhat.com>
+- fix to use libwrap in distro
+- add buildprereq: tcp_wrappers
+
+* Fri Jun  1 2001 Bill Nottingham <notting@redhat.com>
+- add a *new* patch for IP address return sizes
+
+* Fri Apr 20 2001 Bill Nottingham <notting@redhat.com>
+- add patch so that only four bytes are returned for IP addresses on ia64 (#32244)
+
+* Wed Apr 11 2001 Bill Nottingham <notting@redhat.com>
+- rebuild (missing alpha packages)
+
+* Fri Apr  6 2001 Matt Wilson <msw@redhat.com>
+- added ucd-snmp-4.2-null.patch to correcly handle a NULL value (#35016)
+
+* Tue Apr  3 2001 Preston Brown <pbrown@redhat.com>
+- clean up deinstallation (#34168)
+
+* Tue Mar 27 2001 Matt Wilson <msw@redhat.com>
+- return a usable RETVAL when running "service snmpd status" (#33571)
+
+* Tue Mar 13 2001 Matt Wilson <msw@redhat.com>
+- configure with --enable-reentrant and added "smux" and "agentx" to
+  --with-mib-modules= argument (#29626)
+
+* Fri Mar  2 2001 Nalin Dahyabhai <nalin@redhat.com>
+- rebuild in new environment
+
+* Mon Feb 26 2001 Tim Powers <timp@redhat.com>
+- fixed initscript, for reload and restart it was start then stop,
+  fixed. (#28477)
+
+* Fri Feb  2 2001 Trond Eivind Glomsrod <teg@redhat.com>
+- i18nize initscript
+
+* Sat Jan  6 2001 Jeff Johnson <jbj@redhat.com>
+- don't depend on /etc/init.d so that package will work with 6.2.
+- perl path fiddles no longer needed.
+- rely on brp-compress frpm rpm to compress man pages.
+- patch from ucd-snmp CVS (Wes Hardaker).
+- configure.in needs to check for rpm libraries correctly (#23033).
+- add simple logrotate script (#21399).
+- add options to create pidfile and log with syslog with addresses (#23476).
+
+* Sat Dec 30 2000 Jeff Johnson <jbj@redhat.com>
+- package for Red Hat 7.1.
+
+* Thu Dec 07 2000 Wes Hardaker <hardaker@users.sourceforge.net>
+- update for 4.2
+
+* Thu Oct 12 2000 Jeff Johnson <jbj@redhat.com>
+- add explicit format for syslog call (#18153).
+
+* Thu Jul 20 2000 Bill Nottingham <notting@redhat.com>
+- move initscript back
+
+* Thu Jul 20 2000 Jeff Johnson <jbj@redhat.com>
+- rebuild per Trond's request.
+
+* Tue Jul 18 2000 Nalin Dahyabhai <nalin@redhat.com>
+- fix syntax error that crept in with condrestart
+
+* Wed Jul 12 2000 Prospector <bugzilla@redhat.com>
+- automatic rebuild
+
+* Mon Jul 10 2000 Preston Brown <pbrown@redhat.com>
+- move initscript and add condrestart magic
+
+* Sat Jun 17 2000 Bill Nottingham <notting@redhat.com>
+- fix %%attr on man pages
+
+* Mon Jun 12 2000 Jeff Johnson <jbj@redhat.com>
+- tkmib doco had #!/usr/bin/perl55
+- include snmpcheck and tkmib again (still needs some CPAN module, however).
+
+* Tue Jun  6 2000 Jeff Johnson <jbj@redhat.com>
+- update to 4.1.2.
+- FHS packaging.
+- patch for rpm 4.0.
+
+* Thu May 18 2000 Trond Eivind Glomsrod <teg@redhat.com>
+- add version to buildroot
+- rebuilt with new libraries
+
+* Sun Feb 27 2000 Jeff Johnson <jbj@redhat.com>
+- default config was broken (from Wes Hardaker) (#9752)
+
+* Sun Feb 13 2000 Jeff Johnson <jbj@redhat.com>
+- compressed man pages.
+
+* Fri Feb 11 2000 Wes Hardaker <wjhardaker@ucdavis.edu>
+- update to 4.1.1
+
+* Sat Feb  5 2000 Florian La Roche <Florian.LaRoche@redhat.com>
+- change %%postun to %%preun
+
+* Thu Feb 3 2000 Elliot Lee <sopwith@redhat.com>
+- Don't ship tkmib, since we don't ship the perl modules needed to run it.
+(Bug #4881)
+
+* Tue Aug 31 1999 Jeff Johnson <jbj@redhat.com>
+- default config permits RO access to system group only (Wed Hardaker).
+
+* Sun Aug 29 1999 Jeff Johnson <jbj@redhat.com>
+- implement suggestions from Wes Hardaker.
+
+* Fri Aug 27 1999 Jeff Johnson <jbj@redhat.com>
+- stateless access to rpm database.
+
+* Wed Aug 25 1999 Jeff Johnson <jbj@redhat.com>
+- update to 4.0.1.
+
+* Mon Aug 16 1999 Bill Nottingham <notting@redhat.com>
+- initscript munging
+
+* Sat Jun 12 1999 Jeff Johnson <jbj@redhat.com>
+- update to 3.6.2 (#3219,#3259).
+- add missing man pages (#3057).
+
+* Thu Apr  8 1999 Wes Hardaker <wjhardaker@ucdavis.edu>
+- fix Source0 location.
+- fix the snmpd.conf file to use real community names.
+
+* Sun Mar 21 1999 Cristian Gafton <gafton@redhat.com> 
+- auto rebuild in the new build environment (release 3)
+
+* Fri Mar 19 1999 Preston Brown <pbrown@redhat.com>
+- upgrade to 3.6.1, fix configuration file stuff.
+
+* Wed Feb 24 1999 Preston Brown <pbrown@redhat.com>
+- Injected new description and group.
+
+* Tue Feb  2 1999 Jeff Johnson <jbj@redhat.com>
+- restore host resources mib
+- simplified config file
+- rebuild for 6.0.
+
+* Tue Dec 22 1998 Bill Nottingham <notting@redhat.com>
+- remove backup file to fix perl dependencies
+
+* Tue Dec  8 1998 Jeff Johnson <jbj@redhat.com>
+- add all relevant rpm scalars to host resources mib.
+
+* Sun Dec  6 1998 Jeff Johnson <jbj@redhat.com>
+- enable libwrap (#253)
+- enable host module (rpm queries over SNMP!).
+
+* Mon Oct 12 1998 Cristian Gafton <gafton@redhat.com>
+- strip binaries
+
+* Fri Oct  2 1998 Jeff Johnson <jbj@redhat.com>
+- update to 3.5.3.
+- don't include snmpcheck until perl-SNMP is packaged.
+
+* Thu Aug 13 1998 Jeff Johnson <jbj@redhat.com>
+- ucd-snmpd.init: start daemon w/o -f.
+
+* Tue Aug  4 1998 Jeff Johnson <jbj@redhat.com>
+- don't start snmpd unless requested
+- start snmpd after pcmcia.
+
+* Sun Jun 21 1998 Jeff Johnson <jbj@redhat.com>
+- all but config (especially SNMPv2p) ready for prime time
+
+* Sat Jun 20 1998 Jeff Johnson <jbj@redhat.com>
+- update to 3.5.
+
+* Tue Dec 30 1997 Otto Hammersmith <otto@redhat.com>
+- created the package... possibly replace cmu-snmp with this.