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