diff --git a/package/netsnmp/0002-libsnmp-Fix-OpenSSL-4-build.patch b/package/netsnmp/0002-libsnmp-Fix-OpenSSL-4-build.patch new file mode 100644 index 0000000000..e92dffff02 --- /dev/null +++ b/package/netsnmp/0002-libsnmp-Fix-OpenSSL-4-build.patch @@ -0,0 +1,99 @@ +From 1c70efc4334629ba278ea75a071d4dbabc198df8 Mon Sep 17 00:00:00 2001 +From: Ravi Kant Sharma +Date: Fri, 12 Jun 2026 13:52:20 +0200 +Subject: [PATCH] libsnmp: Fix OpenSSL 4 build + +[ bvanassche: edited patch description and fixed OS/X build ] +Fixes: https://github.com/net-snmp/net-snmp/pull/1101 + +Upstream: https://github.com/net-snmp/net-snmp/commit/66736ece08dc2b4050acaf234e6959d21c89cb02 + +Signed-off-by: Bernd Kuhls +--- + snmplib/snmp_openssl.c | 39 ++++++++++++++++++++++----------------- + 1 file changed, 22 insertions(+), 17 deletions(-) + +diff --git a/snmplib/snmp_openssl.c b/snmplib/snmp_openssl.c +index 4471a7a9d3..0bd1a65882 100644 +--- a/snmplib/snmp_openssl.c ++++ b/snmplib/snmp_openssl.c +@@ -234,6 +234,7 @@ void + netsnmp_openssl_cert_dump_names(X509 *ocert) + { + int i, onid; ++ int oname_value_type; + X509_NAME_ENTRY *oname_entry; + ASN1_STRING *oname_value; + X509_NAME *osubj_name; +@@ -252,8 +253,9 @@ netsnmp_openssl_cert_dump_names(X509 *ocert) + oname_entry = X509_NAME_get_entry(osubj_name, i); + netsnmp_assert(NULL != oname_entry); + oname_value = X509_NAME_ENTRY_get_data(oname_entry); ++ oname_value_type = ASN1_STRING_type(oname_value); + +- if (oname_value->type != V_ASN1_PRINTABLESTRING) ++ if (oname_value_type != V_ASN1_PRINTABLESTRING) + continue; + + /** get NID */ +@@ -268,7 +270,7 @@ netsnmp_openssl_cert_dump_names(X509 *ocert) + + DEBUGMSGT(("9:cert:dump:names", + "[%02d] NID type %d, ASN type %d\n", i, onid, +- oname_value->type)); ++ oname_value_type)); + DEBUGMSGT(("9:cert:dump:names", "%s/%s: '%s'\n", prefix_long, + prefix_short, ASN1_STRING_get0_data(oname_value))); + } +@@ -433,30 +435,33 @@ _extract_oname(const GENERAL_NAME *oname) + rtn = strdup(buf); + break; + +- case GEN_IPADD: +- if (oname->d.iPAddress->length == 4) { +- sprintf(ipbuf, "%d.%d.%d.%d", oname->d.iPAddress->data[0], +- oname->d.iPAddress->data[1], +- oname->d.iPAddress->data[2], +- oname->d.iPAddress->data[3]); ++ case GEN_IPADD: { ++ const int iplen = ASN1_STRING_length(oname->d.iPAddress); ++ const unsigned char *const ipdata = ++ ASN1_STRING_get0_data(oname->d.iPAddress); ++ ++ if (iplen == 4) { ++ sprintf(ipbuf, "%d.%d.%d.%d", ipdata[0], ++ ipdata[1], ++ ipdata[2], ++ ipdata[3]); + rtn = strdup(ipbuf); +- } +- else if ((oname->d.iPAddress->length == 16) || +- (oname->d.iPAddress->length == 20)) { ++ } else if (iplen == 16 || iplen == 20) { + char *pos = ipbuf; + int j; +- for(j = 0; j < oname->d.iPAddress->length; ++j) { +- *pos++ = VAL2HEX(oname->d.iPAddress->data[j]); ++ ++ for (j = 0; j < iplen; ++j) { ++ *pos++ = VAL2HEX(ipdata[j]); + *pos++ = ':'; + } + *pos = '\0'; + rtn = strdup(ipbuf); +- } +- else ++ } else { + NETSNMP_LOGONCE((LOG_WARNING, "unexpected ip addr length %d\n", +- oname->d.iPAddress->length)); +- ++ iplen)); ++ } + break; ++ } + default: + DEBUGMSGT(("openssl:cert:san", "unknown/unsupported type %d\n", + oname->type)); +-- +2.47.3 +