From e3bd1765320110570fbec1fdca51e68c4981133f Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Fri, 11 Aug 2017 00:24:30 +0200 Subject: [PATCH] Update net-snmp to use modern (rpm >= 4.6) API Signed-off-by: Igor Gnatenko --- net-snmp-5.7.3-modern-rpm-api.patch | 90 +++++++++++++++++++++++++++++ net-snmp.spec | 4 ++ 2 files changed, 94 insertions(+) create mode 100644 net-snmp-5.7.3-modern-rpm-api.patch diff --git a/net-snmp-5.7.3-modern-rpm-api.patch b/net-snmp-5.7.3-modern-rpm-api.patch new file mode 100644 index 0000000..9c982a9 --- /dev/null +++ b/net-snmp-5.7.3-modern-rpm-api.patch @@ -0,0 +1,90 @@ +diff -uNr net-snmp-5.7.3.orig/agent/mibgroup/host/data_access/swinst_rpm.c net-snmp-5.7.3/agent/mibgroup/host/data_access/swinst_rpm.c +--- net-snmp-5.7.3.orig/agent/mibgroup/host/data_access/swinst_rpm.c 2014-12-08 21:23:22.000000000 +0100 ++++ net-snmp-5.7.3/agent/mibgroup/host/data_access/swinst_rpm.c 2017-08-11 00:16:35.232470439 +0200 +@@ -96,8 +96,7 @@ + + rpmdbMatchIterator mi; + Header h; +- char *n, *v, *r, *g; +- int32_t *t; ++ const char *n, *v, *r, *g; + time_t install_time; + size_t date_len; + int i = 1; +@@ -119,11 +118,11 @@ + CONTAINER_INSERT(container, entry); + + h = headerLink( h ); +- 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); +@@ -133,7 +132,6 @@ + ? 2 /* operatingSystem */ + : 4; /* application */ + +- install_time = *t; + dt = date_n_time( &install_time, &date_len ); + if (date_len != 8 && date_len != 11) { + snmp_log(LOG_ERR, "Bogus length from date_n_time for %s", entry->swName); +diff -uNr net-snmp-5.7.3.orig/agent/mibgroup/host/hr_swinst.c net-snmp-5.7.3/agent/mibgroup/host/hr_swinst.c +--- net-snmp-5.7.3.orig/agent/mibgroup/host/hr_swinst.c 2014-12-08 21:23:22.000000000 +0100 ++++ net-snmp-5.7.3/agent/mibgroup/host/hr_swinst.c 2017-08-11 00:17:07.488544492 +0200 +@@ -484,9 +484,9 @@ + } + #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 */ +@@ -503,9 +503,8 @@ + 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); +@@ -665,7 +664,7 @@ + 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]; + +@@ -690,11 +689,9 @@ + 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/net-snmp.spec b/net-snmp.spec index de72f05..262a95c 100644 --- a/net-snmp.spec +++ b/net-snmp.spec @@ -67,6 +67,9 @@ Patch18: 0001-Link-libnetsnmptrapd-against-MYSQL_LIBS.patch # !!!WARNING!!! DO NOT USE IT FOR OLDER FEDORA RELEASES (>f26) Patch100: net-snmp-5.7.3-openssl.patch +# Modern RPM API means at least EL6 +Patch101: net-snmp-5.7.3-modern-rpm-api.patch + Requires(post): chkconfig Requires(preun): chkconfig # for /sbin/service @@ -242,6 +245,7 @@ cp %{SOURCE12} . %patch17 -p1 -b .mariadb102 %patch18 -p1 -b .perlfix %patch100 -p1 -b .openssl +%patch101 -p1 -b .modern-rpm-api %ifarch sparc64 s390 s390x # disable failing test - see https://bugzilla.redhat.com/show_bug.cgi?id=680697