Hi,

in snprintf, we do not consider that 0 is in nameData. strdup(cptr) does 
not include that 0 is in cptr.
So we should rewrite this.


@@ -372,7 +366,8 @@ snmpTargetAddr_addName(struct targetAddrTable_struct 
*entry, char *cptr)
                          "ERROR snmpTargetAddrEntry: name out of range 
in config string\n"));
              return (0);
          }
-        entry->name = strdup(cptr);
+        entry->nameData = strdup(cptr);
+        entry->nameLen = len;
      }
      return (1);
  }                               /* addName */
@@ -666,7 +661,7 @@ snmpd_parse_config_targetAddr(const char *token, 
char *char_ptr)
          return;
      }
      snprintf(buff, sizeof(buff), "snmp_parse_config_targetAddr, read: 
%s\n",
-            newEntry->name);
+            newEntry->nameData);
      buff[ sizeof(buff)-1 ] = 0;
      for (i = 0; i < newEntry->tDomainLen; i++) {
          snprintf(&buff[strlen(buff)], sizeof(buff)-strlen(buff)-1,
@@ -711,7 +706,7 @@ store_snmpTargetAddrEntry(int majorID, int minorID, 
void *serverarg,
                  (curr_struct->rowStatus == SNMP_ROW_ACTIVE ||
                   curr_struct->rowStatus == SNMP_ROW_NOTINSERVICE)) {
                  snprintf(line, sizeof(line),
-                        "targetAddr %s ", curr_struct->name);
+                        "targetAddr %s ", curr_struct->nameData);
                  line[ sizeof(line)-1 ] = 0;
                  for (i = 0; i < curr_struct->tDomainLen; i++) {
                      snprintf(&line[strlen(line)],

zhuyj
On 07/10/2013 07:17 PM, zhuyj wrote:
> Hi
>
> name is .0.25.1, we can not snmpwalk it. But .3.25.1, we can snmpwalk it.
>
> Maybe it is related with 0. I will look into it.
>
> zhuyj
>
> user@ubuntu1004:~/net-snmp-5.7.2$ snmpset -v 2c -c NETMAN 127.0.0.1 
> .1.3.6.1.6.3.12.1.2.1.9.3.25.1 i 5
> SNMP-TARGET-MIB::snmpTargetAddrRowStatus.'...' = INTEGER: 
> createAndWait(5)
> user@ubuntu1004:~/net-snmp-5.7.2$ snmpwalk -v 2c -c NETMAN 127.0.0.1 
> .1.3.6.1.6.3.12.1.2.1.9 -Ofn
> .1.3.6.1.6.3.12.1.2.1.9.3.25 = INTEGER: notReady(3)
> .1.3.6.1.6.3.12.1.2.1.9.3.25.1 = INTEGER: notReady(3)
> user@ubuntu1004:~/net-snmp-5.7.2$ snmpset -v 2c -c NETMAN 127.0.0.1 
> .1.3.6.1.6.3.12.1.2.1.9.0.25.1 i 5
> SNMP-TARGET-MIB::snmpTargetAddrRowStatus.'...' = INTEGER: 
> createAndWait(5)
> user@ubuntu1004:~/net-snmp-5.7.2$ snmpwalk -v 2c -c NETMAN 127.0.0.1 
> .1.3.6.1.6.3.12.1.2.1.9 -Ofn
> .1.3.6.1.6.3.12.1.2.1.9.3.25 = INTEGER: notReady(3)
> .1.3.6.1.6.3.12.1.2.1.9.3.25.1 = INTEGER: notReady(3)
> user@ubuntu1004:~/net-snmp-5.7.2$ snmpset -v 2c -c NETMAN 127.0.0.1 
> .1.3.6.1.6.3.12.1.2.1.9.0.25 i 5
> SNMP-TARGET-MIB::snmpTargetAddrRowStatus.'..' = INTEGER: createAndWait(5)
> user@ubuntu1004:~/net-snmp-5.7.2$ snmpwalk -v 2c -c NETMAN 127.0.0.1 
> .1.3.6.1.6.3.12.1.2.1.9 -Ofn
> .1.3.6.1.6.3.12.1.2.1.9.0.25 = INTEGER: notReady(3)
> .1.3.6.1.6.3.12.1.2.1.9.3.25 = INTEGER: notReady(3)
> .1.3.6.1.6.3.12.1.2.1.9.3.25.1 = INTEGER: notReady(3)
> user@ubuntu1004:~/net-snmp-5.7.2$ snmpset -v 2c -c NETMAN 127.0.0.1 
> .1.3.6.1.6.3.12.1.2.1.9.0.25.2 i 5
> SNMP-TARGET-MIB::snmpTargetAddrRowStatus.'...' = INTEGER: 
> createAndWait(5)
> user@ubuntu1004:~/net-snmp-5.7.2$ snmpwalk -v 2c -c NETMAN 127.0.0.1 
> .1.3.6.1.6.3.12.1.2.1.9 -Ofn
> .1.3.6.1.6.3.12.1.2.1.9.0.25 = INTEGER: notReady(3)
> .1.3.6.1.6.3.12.1.2.1.9.3.25 = INTEGER: notReady(3)
> .1.3.6.1.6.3.12.1.2.1.9.3.25.1 = INTEGER: notReady(3)
>
> On 07/10/2013 07:02 PM, zhuyj wrote:
>> Hi,
>>
>> But snmpget can work well.
>> user@ubuntu1004:~/net-snmp-5.7.2$ snmpget -v 2c -c NETMAN 127.0.0.1 
>> .1.3.6.1.6.3.12.1.2.1.9.0.25.1 -Ofn
>> .1.3.6.1.6.3.12.1.2.1.9.0.25.1 = INTEGER: notReady(3)
>>
>> zhuyj
>>
>> On 07/10/2013 06:54 PM, zhuyj wrote:
>>> Hi,
>>>
>>> After I applied this patch, the following is the test result.
>>> When we made the name bigger than 2, we can not snmpwalk it.
>>> I will look into it.
>>>
>>> Zhuyj
>>>
>>> user@ubuntu1004:~/net-snmp-5.7.2$ snmpwalk -v 2c -c NETMAN 127.0.0.1 
>>> .1.3.6.1.6.3.12.1.2.1.9 -Ofn
>>> .1.3.6.1.6.3.12.1.2.1.9.0.25 = INTEGER: notReady(3)
>>> .1.3.6.1.6.3.12.1.2.1.9.2.26 = INTEGER: notReady(3)
>>> .1.3.6.1.6.3.12.1.2.1.9.3.25 = INTEGER: notReady(3)
>>> user@ubuntu1004:~/net-snmp-5.7.2$ snmpset -v 2c -c NETMAN 127.0.0.1 
>>> .1.3.6.1.6.3.12.1.2.1.9.0.25.1 i 5
>>> SNMP-TARGET-MIB::snmpTargetAddrRowStatus.'...' = INTEGER: 
>>> createAndWait(5)
>>> revo@ubuntu1004:~/net-snmp-5.7.2$ snmpwalk -v 2c -c NETMAN 127.0.0.1 
>>> .1.3.6.1.6.3.12.1.2.1.9 -Ofn
>>> .1.3.6.1.6.3.12.1.2.1.9.0.25 = INTEGER: notReady(3)
>>> .1.3.6.1.6.3.12.1.2.1.9.2.26 = INTEGER: notReady(3)
>>> .1.3.6.1.6.3.12.1.2.1.9.3.25 = INTEGER: notReady(3)
>>>
>>> On 07/10/2013 05:52 PM, Magnus Fromreide wrote:
>>>> On Wed, 2013-07-10 at 17:41 +0800, zhuyj wrote:
>>>>> On 07/10/2013 04:53 PM, Magnus Fromreide wrote:
>>>>>> On Wed, 2013-07-10 at 10:34 +0800, zhuyj wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> Attempting to create a new entry with a zero index fails silently.
>>>>>> Ok, You want to index your entry with the string <NUL><EM>.
>>>>>>
>>>>>> The mess up is, just as usual, that people believes that <NUL> is a
>>>>>> string terminator. That is wrong.
>>>>>>
>>>>>> Your idea of using \xff as a string terminator is, while not 
>>>>>> wrong (\xff
>>>>>> is forbidden in utf-8 strings), confusing for a casual reader of the
>>>>>> code.
>>>>>>
>>>>>> The correct solution is to store the length of the passed in octet
>>>>>> sequence.
>>>>>>
>>>>>> A completely untested patch against master is attached.
>>>>>>
>>>>>> Does it help you?
>>>>>>
>>>>>> Note - the rename of name to nameData  and get_addrForName to
>>>>>> get_addrForName2 was to make it easier to find unconverted code.
>>>>>>
>>>>>> /MF
>>>>> Hi,
>>>>>
>>>>> A little modifications:
>>>>> Can we store name_len in octect sequence?
>>>>>         struct targetAddrTable_struct {
>>>>> -         char           *name;
>>>>> +         char           *nameData;
>>>>> +         unsigned char   nameLen;
>>>>>             oid             tDomain[MAX_OID_LEN];
>>>>>             int             tDomainLen;
>>>>>             unsigned char  *tAddress;
>>>>>
>>>>> I mean that we store nameLen in name[0]. Then we need not modify a 
>>>>> lot
>>>>> of source code.
>>>> Wrong.
>>>>
>>>> One still have to modify all the source code that expects the name
>>>> member to contain only the data and not the length.
>>>>
>>>>> Maybe it is better?
>>>> I doubt it - less clear. The only way should be with some kind of
>>>> "string class".
>>>>
>>>> /MF
>>>>
>>>>
>>>
>>>
>>
>>
>
>


------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
Net-snmp-coders mailing list
Net-snmp-coders@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders

Reply via email to