35 lines
1.7 KiB
Diff
35 lines
1.7 KiB
Diff
diff --git a/snmplib/transports/snmpUDPDomain.c b/snmplib/transports/snmpUDPDomain.c
|
|
index b96497f3a..b594a389b 100644
|
|
--- a/snmplib/transports/snmpUDPDomain.c
|
|
+++ b/snmplib/transports/snmpUDPDomain.c
|
|
@@ -387,7 +387,7 @@ netsnmp_udp_parse_security(const char *token, char *param)
|
|
/* Nope, wasn't a dotted quad. Must be a hostname. */
|
|
int ret = netsnmp_gethostbyname_v4(sourcep, &network.s_addr);
|
|
if (ret < 0) {
|
|
- config_perror("cannot resolve source hostname");
|
|
+ config_perror("cannot resolve IPv4 source hostname");
|
|
return;
|
|
}
|
|
}
|
|
diff --git a/snmplib/transports/snmpUDPIPv6Domain.c b/snmplib/transports/snmpUDPIPv6Domain.c
|
|
index 238c8a9d6..43c4eaee1 100644
|
|
--- a/snmplib/transports/snmpUDPIPv6Domain.c
|
|
+++ b/snmplib/transports/snmpUDPIPv6Domain.c
|
|
@@ -736,7 +736,15 @@ netsnmp_udp6_parse_security(const char *token, char *param)
|
|
memset(&pton_addr.sin6_addr.s6_addr, '\0',
|
|
sizeof(struct in6_addr));
|
|
} else if (inet_pton(AF_INET6, sourcep, &pton_addr.sin6_addr) != 1) {
|
|
- /* Nope, wasn't a numeric address. Must be a hostname. */
|
|
+ /* Nope, wasn't a numeric IPv6 address. Must be IPv4 or a hostname. */
|
|
+
|
|
+ /* Try interpreting as dotted quad - IPv4 */
|
|
+ struct in_addr network;
|
|
+ if (inet_pton(AF_INET, sourcep, &network) > 0){
|
|
+ /* Yes, it's IPv4 - those it's already parsed and we can return. */
|
|
+ DEBUGMSGTL(("com2sec6", "IPv4 detected for IPv6 parser. Skipping.\n"));
|
|
+ return;
|
|
+ }
|
|
#if HAVE_GETADDRINFO
|
|
int gai_error;
|
|
|