Skip to content

Commit

Permalink
Merge branch 'V5-9-patches'
Browse files Browse the repository at this point in the history
* V5-9-patches:
  CHANGES: libsnmp: Restore support for DNS names longer than 63 characters
  CHANGES: libsnmp: Make the snmpIPBaseDomain.h header file private
  • Loading branch information
bvanassche committed Nov 7, 2022
2 parents a43cafb + d420ff6 commit 5d3ece8
Show file tree
Hide file tree
Showing 17 changed files with 57 additions and 35 deletions.
7 changes: 6 additions & 1 deletion configure
Original file line number Diff line number Diff line change
Expand Up @@ -19053,7 +19053,12 @@ while test "x$new_transport_list" != "x"; do
transport_src="transports/snmp"$i"Domain.c"
transport_hdr="snmp"$i"Domain.h"
rel_transport_src="snmplib/"$transport_src
rel_transport_hdr="include/net-snmp/library/"$transport_hdr
case $i in
IPBase)
rel_transport_hdr="snmplib/transports/$transport_hdr";;
*)
rel_transport_hdr="include/net-snmp/library/$transport_hdr";;
esac
lc_i=`echo $i | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
ctor_fn="netsnmp_"$lc_i"_ctor"
if test -f "$srcdir/$rel_transport_src"; then
Expand Down
7 changes: 6 additions & 1 deletion configure.d/config_modules_transports
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,12 @@ while test "x$new_transport_list" != "x"; do
transport_src="transports/snmp"$i"Domain.c"
transport_hdr="snmp"$i"Domain.h"
rel_transport_src="snmplib/"$transport_src
rel_transport_hdr="include/net-snmp/library/"$transport_hdr
case $i in
IPBase)
rel_transport_hdr="snmplib/transports/$transport_hdr";;
*)
rel_transport_hdr="include/net-snmp/library/$transport_hdr";;
esac
lc_i=`echo $i | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
ctor_fn="netsnmp_"$lc_i"_ctor"
if test -f "$srcdir/$rel_transport_src"; then
Expand Down
14 changes: 7 additions & 7 deletions snmplib/Makefile.depend
Original file line number Diff line number Diff line change
Expand Up @@ -3165,7 +3165,7 @@
./transports/snmpIPBaseDomain.lo: ../include/net-snmp/net-snmp-features.h
./transports/snmpIPBaseDomain.lo: ../include/net-snmp/library/snmp_logging.h
./transports/snmpIPBaseDomain.lo: ../include/net-snmp/library/system.h
./transports/snmpIPBaseDomain.lo: ../include/net-snmp/library/snmpIPBaseDomain.h
./transports/snmpIPBaseDomain.lo: transports/snmpIPBaseDomain.h
./transports/snmpIPXDomain.lo: ../include/net-snmp/net-snmp-config.h
./transports/snmpIPXDomain.lo: ../include/net-snmp/library/snmpIPXDomain.h
./transports/snmpIPXDomain.lo: ../include/net-snmp/library/snmp_transport.h
Expand Down Expand Up @@ -3211,7 +3211,7 @@
./transports/snmpIPv4BaseDomain.lo: ../include/net-snmp/net-snmp-config.h
./transports/snmpIPv4BaseDomain.lo: ../include/net-snmp/types.h
./transports/snmpIPv4BaseDomain.lo: ../include/net-snmp/library/oid.h
./transports/snmpIPv4BaseDomain.lo: ../include/net-snmp/library/snmpIPBaseDomain.h
./transports/snmpIPv4BaseDomain.lo: transports/snmpIPBaseDomain.h
./transports/snmpIPv4BaseDomain.lo: ../include/net-snmp/library/snmpIPv4BaseDomain.h
./transports/snmpIPv4BaseDomain.lo: ../include/net-snmp/library/snmp_transport.h
./transports/snmpIPv4BaseDomain.lo: ../include/net-snmp/library/asn1.h
Expand Down Expand Up @@ -3409,7 +3409,7 @@
./transports/snmpTCPDomain.lo: ../include/net-snmp/net-snmp-config.h
./transports/snmpTCPDomain.lo: ../include/net-snmp/types.h
./transports/snmpTCPDomain.lo: ../include/net-snmp/library/oid.h
./transports/snmpTCPDomain.lo: ../include/net-snmp/library/snmpIPBaseDomain.h
./transports/snmpTCPDomain.lo: transports/snmpIPBaseDomain.h
./transports/snmpTCPDomain.lo: ../include/net-snmp/library/snmpTCPDomain.h
./transports/snmpTCPDomain.lo: ../include/net-snmp/library/snmpIPv4BaseDomain.h
./transports/snmpTCPDomain.lo: ../include/net-snmp/library/snmp_transport.h
Expand Down Expand Up @@ -3593,7 +3593,7 @@
./transports/snmpUDPDomain.lo: ../include/net-snmp/net-snmp-config.h
./transports/snmpUDPDomain.lo: ../include/net-snmp/types.h
./transports/snmpUDPDomain.lo: ../include/net-snmp/library/oid.h
./transports/snmpUDPDomain.lo: ../include/net-snmp/library/snmpIPBaseDomain.h
./transports/snmpUDPDomain.lo: transports/snmpIPBaseDomain.h
./transports/snmpUDPDomain.lo: ../include/net-snmp/library/snmpUDPDomain.h
./transports/snmpUDPDomain.lo: ../include/net-snmp/library/snmp_transport.h
./transports/snmpUDPDomain.lo: ../include/net-snmp/library/asn1.h
Expand Down Expand Up @@ -3640,7 +3640,7 @@
./transports/snmpUDPIPv4BaseDomain.lo: ../include/net-snmp/net-snmp-config.h
./transports/snmpUDPIPv4BaseDomain.lo: ../include/net-snmp/types.h
./transports/snmpUDPIPv4BaseDomain.lo: ../include/net-snmp/library/oid.h
./transports/snmpUDPIPv4BaseDomain.lo: ../include/net-snmp/library/snmpIPBaseDomain.h
./transports/snmpUDPIPv4BaseDomain.lo: transports/snmpIPBaseDomain.h
./transports/snmpUDPIPv4BaseDomain.lo: ../include/net-snmp/library/snmpUDPIPv4BaseDomain.h
./transports/snmpUDPIPv4BaseDomain.lo: ../include/net-snmp/library/snmpIPv4BaseDomain.h
./transports/snmpUDPIPv4BaseDomain.lo: ../include/net-snmp/library/snmp_transport.h
Expand Down Expand Up @@ -3678,7 +3678,7 @@
./transports/snmpUDPIPv4BaseDomain.lo: ../include/net-snmp/library/snmpSocketBaseDomain.h
./transports/snmpUDPIPv4BaseDomain.lo: ../include/net-snmp/library/sd-daemon.h
./transports/snmpUDPIPv6Domain.lo: ../include/net-snmp/net-snmp-config.h
./transports/snmpUDPIPv6Domain.lo: ../include/net-snmp/library/snmpIPBaseDomain.h
./transports/snmpUDPIPv6Domain.lo: transports/snmpIPBaseDomain.h
./transports/snmpUDPIPv6Domain.lo: ../include/net-snmp/types.h
./transports/snmpUDPIPv6Domain.lo: ../include/net-snmp/library/oid.h
./transports/snmpUDPIPv6Domain.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
Expand All @@ -3689,7 +3689,7 @@
./transports/snmpUDPsharedDomain.lo: ../include/net-snmp/net-snmp-config.h
./transports/snmpUDPsharedDomain.lo: ../include/net-snmp/types.h
./transports/snmpUDPsharedDomain.lo: ../include/net-snmp/library/oid.h
./transports/snmpUDPsharedDomain.lo: ../include/net-snmp/library/snmpIPBaseDomain.h
./transports/snmpUDPsharedDomain.lo: transports/snmpIPBaseDomain.h
./transports/snmpUDPsharedDomain.lo: ../include/net-snmp/library/snmpUDPsharedDomain.h
./transports/snmpUDPsharedDomain.lo: ../include/net-snmp/library/snmpUDPBaseDomain.h
./transports/snmpUDPsharedDomain.lo: ../include/net-snmp/library/snmp_transport.h
Expand Down
2 changes: 1 addition & 1 deletion snmplib/transports/snmpDTLSUDPDomain.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
netsnmp_feature_require(cert_util);
netsnmp_feature_require(sockaddr_size);

#include <net-snmp/library/snmpIPBaseDomain.h>
#include "snmpIPBaseDomain.h"
#include <net-snmp/library/snmpDTLSUDPDomain.h>
#include <net-snmp/library/snmpUDPIPv6Domain.h>
#include <net-snmp/library/snmp_assert.h>
Expand Down
21 changes: 13 additions & 8 deletions snmplib/transports/snmpIPBaseDomain.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#include <net-snmp/types.h>
#include <net-snmp/output_api.h>
#include <net-snmp/library/system.h>
#include <net-snmp/library/snmpIPBaseDomain.h>
#include "snmpIPBaseDomain.h"
#include <ctype.h>
#include <errno.h>
#include <stdlib.h>
Expand Down Expand Up @@ -50,7 +50,7 @@ int netsnmp_parse_ep_str(struct netsnmp_ep_str *ep_str, const char *endpoint)
cp[0] = '\0';
cp++;
} else {
goto invalid;
goto err;
}
} else if (*cp != '@' && (*cp != ':' || cp[1] == ':')) {
addrstr = cp;
Expand All @@ -70,28 +70,33 @@ int netsnmp_parse_ep_str(struct netsnmp_ep_str *ep_str, const char *endpoint)
*cp++ = '\0';
portstr = cp;
if (!netsnmp_isnumber(cp))
goto invalid;
goto err;
} else if (cp && *cp) {
goto invalid;
goto err;
}
}

if (addrstr)
strlcpy(ep_str->addr, addrstr, sizeof(ep_str->addr));
if (addrstr) {
ep_str->addr = strdup(addrstr);
if (!ep_str->addr)
goto err;
}
if (iface)
strlcpy(ep_str->iface, iface, sizeof(ep_str->iface));
if (portstr) {
port = atoi(portstr);
if (port <= 0xffff)
strlcpy(ep_str->port, portstr, sizeof(ep_str->port));
else
goto invalid;
goto err;
}

free(dup);
return 1;

invalid:
err:
free(ep_str->addr);
ep_str->addr = NULL;
free(dup);
return 0;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ struct netsnmp_ep {
* means "bind to any port".
*/
struct netsnmp_ep_str {
char addr[64];
char *addr;
char iface[16];
char port[6];
};
Expand Down
8 changes: 5 additions & 3 deletions snmplib/transports/snmpIPv4BaseDomain.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#include <net-snmp/net-snmp-config.h>

#include <net-snmp/types.h>
#include <net-snmp/library/snmpIPBaseDomain.h>
#include "snmpIPBaseDomain.h"
#include <net-snmp/library/snmpIPv4BaseDomain.h>
#include <net-snmp/library/snmp_assert.h>

Expand Down Expand Up @@ -119,17 +119,18 @@ netsnmp_sockaddr_in3(struct netsnmp_ep *ep,
addr->sin_port = htons(atoi(ep_str.port));
if (ep_str.iface[0])
strlcpy(ep->iface, ep_str.iface, sizeof(ep->iface));
if (strcmp(ep_str.addr, "255.255.255.255") == 0) {
if (ep_str.addr && strcmp(ep_str.addr, "255.255.255.255") == 0) {
/*
* The explicit broadcast address hack
*/
DEBUGMSGTL(("netsnmp_sockaddr_in", "Explicit UDP broadcast\n"));
addr->sin_addr.s_addr = INADDR_NONE;
} else if (strcmp(ep_str.addr, "") != 0) {
} else if (ep_str.addr && strcmp(ep_str.addr, "") != 0) {
ret = netsnmp_gethostbyname_v4(ep_str.addr, &addr->sin_addr.s_addr);
if (ret < 0) {
DEBUGMSGTL(("netsnmp_sockaddr_in",
"couldn't resolve hostname \"%s\"\n", ep_str.addr));
free(ep_str.addr);
return 0;
}
DEBUGMSGTL(("netsnmp_sockaddr_in",
Expand All @@ -142,6 +143,7 @@ netsnmp_sockaddr_in3(struct netsnmp_ep *ep,

DEBUGMSGTL(("netsnmp_sockaddr_in", "return { AF_INET, %s:%hu }\n",
inet_ntoa(addr->sin_addr), ntohs(addr->sin_port)));
free(ep_str.addr);
return 1;
}

Expand Down
6 changes: 4 additions & 2 deletions snmplib/transports/snmpIPv6BaseDomain.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
#ifdef NETSNMP_ENABLE_IPV6

#include <net-snmp/types.h>
#include <net-snmp/library/snmpIPBaseDomain.h>
#include "snmpIPBaseDomain.h"
#include <net-snmp/library/snmpIPv6BaseDomain.h>
#include <net-snmp/library/system.h>
#include <net-snmp/library/snmp_assert.h>
Expand Down Expand Up @@ -300,7 +300,7 @@ netsnmp_sockaddr_in6_3(struct netsnmp_ep *ep,
addr->sin6_port = htons(atoi(ep_str.port));
if (ep_str.iface[0])
strlcpy(ep->iface, ep_str.iface, sizeof(ep->iface));
if (ep_str.addr[0]) {
if (ep_str.addr && ep_str.addr[0]) {
char *scope_id;

scope_id = strchr(ep_str.addr, '%');
Expand All @@ -314,6 +314,7 @@ netsnmp_sockaddr_in6_3(struct netsnmp_ep *ep,
!netsnmp_resolve_v6_hostname(&addr->sin6_addr, ep_str.addr)) {
DEBUGMSGTL(("netsnmp_sockaddr_in6", "failed to parse %s\n",
ep_str.addr));
free(ep_str.addr);
return 0;
}
}
Expand All @@ -322,6 +323,7 @@ netsnmp_sockaddr_in6_3(struct netsnmp_ep *ep,
inet_ntop(AF_INET6, &addr->sin6_addr, debug_addr,
sizeof(debug_addr)), (int)addr->sin6_scope_id,
ntohs(addr->sin6_port)));
free(ep_str.addr);
return 1;
}

Expand Down
2 changes: 1 addition & 1 deletion snmplib/transports/snmpTCPDomain.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include <net-snmp/net-snmp-config.h>

#include <net-snmp/types.h>
#include <net-snmp/library/snmpIPBaseDomain.h>
#include "snmpIPBaseDomain.h"
#include <net-snmp/library/snmpTCPDomain.h>

#include <stdio.h>
Expand Down
2 changes: 1 addition & 1 deletion snmplib/transports/snmpTCPIPv6Domain.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#ifdef NETSNMP_TRANSPORT_TCPIPV6_DOMAIN

#include <net-snmp/types.h>
#include <net-snmp/library/snmpIPBaseDomain.h>
#include "snmpIPBaseDomain.h"
#include <net-snmp/library/snmpTCPIPv6Domain.h>

#include <stdio.h>
Expand Down
2 changes: 1 addition & 1 deletion snmplib/transports/snmpUDPDomain.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
#include <net-snmp/net-snmp-config.h>

#include <net-snmp/types.h>
#include <net-snmp/library/snmpIPBaseDomain.h>
#include "snmpIPBaseDomain.h"
#include <net-snmp/library/snmpUDPDomain.h>
#include <net-snmp/library/snmpUDPIPv4BaseDomain.h>

Expand Down
2 changes: 1 addition & 1 deletion snmplib/transports/snmpUDPIPv4BaseDomain.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
#include <net-snmp/net-snmp-config.h>

#include <net-snmp/types.h>
#include <net-snmp/library/snmpIPBaseDomain.h>
#include "snmpIPBaseDomain.h"
#include <net-snmp/library/snmpUDPIPv4BaseDomain.h>

#include <stddef.h>
Expand Down
2 changes: 1 addition & 1 deletion snmplib/transports/snmpUDPIPv6Domain.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
*/
#include <net-snmp/net-snmp-config.h>

#include <net-snmp/library/snmpIPBaseDomain.h>
#include "snmpIPBaseDomain.h"
#include <net-snmp/library/snmpUDPIPv6Domain.h>
#include <net-snmp/library/system.h>

Expand Down
2 changes: 1 addition & 1 deletion snmplib/transports/snmpUDPsharedDomain.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#include <net-snmp/net-snmp-config.h>

#include <net-snmp/types.h>
#include <net-snmp/library/snmpIPBaseDomain.h>
#include "snmpIPBaseDomain.h"
#include <net-snmp/library/snmpUDPsharedDomain.h>

#include <stddef.h>
Expand Down
2 changes: 1 addition & 1 deletion testing/fulltests/support/clib_build
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ cat >>"$2.c" <<EOF
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/library/large_fd_set.h>
#include <net-snmp/library/snmpIPBaseDomain.h>
#include "snmplib/transports/snmpIPBaseDomain.h"
#include <utilities/execute.h>
/* testing specific header */
Expand Down
6 changes: 4 additions & 2 deletions testing/fulltests/unit-tests/T022netsnmp_parse_ep_str_clib.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
struct one_test_data {
const char *in;
int res;
struct netsnmp_ep_str expected;
struct { const char *addr; const char *iface; const char *port; } expected;
};

static struct one_test_data test_data[] = {
Expand Down Expand Up @@ -44,7 +44,8 @@ SOCK_STARTUP;
res = netsnmp_parse_ep_str(&ep_str, p->in);
OKF(res == p->res, ("%s: return value %d <> %d", p->in, res, p->res));
if (res && p->res) {
OKF(strcmp(ep_str.addr, p->expected.addr) == 0,
OKF((!ep_str.addr && !p->expected.addr[0]) ||
strcmp(ep_str.addr, p->expected.addr) == 0,
("%s: network address %s <> %s", p->in, ep_str.addr,
p->expected.addr));
OKF(strcmp(ep_str.iface, p->expected.iface) == 0,
Expand All @@ -53,6 +54,7 @@ SOCK_STARTUP;
OKF(strcmp(ep_str.port, p->expected.port) == 0,
("%s: port %s <> %s", p->in, ep_str.port, p->expected.port));
}
free(ep_str.addr);
}
}

Expand Down
5 changes: 3 additions & 2 deletions testing/fuzzing/snmp_transport_fuzzer.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
*/
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/library/snmpIPBaseDomain.h>
#include "../../snmplib/transports/snmpIPBaseDomain.h"
#include <net-snmp/library/snmpUDPIPv6Domain.h>
#include <net-snmp/library/snmpIPXDomain.h>
#include <stddef.h>
Expand Down Expand Up @@ -102,7 +102,7 @@ LLVMFuzzerTestOneInput(const uint8_t * data, size_t size)
netsnmp_udp_parse_security(udp_token, udp_param);
}

struct netsnmp_ep_str ep_str;
struct netsnmp_ep_str ep_str = { };
char *endpoint = af_gb_get_null_terminated(&data2, &size2);
if (endpoint && !netsnmp_parse_ep_str(&ep_str, endpoint))
goto cleanup;
Expand All @@ -116,6 +116,7 @@ LLVMFuzzerTestOneInput(const uint8_t * data, size_t size)
/*
* Cleanup
*/
free(ep_str.addr);
cleanup:
netsnmp_clear_tdomain_list();
shutdown_snmp_transport();
Expand Down

0 comments on commit 5d3ece8

Please sign in to comment.