Hi,

I run the following commands:

--snmpset -c NETMAN -v 2c 128.224.162.243 SNMP-TARGET-MIB::snmpTargetParamsRowStatus.0.25 i 5
SNMP-TARGET-MIB::snmpTargetParamsRowStatus.'..' = INTEGER: createAndWait(5)

--snmpget -c NETMAN -v 2c 128.224.162.243 SNMP-TARGET-MIB::snmpTargetParamsRowStatus.0.25 SNMP-TARGET-MIB::snmpTargetParamsRowStatus.'..' = No Such Instance currently exists at this OID

--snmpget --version
NET-SNMP version: 5.7.2
--snmpset --version
NET-SNMP version: 5.7.2

This is because paramName in struct targetParamTable_struct is NUL-terminated string. Now we modify it to counted-string. It can work now.

--snmpset -c NETMAN -v 2c 128.224.162.243 SNMP-TARGET-MIB::snmpTargetParamsRowStatus.0.25 i 5
SNMP-TARGET-MIB::snmpTargetParamsRowStatus.'..' = INTEGER: createAndWait(5)
--snmpget -c NETMAN -v 2c 128.224.162.243 SNMP-TARGET-MIB::snmpTargetParamsRowStatus.0.25 -Ofn
.1.3.6.1.6.3.12.1.3.1.7.0.25 = INTEGER: notReady(3)

Now I attached the patch in the attachment. Please check it.
Would you like to merge this patch into trunk?

Best Regards!
Zhuyj
diff -urpN net-snmp-5.7.2/agent/mibgroup/notification/snmpNotifyTable.c net-snmp-5.7.2_new/agent/mibgroup/notification/snmpNotifyTable.c
--- net-snmp-5.7.2/agent/mibgroup/notification/snmpNotifyTable.c	
+++ net-snmp-5.7.2_new/agent/mibgroup/notification/snmpNotifyTable.c	
@@ -306,7 +306,7 @@ notifyTable_register_notifications(int m
     for (i = 0; i < MAX_ENTRIES; i++) {
         bufLen = sprintf(buf, "internal%d", i);
         if (get_addrForName2(buf, bufLen) == NULL &&
-            get_paramEntry(buf) == NULL)
+            get_paramEntry(buf, bufLen) == NULL)
             break;
     }
     if (i == MAX_ENTRIES) {
diff -urpN net-snmp-5.7.2/agent/mibgroup/target/snmpTargetAddrEntry.c net-snmp-5.7.2_new/agent/mibgroup/target/snmpTargetAddrEntry.c
--- net-snmp-5.7.2/agent/mibgroup/target/snmpTargetAddrEntry.c	
+++ net-snmp-5.7.2_new/agent/mibgroup/target/snmpTargetAddrEntry.c	
@@ -81,6 +81,7 @@ snmpTargetAddrTable_create(void)
 
         newEntry->tagList = strdup("");
         newEntry->params = NULL;
+        newEntry->paramsLen = 0;
 
         newEntry->storageType = SNMP_STORAGE_NONVOLATILE;
         newEntry->rowStatus = SNMP_ROW_NONEXISTENT;
@@ -106,6 +107,7 @@ snmpTargetAddrTable_dispose(struct targe
     SNMP_FREE(reaped->nameData);
     SNMP_FREE(reaped->tagList);
     SNMP_FREE(reaped->params);
+    reaped->paramsLen = 0;
 
     SNMP_FREE(reaped);
 }                               /* snmpTargetAddrTable_dispose  */
@@ -531,6 +533,7 @@ snmpTargetAddr_addParams(struct targetAd
             return (0);
         }
         entry->params = strdup(cptr);
+        entry->paramsLen = len;
     }
     return (1);
 }                               /* snmpTargetAddr_addParams */
@@ -1324,6 +1327,7 @@ write_snmpTargetAddrParams(int action,
 {
     struct targetAddrTable_struct *target = NULL;
     static char    *old_params = NULL;
+    static char    old_paramsLen = 0;
 
     if (action == RESERVE1) {
         if (var_val_type != ASN_OCTET_STR) {
@@ -1356,12 +1360,14 @@ write_snmpTargetAddrParams(int action,
             }
 
             old_params = target->params;
+            old_paramsLen = target->paramsLen;
             target->params = malloc(var_val_len + 1);
             if (target->params == NULL) {
                 return SNMP_ERR_RESOURCEUNAVAILABLE;
             }
             memcpy(target->params, var_val, var_val_len);
             target->params[var_val_len] = '\0';
+            target->paramsLen = var_val_len;
 
             /*
              * If row is new, check if its status can be updated.  
@@ -1374,6 +1380,7 @@ write_snmpTargetAddrParams(int action,
     } else if (action == COMMIT) {
         SNMP_FREE(old_params);
         old_params = NULL;
+        old_paramsLen = 0;
     } else if (action == FREE || action == UNDO) {
         /*
          * Try to undo the SET here (abnormal usage of FREE clause)  
@@ -1387,7 +1394,9 @@ write_snmpTargetAddrParams(int action,
             if (target->storageType != SNMP_STORAGE_READONLY
                 && target->rowStatus != SNMP_ROW_ACTIVE) {
                 SNMP_FREE(target->params);
+                target->paramsLen = old_paramsLen;
                 target->params = old_params;
+                
                 if (target->rowStatus == SNMP_ROW_NOTINSERVICE &&
                     snmpTargetAddr_rowStatusCheck(target) == 0) {
                     target->rowStatus = SNMP_ROW_NOTREADY;
diff -urpN net-snmp-5.7.2/agent/mibgroup/target/snmpTargetAddrEntry.h net-snmp-5.7.2_new/agent/mibgroup/target/snmpTargetAddrEntry.h
--- net-snmp-5.7.2/agent/mibgroup/target/snmpTargetAddrEntry.h	
+++ net-snmp-5.7.2_new/agent/mibgroup/target/snmpTargetAddrEntry.h	
@@ -56,6 +56,7 @@ config_add_mib(SNMPv2-TM)
          int             retryCount;
          char           *tagList;
          char           *params;
+         unsigned char   paramsLen;
          int             storageType;
          int             rowStatus;
          struct targetAddrTable_struct *next;
diff -urpN net-snmp-5.7.2/agent/mibgroup/target/snmpTargetParamsEntry.c net-snmp-5.7.2_new/agent/mibgroup/target/snmpTargetParamsEntry.c
--- net-snmp-5.7.2/agent/mibgroup/target/snmpTargetParamsEntry.c	
+++ net-snmp-5.7.2_new/agent/mibgroup/target/snmpTargetParamsEntry.c	
@@ -49,6 +49,7 @@ snmpTargetParamTable_create(void)
         malloc(sizeof(struct targetParamTable_struct));
 
     newEntry->paramName = NULL;
+    newEntry->paramNameLen = 0;
     newEntry->mpModel = -1;
 
     newEntry->secModel = -1;
@@ -70,6 +71,7 @@ void
 snmpTargetParamTable_dispose(struct targetParamTable_struct *reaped)
 {
     free(reaped->paramName);
+    reaped->paramNameLen = 0;
     free(reaped->secName);
 
     free(reaped);
@@ -102,16 +104,15 @@ snmpTargetParamTable_addToList(struct ta
         /*
          * get the 'OID' value of the new entry 
          */
-        newOIDLen = strlen(newEntry->paramName);
+        newOIDLen = (size_t) newEntry->paramNameLen;
         for (i = 0; i < (int) newOIDLen; i++) {
             newOID[i] = newEntry->paramName[i];
         }
-
         /*
          * search through the list for an equal or greater OID value 
          */
         while (curr_struct != NULL) {
-            currOIDLen = strlen(curr_struct->paramName);
+            currOIDLen = (size_t) curr_struct->paramNameLen;
             for (i = 0; i < (int) currOIDLen; i++) {
                 currOID[i] = curr_struct->paramName[i];
             }
@@ -204,10 +205,10 @@ search_snmpTargetParamsTable(oid * baseN
 
     for (temp_struct = aPTable; temp_struct != NULL;
          temp_struct = temp_struct->next) {
-        for (i = 0; i < (int) strlen(temp_struct->paramName); i++) {
+        for (i = 0; i < (int) temp_struct->paramNameLen; i++) {
             newNum[baseNameLen + i] = temp_struct->paramName[i];
         }
-        myOIDLen = baseNameLen + strlen(temp_struct->paramName);
+        myOIDLen = baseNameLen + temp_struct->paramNameLen;
         i = snmp_oid_compare(name, *length, newNum, myOIDLen);
         /*
          * Assumes that the linked list sorted by OID, low to high 
@@ -320,6 +321,7 @@ snmpTargetParams_addParamName(struct tar
             return (0);
         }
         entry->paramName = strdup(cptr);
+        entry->paramNameLen = len;
     }
     return (1);
 }
@@ -1233,6 +1235,7 @@ snmpTargetParams_createNewRow(oid * name
         }
 
         temp_struct->paramName[pNameLen] = '\0';
+        temp_struct->paramNameLen = pNameLen;
         temp_struct->rowStatus = SNMP_ROW_NOTREADY;
 
         update_timestamp(temp_struct);
@@ -1395,11 +1398,12 @@ write_snmpTargetParamsRowStatus(int acti
 
 
 struct targetParamTable_struct *
-get_paramEntry(char *name)
+get_paramEntry(char *name, unsigned char nameLen)
 {
     static struct targetParamTable_struct *ptr;
     for (ptr = aPTable; ptr; ptr = ptr->next) {
-        if (strcmp(ptr->paramName, name) == 0) {
+        if ((memcmp(ptr->paramName, name,ptr->paramNameLen) == 0) &&
+            (ptr->paramNameLen == nameLen)) {
             return ptr;
         }
     }
diff -urpN net-snmp-5.7.2/agent/mibgroup/target/snmpTargetParamsEntry.h net-snmp-5.7.2_new/agent/mibgroup/target/snmpTargetParamsEntry.h
--- net-snmp-5.7.2/agent/mibgroup/target/snmpTargetParamsEntry.h	
+++ net-snmp-5.7.2_new/agent/mibgroup/target/snmpTargetParamsEntry.h	
@@ -29,6 +29,7 @@
        */
        struct targetParamTable_struct {
            char           *paramName;
+           unsigned char   paramNameLen;
            int             mpModel;
            int             secModel;
            char           *secName;
@@ -42,7 +43,7 @@
   /*
    * utility functions 
    */
-       struct targetParamTable_struct *get_paramEntry(char *name);
+       struct targetParamTable_struct *get_paramEntry(char *name, unsigned char nameLen);
        void            snmpTargetParamTable_add(struct
                                                 targetParamTable_struct
                                                 *newEntry);
diff -urpN net-snmp-5.7.2/agent/mibgroup/target/target.c net-snmp-5.7.2_new/agent/mibgroup/target/target.c
--- net-snmp-5.7.2/agent/mibgroup/target/target.c	
+++ net-snmp-5.7.2_new/agent/mibgroup/target/target.c	
@@ -94,7 +94,7 @@ get_target_sessions(char *taglist, Targe
                                     tags[i]));
 
                         if (targaddrs->params) {
-                            param = get_paramEntry(targaddrs->params);
+                            param = get_paramEntry(targaddrs->params, targaddrs->paramsLen);
                             if (!param
                                 || param->rowStatus != SNMP_ROW_ACTIVE) {
                                 /*
------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead. 
Download for free and get started troubleshooting in minutes. 
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&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