The traphandler currently relies on some false assumptions. 1) A pdu has 3 leading elements to the varbind list, not 4. 2) The first element of a trap varbind as 2 elements, not 3 3) The varbind list is optional.
The final point also causes "trap handle" in snmpd to print the trap oid twice if no additional elements are send. OK? martijn@ Index: traphandler.c =================================================================== RCS file: /cvs/src/usr.sbin/snmpd/traphandler.c,v retrieving revision 1.13 diff -u -p -r1.13 traphandler.c --- traphandler.c 11 May 2019 17:46:02 -0000 1.13 +++ traphandler.c 13 Aug 2019 14:49:11 -0000 @@ -239,10 +239,11 @@ traphandler_parse(char *buf, size_t n, s break; case SNMP_V2: - if (ber_scanf_elements(elm, "{SSSS{e}}", &elm) == -1 || - ber_scanf_elements(elm, "{SdS}{So}e", - uptime, trapoid, vbinds) == -1) + if (ber_scanf_elements(elm, "{SSS{e}}", &elm) == -1 || + ber_scanf_elements(elm, "{Sd}{So}", + uptime, trapoid) == -1) goto done; + *vbinds = elm->be_next->be_next; break; default: