package/netsnmp: fix build with OpenSSL 4.0.0

Signed-off-by: Bernd Kuhls <bernd@kuhls.net>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
Bernd Kuhls
2026-09-27 12:42:36 +02:00
committed by Thomas Petazzoni
parent 0edc67470b
commit a9d4e45d95

View File

@@ -0,0 +1,99 @@
From 1c70efc4334629ba278ea75a071d4dbabc198df8 Mon Sep 17 00:00:00 2001
From: Ravi Kant Sharma <ravi.kant.sharma@canonical.com>
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 <bernd@kuhls.net>
---
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