mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-06-05 02:50:46 +00:00
net-snmp: fix snmptrap to use clientaddr from snmp.conf.
Under IPv6 IP-multihomed environment, the socket does not bind to the clientaddr indicated in snmp.conf when sending snmptrap and it might choose a random one. Backport the patch from net-snmp upstream to fix it. Signed-off-by: Li Zhou <li.zhou@windriver.com> Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
This commit is contained in:
+48
@@ -0,0 +1,48 @@
|
||||
From a92628a163ebf1ea62220684736300461c003875 Mon Sep 17 00:00:00 2001
|
||||
From: Niels Baggesen <nba@users.sourceforge.net>
|
||||
Date: Mon, 26 Jan 2015 20:26:06 +0100
|
||||
Subject: [PATCH] BUG#a2584: Fix snmptrap to use clientaddr from snmp.conf.
|
||||
Thanks to rizwan
|
||||
|
||||
Upstream-Status: backport
|
||||
|
||||
Signed-off-by: Li Zhou <li.zhou@windriver.com>
|
||||
---
|
||||
snmplib/transports/snmpUDPIPv6Domain.c | 21 +++++++++++++++++++++
|
||||
1 file changed, 21 insertions(+)
|
||||
|
||||
diff --git a/snmplib/transports/snmpUDPIPv6Domain.c b/snmplib/transports/snmpUDPIPv6Domain.c
|
||||
index 55e3610..aca69ae 100644
|
||||
--- a/snmplib/transports/snmpUDPIPv6Domain.c
|
||||
+++ b/snmplib/transports/snmpUDPIPv6Domain.c
|
||||
@@ -256,6 +256,27 @@ netsnmp_udp6_transport(struct sockaddr_in6 *addr, int local)
|
||||
t->data = NULL;
|
||||
t->data_length = 0;
|
||||
} else {
|
||||
+ char *client_socket = NULL;
|
||||
+ /*
|
||||
+ * This is a client session. If we've been given a
|
||||
+ * client address to send from, then bind to that.
|
||||
+ * Otherwise the send will use "something sensible".
|
||||
+ */
|
||||
+
|
||||
+ client_socket = netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
|
||||
+ NETSNMP_DS_LIB_CLIENT_ADDR);
|
||||
+ if (client_socket) {
|
||||
+ struct sockaddr_in6 client_addr;
|
||||
+ netsnmp_sockaddr_in6_2(&client_addr, client_socket, NULL);
|
||||
+ rc = bind(t->sock, (struct sockaddr *)&client_addr,
|
||||
+ sizeof(struct sockaddr_in6));
|
||||
+ if ( rc != 0 ) {
|
||||
+ DEBUGMSGTL(("netsnmp_udp6", "failed to bind for clientaddr: %d %s\n",
|
||||
+ errno, strerror(errno)));
|
||||
+ netsnmp_socketbase_close(t);
|
||||
+ netsnmp_transport_free(t);
|
||||
+ }
|
||||
+ }
|
||||
/*
|
||||
* This is a client session. Save the address in the
|
||||
* transport-specific data pointer for later use by netsnmp_udp6_send.
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -24,6 +24,7 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/net-snmp/net-snmp-${PV}.zip \
|
||||
file://0001-snmplib-keytools.c-Don-t-check-for-return-from-EVP_M.patch \
|
||||
file://net-snmp-agentx-crash.patch \
|
||||
file://0001-get_pid_from_inode-Include-limit.h.patch \
|
||||
file://0001-BUG-a2584-Fix-snmptrap-to-use-clientaddr-from-snmp.c.patch \
|
||||
"
|
||||
SRC_URI[md5sum] = "9f682bd70c717efdd9f15b686d07baee"
|
||||
SRC_URI[sha256sum] = "e8dfc79b6539b71a6ff335746ce63d2da2239062ad41872fff4354cafed07a3e"
|
||||
|
||||
Reference in New Issue
Block a user