diff options
-rw-r--r-- | .SRCINFO | 31 | ||||
-rw-r--r-- | 0001-pcre2.patch | 581 | ||||
-rw-r--r-- | PKGBUILD | 51 |
3 files changed, 639 insertions, 24 deletions
@@ -1,24 +1,35 @@ pkgbase = lib32-net-snmp - pkgdesc = A suite of applications used to implement SNMP v1, SNMP v2c and SNMP v3 using both IPv4 and IPv6 - pkgver = 5.8 - pkgrel = 3 + pkgdesc = A suite of applications used to implement SNMP v1, SNMP v2c and SNMP v3 using both IPv4 and IPv6 (32-bit) + pkgver = 5.9.4 + pkgrel = 1 url = http://www.net-snmp.org/ arch = x86_64 license = BSD - makedepends = python2-setuptools + makedepends = python-setuptools depends = net-snmp + depends = lib32-libnsl + depends = lib32-libpcap + depends = lib32-lm_sensors depends = lib32-openssl - depends = lib32-libnl depends = lib32-pciutils depends = lib32-pcre + provides = libnetsnmpagent.so + provides = libnetsnmphelpers.so + provides = libnetsnmpmibs.so + provides = libnetsnmp.so + provides = libnetsnmptrapd.so + provides = libsnmp.so options = !emptydirs options = !makeflags - source = http://downloads.sourceforge.net/net-snmp/net-snmp-5.8.tar.gz - source = http://downloads.sourceforge.net/net-snmp/net-snmp-5.8.tar.gz.asc - validpgpkeys = 8AAA779B597B405BBC329B6376CF47B8A77C5329 + source = https://downloads.sourceforge.net/net-snmp/net-snmp-5.9.4.tar.gz + source = https://downloads.sourceforge.net/net-snmp/net-snmp-5.9.4.tar.gz.asc + source = 0001-pcre2.patch validpgpkeys = 27CAA4A32E371383A33ED0587D5F9576E0F81533 + validpgpkeys = 6E6718AEF1EB5C65C32D1B2A356BC0B552D53CAB + validpgpkeys = 8AAA779B597B405BBC329B6376CF47B8A77C5329 validpgpkeys = D0F8F495DA6160C44EFFBF10F07B9D2DACB19FD6 - sha256sums = b2fc3500840ebe532734c4786b0da4ef0a5f67e51ef4c86b3345d697e4976adf - sha256sums = SKIP + sha512sums = a510fa91a21e9ddc86a12fd1d0bc6b356e63f3ea53f184d2e31439004d41d902390664134dc40b3b828eabb4282eaf3da628a07c4d480fa00eff7e700950c423 + sha512sums = SKIP + sha512sums = 16234f8bb66f6754d3b61752c2fd479676e504281e9857c72b44d99444aa95bb03263d0d93d1b9996daf760ed78344dcdcc7ab1f701dce9a5b51c7c7158a8f9d pkgname = lib32-net-snmp diff --git a/0001-pcre2.patch b/0001-pcre2.patch new file mode 100644 index 000000000000..0ba9822e79a4 --- /dev/null +++ b/0001-pcre2.patch @@ -0,0 +1,581 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: gagan sidhu <gagan@hotmail.com> +Date: Sun, 21 May 2023 15:47:36 -0600 +Subject: [PATCH 1/3] add pcre2 support + +(cherry picked from commit d3e95c87b32397815f6d5bcfc844259f2552697a) + + Conflicts: + agent/mibgroup/host/data_access/swrun.c + agent/mibgroup/if-mib/data_access/interface.c + agent/mibgroup/struct.h + agent/mibgroup/ucd-snmp/proc.c + configure.d/config_os_libs1 + include/net-snmp/data_access/interface.h +--- + agent/mibgroup/host/data_access/swrun.c | 18 ++++++-- + agent/mibgroup/if-mib/data_access/interface.c | 44 ++++++++++++++++--- + agent/mibgroup/struct.h | 2 +- + agent/mibgroup/ucd-snmp/proc.c | 27 +++++++++--- + agent/mibgroup/ucd-snmp/proc.h | 2 +- + configure.d/config_os_libs1 | 27 ++++++++++++ + configure.d/config_project_with_enable | 4 ++ + include/net-snmp/data_access/interface.h | 9 +++- + include/net-snmp/data_access/swrun.h | 2 +- + include/net-snmp/types.h | 2 +- + 10 files changed, 116 insertions(+), 21 deletions(-) + +diff --git a/agent/mibgroup/host/data_access/swrun.c b/agent/mibgroup/host/data_access/swrun.c +index f58143a0b7..f0442b4493 100644 +--- a/agent/mibgroup/host/data_access/swrun.c ++++ b/agent/mibgroup/host/data_access/swrun.c +@@ -17,7 +17,10 @@ + #include "swrun.h" + #include "swrun_private.h" + +-#ifdef HAVE_PCRE_H ++#if defined(HAVE_PCRE2_H) ++#define PCRE2_CODE_UNIT_WIDTH 8 ++#include <pcre2.h> ++#elif defined(HAVE_PCRE_H) + #include <pcre.h> + #endif + +@@ -100,14 +103,21 @@ swrun_max_processes( void ) + #endif /* NETSNMP_FEATURE_REMOVE_SWRUN_MAX_PROCESSES */ + + #ifndef NETSNMP_FEATURE_REMOVE_SWRUN_COUNT_PROCESSES_BY_REGEX +-#ifdef HAVE_PCRE_H ++#if defined(HAVE_PCRE2_H) || defined(HAVE_PCRE_H) + int + swrun_count_processes_by_regex( char *name, netsnmp_regex_ptr regexp ) + { + netsnmp_swrun_entry *entry; + netsnmp_iterator *it; + int i = 0; ++#ifdef HAVE_PCRE2_H ++ pcre2_match_data *ndx_match; ++ int *found_ndx; ++ ndx_match = pcre2_match_data_create(30, NULL); ++ found_ndx = pcre2_get_ovector_pointer(ndx_match); ++#elif HAVE_PCRE_H + int found_ndx[30]; ++#endif + int found; + char fullCommand[64 + 128 + 128 + 3]; + +@@ -125,7 +135,9 @@ swrun_count_processes_by_regex( char *name, netsnmp_regex_ptr regexp ) + } + } + ITERATOR_RELEASE( it ); +- ++#ifdef HAVE_PCRE2_H ++ pcre2_match_data_free(ndx_match); ++#endif + return i; + } + #endif /* HAVE_PCRE_H */ +diff --git a/agent/mibgroup/if-mib/data_access/interface.c b/agent/mibgroup/if-mib/data_access/interface.c +index 3f1b392864..5d714e9895 100644 +--- a/agent/mibgroup/if-mib/data_access/interface.c ++++ b/agent/mibgroup/if-mib/data_access/interface.c +@@ -16,7 +16,11 @@ + #include "if-mib/ifTable/ifTable.h" + #include "if-mib/data_access/interface.h" + #include "interface_private.h" +-#if defined(HAVE_PCRE_H) ++ ++#if defined(HAVE_PCRE2_H) ++#define PCRE2_CODE_UNIT_WIDTH 8 ++#include <pcre2.h> ++#elif defined(HAVE_PCRE_H) + #include <pcre.h> + #elif defined(HAVE_REGEX_H) + #include <sys/types.h> +@@ -824,7 +828,13 @@ int netsnmp_access_interface_max_reached(const char *name) + int netsnmp_access_interface_include(const char *name) + { + netsnmp_include_if_list *if_ptr; +-#ifdef HAVE_PCRE_H ++#if defined(HAVE_PCRE2_H) ++ //pcre_exec->pcre2_match ++ //ovector->pcre2_match_data ++ pcre2_match_data *ndx_match; ++ ndx_match = pcre2_match_data_create(3, NULL); ++ int *found_ndx = pcre2_get_ovector_pointer(ndx_match); ++#elif defined(HAVE_PCRE_H) + int found_ndx[3]; + #endif + +@@ -840,7 +850,13 @@ int netsnmp_access_interface_include(const char *name) + + + for (if_ptr = include_list; if_ptr; if_ptr = if_ptr->next) { +-#if defined(HAVE_PCRE_H) ++#if defined(HAVE_PCRE2_H) ++ if (pcre2_match(if_ptr->regex_ptr, name, strlen(name), 0, 0, ++ ndx_match, NULL) >= 0) { ++ pcre2_match_data_free(ndx_match); ++ return TRUE; ++ } ++#elif defined(HAVE_PCRE_H) + if (pcre_exec(if_ptr->regex_ptr, NULL, name, strlen(name), 0, 0, + found_ndx, 3) >= 0) + return TRUE; +@@ -964,7 +980,13 @@ _parse_include_if_config(const char *token, char *cptr) + { + netsnmp_include_if_list *if_ptr, *if_new; + char *name, *st; +-#if defined(HAVE_PCRE_H) ++#if defined(HAVE_PCRE2_H) ++ //we can only get the message upon calling pcre2_error_message. ++ // so an additional variable is required. ++ int pcre2_err_code; ++ unsigned char pcre2_error[128]; ++ int pcre2_error_offset; ++#elif defined(HAVE_PCRE_H) + const char *pcre_error; + int pcre_error_offset; + #elif defined(HAVE_REGEX_H) +@@ -996,7 +1018,15 @@ _parse_include_if_config(const char *token, char *cptr) + config_perror("Out of memory"); + goto err; + } +-#if defined(HAVE_PCRE_H) ++#if defined(HAVE_PCRE2_H) ++ if_new->regex_ptr = pcre2_compile(if_new->name, PCRE2_ZERO_TERMINATED, 0, ++ &pcre2_err_code, &pcre2_error_offset, NULL); ++ if (!if_new->regex_ptr) { ++ pcre2_get_error_message(pcre2_err_code, pcre2_error, 128); ++ config_perror(pcre2_error); ++ goto err; ++ } ++#elif defined(HAVE_PCRE_H) + if_new->regex_ptr = pcre_compile(if_new->name, 0, &pcre_error, + &pcre_error_offset, NULL); + if (!if_new->regex_ptr) { +@@ -1032,7 +1062,7 @@ _parse_include_if_config(const char *token, char *cptr) + + err: + if (if_new) { +-#if defined(HAVE_PCRE_H) || defined(HAVE_REGEX_H) ++#if defined(HAVE_PCRE2_H) || defined(HAVE_PCRE_H) || defined(HAVE_REGEX_H) + free(if_new->regex_ptr); + #endif + free(if_new->name); +@@ -1047,7 +1077,7 @@ _free_include_if_config(void) + + while (if_ptr) { + if_next = if_ptr->next; +-#if defined(HAVE_PCRE_H) ++#if defined(HAVE_PCRE2_H) || defined(HAVE_PCRE_H) + free(if_ptr->regex_ptr); + #elif defined(HAVE_REGEX_H) + regfree(if_ptr->regex_ptr); +diff --git a/agent/mibgroup/struct.h b/agent/mibgroup/struct.h +index d6c69c0449..d6d85e4124 100644 +--- a/agent/mibgroup/struct.h ++++ b/agent/mibgroup/struct.h +@@ -30,7 +30,7 @@ struct extensible { + + struct myproc { + char name[STRMAX]; +-#ifdef HAVE_PCRE_H ++#if defined(HAVE_PCRE2_H) || defined(HAVE_PCRE_H) + netsnmp_regex_ptr regexp; + #endif + char fixcmd[STRMAX]; +diff --git a/agent/mibgroup/ucd-snmp/proc.c b/agent/mibgroup/ucd-snmp/proc.c +index 01704e8f39..f819122bc2 100644 +--- a/agent/mibgroup/ucd-snmp/proc.c ++++ b/agent/mibgroup/ucd-snmp/proc.c +@@ -39,7 +39,10 @@ + # include <time.h> + # endif + #endif +-#ifdef HAVE_PCRE_H ++#ifdef HAVE_PCRE2_H ++#define PCRE2_CODE_UNIT_WIDTH 8 ++#include <pcre2.h> ++#elif HAVE_PCRE_H + #include <pcre.h> + #endif + +@@ -134,7 +137,7 @@ proc_free_config(void) + for (ptmp = procwatch; ptmp != NULL;) { + ptmp2 = ptmp; + ptmp = ptmp->next; +-#ifdef HAVE_PCRE_H ++#if defined(HAVE_PCRE2_H) || defined(HAVE_PCRE_H) + free(ptmp2->regexp.regex_ptr); + #endif + free(ptmp2); +@@ -208,7 +211,7 @@ proc_parse_config(const char *token, char *cptr) + if (*procp == NULL) + return; /* memory alloc error */ + numprocs++; +-#ifdef HAVE_PCRE_H ++#if defined(HAVE_PCRE2_H) || defined(HAVE_PCRE_H) + (*procp)->regexp.regex_ptr = NULL; + #endif + /* +@@ -220,9 +223,22 @@ proc_parse_config(const char *token, char *cptr) + cptr = skip_not_white(cptr); + if ((cptr = skip_white(cptr))) { + (*procp)->min = atoi(cptr); +-#ifdef HAVE_PCRE_H ++#if defined(HAVE_PCRE2_H) || defined(HAVE_PCRE_H) + cptr = skip_not_white(cptr); + if ((cptr = skip_white(cptr))) { ++ DEBUGMSGTL(("ucd-snmp/regexp_proc", "Loading regex %s\n", cptr)); ++#ifdef HAVE_PCRE2_H ++ unsigned char pcre2_error_msg[128]; ++ int pcre2_err_code; ++ int pcre2_error_offset; ++ ++ (*procp)->regexp.regex_ptr = ++ pcre2_compile(cptr, PCRE2_ZERO_TERMINATED, 0, &pcre2_err_code, &pcre2_error_offset, NULL); ++ pcre2_get_error_message(pcre2_err_code, pcre2_error_msg, 128); ++ if ((*procp)->regexp.regex_ptr == NULL) { ++ config_perror(pcre2_error_msg); ++ } ++#elif HAVE_PCRE_H + const char *pcre_error; + int pcre_error_offset; + +@@ -232,6 +248,7 @@ proc_parse_config(const char *token, char *cptr) + if ((*procp)->regexp.regex_ptr == NULL) { + config_perror(pcre_error); + } ++#endif + } + #endif + } else +@@ -406,7 +423,7 @@ sh_count_procs(char *procname) + return swrun_count_processes_by_name( procname ); + } + +-#ifdef HAVE_PCRE_H ++#if defined(HAVE_PCRE2_H) || defined(HAVE_PCRE_H) + netsnmp_feature_require(swrun_count_processes_by_regex); + int + sh_count_procs_by_regex(char *procname, netsnmp_regex_ptr regexp) +diff --git a/agent/mibgroup/ucd-snmp/proc.h b/agent/mibgroup/ucd-snmp/proc.h +index dd95082339..001fcfa3be 100644 +--- a/agent/mibgroup/ucd-snmp/proc.h ++++ b/agent/mibgroup/ucd-snmp/proc.h +@@ -12,7 +12,7 @@ config_require(util_funcs) + extern WriteMethod fixProcError; + int sh_count_myprocs(struct myproc *); + int sh_count_procs(char *); +-#ifdef HAVE_PCRE_H ++#if defined(HAVE_PCRE2_H) || defined(HAVE_PCRE_H) + int sh_count_procs_by_regex(char *, netsnmp_regex_ptr); + #endif + +diff --git a/configure.d/config_os_libs1 b/configure.d/config_os_libs1 +index 3ccd41c1a8..0bbbf38701 100644 +--- a/configure.d/config_os_libs1 ++++ b/configure.d/config_os_libs1 +@@ -97,6 +97,32 @@ LIBS="$netsnmp_save_LIBS" + # + # regex in process table + # ++if test "x$with_pcre2" != "xno"; then ++ AC_CHECK_HEADER([pcre2.h], [ ++ AC_DEFINE([HAVE_PCRE2_H], [1], [Define to 1 if you have <pcre2.h>.]) ++ pcre2_h=yes ++ ], ++ [pcre2_h=no], [#define PCRE2_CODE_UNIT_WIDTH 8] ++ ) ++fi ++if test "x$pcre2header_h" = "xno" -o "x$pcre2_h" = "xno" ; then ++ if test "x$with_pcre2" = "xyes" ; then ++ AC_MSG_ERROR([Could not find the pcre2 header file needed and was specifically asked to use pcre2 support]) ++ else ++ with_pcre2=no ++ fi ++fi ++ ++if test "x$with_pcre2" != "xno"; then ++ NETSNMP_SEARCH_LIBS([pcre2_match_8], [pcre2-8], [ ++ LMIBLIBS="$LMIBLIBS -lpcre2-8" ++ ],,, LAGENTLIBS) ++ AC_SUBST(LAGENTLIBS) ++ AC_SUBST(LMIBLIBS) ++fi ++ ++if test "x$with_pcre2" != "xyes"; then ++ + if test "x$with_pcre" != "xno"; then + AC_CHECK_HEADER([pcre.h], [ + AC_DEFINE([HAVE_PCRE_H], [1], [Define to 1 if you have <pcre.h>.]) +@@ -123,3 +149,4 @@ if test "x$with_pcre" != "xno"; then + AC_SUBST(LAGENTLIBS) + AC_SUBST(LMIBLIBS) + fi ++fi +diff --git a/configure.d/config_project_with_enable b/configure.d/config_project_with_enable +index cdf56deb69..b6dabfbf8d 100644 +--- a/configure.d/config_project_with_enable ++++ b/configure.d/config_project_with_enable +@@ -160,6 +160,10 @@ NETSNMP_ARG_WITH(rpm, + management system when building the host MIB + module.]) + ++NETSNMP_ARG_WITH(pcre2-8, ++[ --without-pcre2 Don't include pcre2 process searching ++ support in the agent.], ++ with_pcre2="$withval", with_pcre2="maybe") + + NETSNMP_ARG_WITH(pcre, + [ --without-pcre Don't include pcre process searching +diff --git a/include/net-snmp/data_access/interface.h b/include/net-snmp/data_access/interface.h +index 36c32475f5..2c7c880340 100644 +--- a/include/net-snmp/data_access/interface.h ++++ b/include/net-snmp/data_access/interface.h +@@ -10,7 +10,10 @@ + extern "C" { + #endif + +-#if defined(HAVE_PCRE_H) ++#if defined(HAVE_PCRE2_H) ++#define PCRE2_CODE_UNIT_WIDTH 8 ++#include <pcre2.h> ++#elif defined(HAVE_PCRE_H) + #include <pcre.h> + #elif defined(HAVE_REGEX_H) + #include <regex.h> +@@ -211,7 +214,9 @@ typedef struct _conf_if_list { + typedef netsnmp_conf_if_list conf_if_list; /* backwards compat */ + + typedef struct _include_if_list { +-#if defined(HAVE_PCRE_H) ++#if defined(HAVE_PCRE2_H) ++ pcre2_code *regex_ptr; ++#elif defined(HAVE_PCRE_H) + pcre *regex_ptr; + #elif defined(HAVE_REGEX_H) + regex_t *regex_ptr; +diff --git a/include/net-snmp/data_access/swrun.h b/include/net-snmp/data_access/swrun.h +index 2b8636b7a8..578f1ed6d7 100644 +--- a/include/net-snmp/data_access/swrun.h ++++ b/include/net-snmp/data_access/swrun.h +@@ -90,7 +90,7 @@ extern "C" { + int swrun_count_processes_by_name( char *name ); + + #if !defined(NETSNMP_FEATURE_REMOVE_SWRUN_COUNT_PROCESSES_BY_REGEX) \ +- && defined(HAVE_PCRE_H) ++ && (defined(HAVE_PCRE2_H) || defined(HAVE_PCRE_H)) + int swrun_count_processes_by_regex(char *name, netsnmp_regex_ptr regexp); + #endif + +diff --git a/include/net-snmp/types.h b/include/net-snmp/types.h +index d489f37b16..eb1b8f1b28 100644 +--- a/include/net-snmp/types.h ++++ b/include/net-snmp/types.h +@@ -63,7 +63,7 @@ typedef long ssize_t; + typedef unsigned long int nfds_t; + #endif + +-#ifdef HAVE_PCRE_H ++#if defined(HAVE_PCRE2_H) || defined(HAVE_PCRE_H) + /* + * Abstract the pcre typedef such that not all *.c files have to include + * <pcre.h>. +-- +2.43.2 + + +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Bart Van Assche <bvanassche@acm.org> +Date: Sun, 21 May 2023 16:18:56 -0700 +Subject: [PATCH 2/3] Improve pcre2 support + +Fix compiler warnings. Convert C++ comments to C comments. Make sure that +declarations occur before statements. + +(cherry picked from commit 346b6f8959513320e5b674fd670c49ba2cd43af5) + + Conflicts: + agent/mibgroup/host/data_access/swrun.c +--- + agent/mibgroup/host/data_access/swrun.c | 16 +++++++--- + agent/mibgroup/if-mib/data_access/interface.c | 32 ++++++++++--------- + agent/mibgroup/ucd-snmp/proc.c | 12 ++++--- + 3 files changed, 35 insertions(+), 25 deletions(-) + +diff --git a/agent/mibgroup/host/data_access/swrun.c b/agent/mibgroup/host/data_access/swrun.c +index f0442b4493..6bfb267531 100644 +--- a/agent/mibgroup/host/data_access/swrun.c ++++ b/agent/mibgroup/host/data_access/swrun.c +@@ -111,10 +111,7 @@ swrun_count_processes_by_regex( char *name, netsnmp_regex_ptr regexp ) + netsnmp_iterator *it; + int i = 0; + #ifdef HAVE_PCRE2_H +- pcre2_match_data *ndx_match; +- int *found_ndx; +- ndx_match = pcre2_match_data_create(30, NULL); +- found_ndx = pcre2_get_ovector_pointer(ndx_match); ++ pcre2_match_data *ndx_match = pcre2_match_data_create(30, NULL); + #elif HAVE_PCRE_H + int found_ndx[30]; + #endif +@@ -122,14 +119,23 @@ swrun_count_processes_by_regex( char *name, netsnmp_regex_ptr regexp ) + char fullCommand[64 + 128 + 128 + 3]; + + netsnmp_cache_check_and_reload(swrun_cache); +- if ( !swrun_container || !name || !regexp.regex_ptr ) ++ if ( !swrun_container || !name || !regexp.regex_ptr ) { ++#ifdef HAVE_PCRE2_H ++ pcre2_match_data_free(ndx_match); ++#endif + return 0; /* or -1 */ ++ } + + it = CONTAINER_ITERATOR( swrun_container ); + while ((entry = (netsnmp_swrun_entry*)ITERATOR_NEXT( it )) != NULL) { + /* need to assemble full command back so regexps can get full picture */ + sprintf(fullCommand, "%s %s", entry->hrSWRunPath, entry->hrSWRunParameters); ++#ifdef HAVE_PCRE2_H ++ found = pcre2_match(regexp.regex_ptr, (unsigned char *)fullCommand, ++ strlen(fullCommand), 0, 0, ndx_match, NULL); ++#elif HAVE_PCRE_H + found = pcre_exec(regexp.regex_ptr, NULL, fullCommand, strlen(fullCommand), 0, 0, found_ndx, 30); ++#endif + if (found > 0) { + i++; + } +diff --git a/agent/mibgroup/if-mib/data_access/interface.c b/agent/mibgroup/if-mib/data_access/interface.c +index 5d714e9895..eda9a17070 100644 +--- a/agent/mibgroup/if-mib/data_access/interface.c ++++ b/agent/mibgroup/if-mib/data_access/interface.c +@@ -828,12 +828,8 @@ int netsnmp_access_interface_max_reached(const char *name) + int netsnmp_access_interface_include(const char *name) + { + netsnmp_include_if_list *if_ptr; +-#if defined(HAVE_PCRE2_H) +- //pcre_exec->pcre2_match +- //ovector->pcre2_match_data +- pcre2_match_data *ndx_match; +- ndx_match = pcre2_match_data_create(3, NULL); +- int *found_ndx = pcre2_get_ovector_pointer(ndx_match); ++#if defined(HAVE_PCRE2_H) ++ pcre2_match_data *ndx_match = pcre2_match_data_create(3, NULL); + #elif defined(HAVE_PCRE_H) + int found_ndx[3]; + #endif +@@ -851,8 +847,8 @@ int netsnmp_access_interface_include(const char *name) + + for (if_ptr = include_list; if_ptr; if_ptr = if_ptr->next) { + #if defined(HAVE_PCRE2_H) +- if (pcre2_match(if_ptr->regex_ptr, name, strlen(name), 0, 0, +- ndx_match, NULL) >= 0) { ++ if (pcre2_match(if_ptr->regex_ptr, (const unsigned char *)name, ++ strlen(name), 0, 0, ndx_match, NULL) >= 0) { + pcre2_match_data_free(ndx_match); + return TRUE; + } +@@ -981,11 +977,13 @@ _parse_include_if_config(const char *token, char *cptr) + netsnmp_include_if_list *if_ptr, *if_new; + char *name, *st; + #if defined(HAVE_PCRE2_H) +- //we can only get the message upon calling pcre2_error_message. +- // so an additional variable is required. ++ /* ++ * We can only get the message upon calling pcre2_error_message. ++ * so an additional variable is required. ++ */ + int pcre2_err_code; +- unsigned char pcre2_error[128]; +- int pcre2_error_offset; ++ char pcre2_error[128]; ++ size_t pcre2_error_offset; + #elif defined(HAVE_PCRE_H) + const char *pcre_error; + int pcre_error_offset; +@@ -1019,10 +1017,14 @@ _parse_include_if_config(const char *token, char *cptr) + goto err; + } + #if defined(HAVE_PCRE2_H) +- if_new->regex_ptr = pcre2_compile(if_new->name, PCRE2_ZERO_TERMINATED, 0, +- &pcre2_err_code, &pcre2_error_offset, NULL); ++ if_new->regex_ptr = pcre2_compile((const unsigned char *)if_new->name, ++ PCRE2_ZERO_TERMINATED, 0, ++ &pcre2_err_code, &pcre2_error_offset, ++ NULL); + if (!if_new->regex_ptr) { +- pcre2_get_error_message(pcre2_err_code, pcre2_error, 128); ++ pcre2_get_error_message(pcre2_err_code, ++ (unsigned char *)pcre2_error, ++ sizeof(pcre2_error)); + config_perror(pcre2_error); + goto err; + } +diff --git a/agent/mibgroup/ucd-snmp/proc.c b/agent/mibgroup/ucd-snmp/proc.c +index f819122bc2..d10e428ecd 100644 +--- a/agent/mibgroup/ucd-snmp/proc.c ++++ b/agent/mibgroup/ucd-snmp/proc.c +@@ -226,15 +226,17 @@ proc_parse_config(const char *token, char *cptr) + #if defined(HAVE_PCRE2_H) || defined(HAVE_PCRE_H) + cptr = skip_not_white(cptr); + if ((cptr = skip_white(cptr))) { +- DEBUGMSGTL(("ucd-snmp/regexp_proc", "Loading regex %s\n", cptr)); + #ifdef HAVE_PCRE2_H +- unsigned char pcre2_error_msg[128]; ++ char pcre2_error_msg[128]; + int pcre2_err_code; +- int pcre2_error_offset; ++ size_t pcre2_error_offset; + ++ DEBUGMSGTL(("ucd-snmp/regexp_proc", "Loading regex %s\n", cptr)); + (*procp)->regexp.regex_ptr = +- pcre2_compile(cptr, PCRE2_ZERO_TERMINATED, 0, &pcre2_err_code, &pcre2_error_offset, NULL); +- pcre2_get_error_message(pcre2_err_code, pcre2_error_msg, 128); ++ pcre2_compile((const unsigned char *)cptr, PCRE2_ZERO_TERMINATED, 0, &pcre2_err_code, &pcre2_error_offset, NULL); ++ pcre2_get_error_message(pcre2_err_code, ++ (unsigned char *)pcre2_error_msg, ++ sizeof(pcre2_error_msg)); + if ((*procp)->regexp.regex_ptr == NULL) { + config_perror(pcre2_error_msg); + } +-- +2.43.2 + + +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Niels Baggesen <nba@users.sourceforge.net> +Date: Mon, 22 May 2023 18:44:36 +0200 +Subject: [PATCH 3/3] if-mib/data_access/interface.c: plug a leak with pcre2 + +(cherry picked from commit e5aadf1e78c624a8e4147d4b70a7795497a50e73) +--- + agent/mibgroup/if-mib/data_access/interface.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/agent/mibgroup/if-mib/data_access/interface.c b/agent/mibgroup/if-mib/data_access/interface.c +index eda9a17070..82a77ab37b 100644 +--- a/agent/mibgroup/if-mib/data_access/interface.c ++++ b/agent/mibgroup/if-mib/data_access/interface.c +@@ -829,7 +829,7 @@ int netsnmp_access_interface_include(const char *name) + { + netsnmp_include_if_list *if_ptr; + #if defined(HAVE_PCRE2_H) +- pcre2_match_data *ndx_match = pcre2_match_data_create(3, NULL); ++ pcre2_match_data *ndx_match; + #elif defined(HAVE_PCRE_H) + int found_ndx[3]; + #endif +@@ -844,6 +844,9 @@ int netsnmp_access_interface_include(const char *name) + */ + return TRUE; + ++#if defined(HAVE_PCRE2_H) ++ ndx_match = pcre2_match_data_create(3, NULL); ++#endif + + for (if_ptr = include_list; if_ptr; if_ptr = if_ptr->next) { + #if defined(HAVE_PCRE2_H) +-- +2.43.2 + @@ -1,31 +1,53 @@ +# Maintainer: Andrew Kozik <andrewkoz at live dot com> + _pkgbasename=net-snmp pkgname=lib32-${_pkgbasename} -pkgver=5.8 -pkgrel=3 -pkgdesc="A suite of applications used to implement SNMP v1, SNMP v2c and SNMP v3 using both IPv4 and IPv6" +pkgver=5.9.4 +pkgrel=1 +pkgdesc="A suite of applications used to implement SNMP v1, SNMP v2c and SNMP v3 using both IPv4 and IPv6 (32-bit)" arch=('x86_64') url="http://www.net-snmp.org/" license=('BSD') -depends=("${_pkgbasename}" 'lib32-openssl' 'lib32-libnl' 'lib32-pciutils' 'lib32-pcre') -makedepends=('python2-setuptools') +depends=(${_pkgbasename} 'lib32-libnsl' 'lib32-libpcap' 'lib32-lm_sensors' 'lib32-openssl' 'lib32-pciutils' 'lib32-pcre') +makedepends=('python-setuptools') +provides=('libnetsnmpagent.so' + 'libnetsnmphelpers.so' + 'libnetsnmpmibs.so' + 'libnetsnmp.so' + 'libnetsnmptrapd.so' + 'libsnmp.so') options=('!emptydirs' '!makeflags') -source=(http://downloads.sourceforge.net/${_pkgbasename}/${_pkgbasename}-${pkgver}.tar.gz{,.asc}) -sha256sums=('b2fc3500840ebe532734c4786b0da4ef0a5f67e51ef4c86b3345d697e4976adf' 'SKIP') -validpgpkeys=('8AAA779B597B405BBC329B6376CF47B8A77C5329' - '27CAA4A32E371383A33ED0587D5F9576E0F81533' +source=(https://downloads.sourceforge.net/${_pkgbasename}/${_pkgbasename}-${pkgver}.tar.gz{,.asc} + 0001-pcre2.patch) +sha512sums=('a510fa91a21e9ddc86a12fd1d0bc6b356e63f3ea53f184d2e31439004d41d902390664134dc40b3b828eabb4282eaf3da628a07c4d480fa00eff7e700950c423' + 'SKIP' + '16234f8bb66f6754d3b61752c2fd479676e504281e9857c72b44d99444aa95bb03263d0d93d1b9996daf760ed78344dcdcc7ab1f701dce9a5b51c7c7158a8f9d') +validpgpkeys=('27CAA4A32E371383A33ED0587D5F9576E0F81533' + '6E6718AEF1EB5C65C32D1B2A356BC0B552D53CAB' + '8AAA779B597B405BBC329B6376CF47B8A77C5329' 'D0F8F495DA6160C44EFFBF10F07B9D2DACB19FD6') # Net-SNMP Administrators prepare() { cd ${_pkgbasename}-${pkgver} + patch -Np1 -i ../0001-pcre2.patch autoreconf -i } build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + cd ${_pkgbasename}-${pkgver} - CFLAGS="-m32" CPPFLAGS="-m32" PYTHONPROG=/usr/bin/python2 ./configure --prefix=/usr \ - --libdir=/usr/lib32 \ - --enable-ucd-snmp-compatibility \ + ./configure \ + --host=i686-pc-linux-gnu \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --sysconfdir=/etc --sbindir=/usr/bin \ + --mandir=/usr/share/man \ + --enable-blumenthal-aes \ --enable-ipv6 \ + --enable-ucd-snmp-compatibility \ --disable-embedded-perl \ --disable-perl-cc-checks \ --without-perl-modules \ @@ -34,7 +56,7 @@ build() { --with-sys-contact="root@localhost" \ --with-sys-location="Unknown" \ --with-logfile="/var/log/snmpd.log" \ - --with-mib-modules="host misc/ipfwacc ucd-snmp/diskio tunnel ucd-snmp/dlmod" \ + --with-mib-modules="host misc/ipfwacc ucd-snmp/diskio tunnel ucd-snmp/dlmod ucd-snmp/lmsensorsMib" \ --with-persistent-directory="/var/net-snmp" make NETSNMP_DONT_CHECK_VERSION=1 } @@ -43,6 +65,7 @@ package() { cd ${_pkgbasename}-${pkgver} sed -i -e "s:install --basedir=\$\$dir:install --basedir=\$\$dir --root=${pkgdir}:" Makefile make DESTDIR="${pkgdir}" INSTALL_PREFIX="${pkgdir}" INSTALLDIRS=vendor install - rm -rf "${pkgdir}"/usr/{include,bin,sbin,share} + # Remove conflicting files + rm -rf "${pkgdir}"/{etc,usr/{share,lib,include,bin}} install -D -m644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" } |