--- zabbix-2.0.2/src/zabbix_server/poller/checks_snmp.c 2012-07-31 09:16:45.000000000 +0000 +++ zabbix-2.0.2-dev/src/zabbix_server/poller/checks_snmp.c 2012-08-08 07:45:10.141908840 +0000 @@ -750,7 +750,7 @@ struct snmp_pdu *pdu, *response; oid anOID[MAX_OID_LEN], rootOID[MAX_OID_LEN]; size_t anOID_len = MAX_OID_LEN, rootOID_len = MAX_OID_LEN; - char snmp_oid[MAX_STRING_LEN], *p; + char root_oid[MAX_STRING_LEN], snmp_oid[MAX_STRING_LEN]; struct variable_list *vars; int status, running, ret = SUCCEED; struct zbx_json j; @@ -764,6 +764,7 @@ /* create OID from string */ snmp_parse_oid(OID, rootOID, &rootOID_len); + snprint_objid(root_oid, sizeof(root_oid), rootOID, rootOID_len); /* copy rootOID to anOID */ memcpy(anOID, rootOID, rootOID_len * sizeof(oid)); @@ -785,8 +786,6 @@ { for (vars = response->variables; vars && running; vars = vars->next_variable) { - snprint_objid(snmp_oid, sizeof(snmp_oid), vars->name, vars->name_length); - /* verify if we are in the same subtree */ if (vars->name_length < rootOID_len || 0 != memcmp(rootOID, vars->name, rootOID_len * sizeof(oid))) @@ -809,13 +808,7 @@ break; } - if (NULL == (p = strrchr(snmp_oid, '.'))) - { - SET_MSG_RESULT(value, zbx_dsprintf(NULL, "Can't parse OID [%s]", snmp_oid)); - ret = NOTSUPPORTED; - running = 0; - break; - } + snprint_objid(snmp_oid, sizeof(snmp_oid), vars->name, vars->name_length); init_result(&snmp_value); @@ -823,7 +816,7 @@ GET_STR_RESULT(&snmp_value)) { zbx_json_addobject(&j, NULL); - zbx_json_addstring(&j, "{#SNMPINDEX}", &p[1], ZBX_JSON_TYPE_INT); + zbx_json_addstring(&j, "{#SNMPINDEX}", &snmp_oid[strlen(root_oid)+1], ZBX_JSON_TYPE_STRING); zbx_json_addstring(&j, "{#SNMPVALUE}", snmp_value.str, ZBX_JSON_TYPE_STRING); zbx_json_close(&j); }