aboutsummaryrefslogtreecommitdiff
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.c37
1 files changed, 17 insertions, 20 deletions
diff --git a/contrib/bsnmp/snmpd/main.c b/contrib/bsnmp/snmpd/main.c
index 928b84121f82..933ab7aa655a 100644
--- a/contrib/bsnmp/snmpd/main.c
+++ b/contrib/bsnmp/snmpd/main.c
@@ -42,6 +42,7 @@
#include <sys/un.h>
#include <sys/ucred.h>
#include <sys/uio.h>
+#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
@@ -236,7 +237,6 @@ static struct request_info req;
#endif
/* transports */
-extern const struct transport_def udp_trans;
extern const struct transport_def lsock_trans;
struct transport_list transport_list = TAILQ_HEAD_INITIALIZER(transport_list);
@@ -1186,12 +1186,7 @@ snmpd_input(struct port_input *pi, struct tport *tport)
sndbuf, &sndlen, "SNMP", ierr, vi, NULL);
if (ferr == SNMPD_INPUT_OK) {
- if (tport->transport->vtab->send != NULL)
- slen = tport->transport->vtab->send(tport, sndbuf,
- sndlen, pi->peer, pi->peerlen);
- else
- slen = tport->transport->vtab->send2(tport, sndbuf,
- sndlen, pi);
+ slen = tport->transport->vtab->send(tport, sndbuf, sndlen, pi);
if (slen == -1)
syslog(LOG_ERR, "send*: %m");
else if ((size_t)slen != sndlen)
@@ -1214,6 +1209,11 @@ void
snmp_send_port(void *targ, const struct asn_oid *port, struct snmp_pdu *pdu,
const struct sockaddr *addr, socklen_t addrlen)
{
+ struct port_input pi = {
+ .fd = -1,
+ .peer = __DECONST(struct sockaddr *, addr),
+ .peerlen = addrlen,
+ };
struct transport *trans = targ;
struct tport *tp;
u_char *sndbuf;
@@ -1231,10 +1231,7 @@ snmp_send_port(void *targ, const struct asn_oid *port, struct snmp_pdu *pdu,
snmp_output(pdu, sndbuf, &sndlen, "SNMP PROXY");
- if (trans->vtab->send != NULL)
- len = trans->vtab->send(tp, sndbuf, sndlen, addr, addrlen);
- else
- len = trans->vtab->send2(tp, sndbuf, sndlen, NULL);
+ len = trans->vtab->send(tp, sndbuf, sndlen, &pi);
if (len == -1)
syslog(LOG_ERR, "sendto: %m");
@@ -1509,7 +1506,7 @@ main(int argc, char *argv[])
{
int opt;
FILE *fp;
- int background = 1;
+ bool background = true;
struct tport *p;
const char *prefix = "snmpd";
struct lmodule *m;
@@ -1526,11 +1523,6 @@ main(int argc, char *argv[])
NULL
};
- snmp_printf = snmp_printf_func;
- snmp_error = snmp_error_func;
- snmp_debug = snmp_debug_func;
- asn_error = asn_error_func;
-
while ((opt = getopt(argc, argv, "c:dD:e:hI:l:m:p:")) != EOF)
switch (opt) {
@@ -1539,7 +1531,7 @@ main(int argc, char *argv[])
break;
case 'd':
- background = 0;
+ background = false;
break;
case 'D':
@@ -1601,6 +1593,13 @@ main(int argc, char *argv[])
break;
}
+ if (background) {
+ snmp_printf = snmp_printf_func;
+ snmp_error = snmp_error_func;
+ snmp_debug = snmp_debug_func;
+ asn_error = asn_error_func;
+ }
+
openlog(prefix, LOG_PID | (background ? 0 : LOG_PERROR), LOG_USER);
setlogmask(LOG_UPTO(debug.logpri - 1));
@@ -1658,8 +1657,6 @@ main(int argc, char *argv[])
syslog(LOG_ERR, "atexit failed: %m");
exit(1);
}
- if (udp_trans.start() != SNMP_ERR_NOERROR)
- syslog(LOG_WARNING, "cannot start UDP transport");
if (lsock_trans.start() != SNMP_ERR_NOERROR)
syslog(LOG_WARNING, "cannot start LSOCK transport");
if (inet_trans.start() != SNMP_ERR_NOERROR)