On Thu, 27 Jul 2017 12:46:23 +0100 Stuart Henderson <s...@spacehopper.org> 
wrote:
> On 2017/07/27 10:58, Gerhard Roth wrote:
> > Hi,
> > 
> > snmpd uses the same storage for sm_error and sm_nonrepeaters. Same applies
> > to sm_errorindex and sm_maxrepetitions. If we produce a response PDU to
> > a getbulk request, sm_error will carry the number of non-repeaters from
> > the request and sm_errorindex the max. number of repetitions. This is
> > wrong. We should clears those fields in case of success.
> 
> This is definitely an improvement. There still seems to be something not
> quite right though, non-repeaters are repeating - I wouldn't expect to see
> sysObjectID, sysUpTime, sysContact, ipDefaultTTL, ipInRecives, ipInHdrErrors
> here:
> 
> $ snmpbulkget -Cn2 -Cr4 -v2c -c public 127.0.0.1 SNMPv2-MIB::sysDescr \
>    IP-MIB::ipForwarding IF-MIB::ifName IF-MIB::ifInOctets
> SNMPv2-MIB::sysDescr.0 = STRING: sym
> SNMPv2-MIB::sysObjectID.0 = OID: OPENBSD-BASE-MIB::openBSDDefaultObjectID
> SNMPv2-MIB::sysUpTime.0 = Timeticks: (18115) 0:03:01.15
> SNMPv2-MIB::sysContact.0 = STRING: root@some.email.address.example
> IP-MIB::ipForwarding.0 = INTEGER: forwarding(1)
> IP-MIB::ipDefaultTTL.0 = INTEGER: 64
> IP-MIB::ipInReceives.0 = Counter32: 26379088
> IP-MIB::ipInHdrErrors.0 = Counter32: 0
> IF-MIB::ifName.1 = STRING: em0
> IF-MIB::ifName.2 = STRING: em1
> IF-MIB::ifName.3 = STRING: enc0
> IF-MIB::ifName.4 = STRING: lo0
> IF-MIB::ifInOctets.1 = Counter32: 2586116638
> IF-MIB::ifInOctets.2 = Counter32: 0
> IF-MIB::ifInOctets.3 = Counter32: 0
> IF-MIB::ifInOctets.4 = Counter32: 508223137


Hi Steuart,

could you please try the updated patch below. I guess the non-repeater
parameters was completely ignored before.

Gerhard


Index: usr.sbin/snmpd/snmpe.c
===================================================================
RCS file: /cvs/src/usr.sbin/snmpd/snmpe.c,v
retrieving revision 1.47
diff -u -p -u -p -r1.47 snmpe.c
--- usr.sbin/snmpd/snmpe.c      21 Apr 2017 13:50:23 -0000      1.47
+++ usr.sbin/snmpd/snmpe.c      27 Jul 2017 11:58:52 -0000
@@ -439,7 +439,8 @@ snmpe_parsevarbinds(struct snmp_message 
                                case SNMP_C_GETBULKREQ:
                                        ret = mps_getbulkreq(msg, &msg->sm_c,
                                            &msg->sm_end, &o,
-                                           msg->sm_maxrepetitions);
+                                           (msg->sm_i < msg->sm_nonrepeaters) ?
+                                           1 : msg->sm_maxrepetitions);
                                        if (ret == 0 || ret == 1)
                                                break;
                                        msg->sm_error = SNMP_ERROR_NOSUCHNAME;
@@ -467,6 +468,8 @@ snmpe_parsevarbinds(struct snmp_message 
        }
 
        msg->sm_errstr = "none";
+       msg->sm_error = 0;
+       msg->sm_errorindex = 0;
 
        return (ret);
  varfail:

Reply via email to