summaryrefslogtreecommitdiffstats
path: root/contrib/bsnmp/snmpd/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bsnmp/snmpd/main.c')
-rw-r--r--contrib/bsnmp/snmpd/main.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/contrib/bsnmp/snmpd/main.c b/contrib/bsnmp/snmpd/main.c
index 6fdc6d3..e7257b5 100644
--- a/contrib/bsnmp/snmpd/main.c
+++ b/contrib/bsnmp/snmpd/main.c
@@ -1203,6 +1203,8 @@ snmpd_input(struct port_input *pi, struct tport *tport)
ret = recv_stream(pi);
} else {
+ struct in_addr *laddr;
+
memset(cbuf, 0, CMSG_SPACE(sizeof(struct in_addr)));
msg.msg_control = cbuf;
msg.msg_controllen = CMSG_SPACE(sizeof(struct in_addr));
@@ -1210,8 +1212,14 @@ snmpd_input(struct port_input *pi, struct tport *tport)
cmsgp->cmsg_len = CMSG_LEN(sizeof(struct in_addr));
cmsgp->cmsg_level = IPPROTO_IP;
cmsgp->cmsg_type = IP_SENDSRCADDR;
+ laddr = (struct in_addr *)CMSG_DATA(cmsgp);
- ret = recv_dgram(pi, (struct in_addr *)CMSG_DATA(cmsgp));
+ ret = recv_dgram(pi, laddr);
+
+ if (laddr->s_addr == 0) {
+ msg.msg_control = NULL;
+ msg.msg_controllen = 0;
+ }
}
if (ret == -1)
OpenPOWER on IntegriCloud