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(+)

Index: net-snmp-5.7.3/snmplib/transports/snmpUDPIPv6Domain.c
===================================================================
--- net-snmp-5.7.3.orig/snmplib/transports/snmpUDPIPv6Domain.c
+++ net-snmp-5.7.3/snmplib/transports/snmpUDPIPv6Domain.c
@@ -286,6 +286,27 @@ netsnmp_udp6_transport(struct sockaddr_i
         return NULL;
 #endif /* NETSNMP_NO_LISTEN_SUPPORT */
     } 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.
