--- src/zabbix_server/poller/checks_snmp.c.ori 2014-10-01 18:32:17.439016907 -0400 +++ src/zabbix_server/poller/checks_snmp.c 2014-10-07 14:01:25.903178357 -0400 @@ -551,6 +551,58 @@ return strval_dyn; } +#define PGINGRAS +#ifdef PGINGRAS +static char *zbx_snmp_get_objectid(const struct variable_list *var) +{ + const char *__function_name = "zbx_snmp_get_objectid"; + + // const char *hint; + char buffer[MAX_STRING_LEN]; + char *strval_dyn = NULL; + size_t offset = 0; + struct tree *subtree; + + zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __function_name); + zabbix_log(LOG_LEVEL_DEBUG, "In %s() BCDEFG", __function_name); + + subtree = get_tree(var->name, var->name_length, get_tree_head()); + + // Return the iod used to read + zabbix_log(LOG_LEVEL_DEBUG, "PGIN %s() name=%02X%02X%02X%02X%02X%02X%02X%02X%02X, len=%d", __function_name, + var->name[0], var->name[1], var->name[2], var->name[3], var->name[4], + var->name[5], var->name[6], var->name[7], var->name[8], var->name_length ); + + // hint = (NULL != subtree ? subtree->hint : NULL); + + // if (-1 == snprint_objid(buffer, sizeof(buffer), var->name, var->name_length )) + if (-1 == snprint_value(buffer, sizeof(buffer), var->name, var->name_length, var)) + goto end; + + // zabbix_log(LOG_LEVEL_DEBUG, "%s() AA full value:'%s' hint:'%s'", __function_name, buffer, ZBX_NULL2STR(hint)); + zabbix_log(LOG_LEVEL_DEBUG, "%s() AA full value:'%s'", __function_name, buffer); + + if (0 == strncmp(buffer, "OID: ", 5)) + { + zabbix_log(LOG_LEVEL_DEBUG, "In %s() AB", __function_name); + offset = 5; + } + else if (0 == strncmp(buffer, "STRING: ", 8)) + { + zabbix_log(LOG_LEVEL_DEBUG, "In %s() AE", __function_name); + offset = 8; + } + strval_dyn = zbx_strdup(strval_dyn, buffer + offset); + zabbix_log(LOG_LEVEL_DEBUG, "In %s() AD strval_dyn=%s", __function_name, strval_dyn); + + zbx_lrtrim(strval_dyn, ZBX_WHITESPACE); +end: + zabbix_log(LOG_LEVEL_DEBUG, "End of %s():'%s'", __function_name, ZBX_NULL2STR(strval_dyn)); + + return strval_dyn; +} +#endif // PGINGRAS + static int zbx_snmp_set_result(const struct variable_list *var, unsigned char value_type, unsigned char data_type, AGENT_RESULT *result) { @@ -576,6 +628,27 @@ zbx_free(strval_dyn); } } +#ifdef PGINGRAS + else if (ASN_OBJECT_ID == var->type) + { + // perform a test to NULL + if (NULL == (strval_dyn = zbx_snmp_get_objectid(var))) + { + SET_MSG_RESULT(result, zbx_get_snmp_type_error(var->type)); + ret = NOTSUPPORTED; + } + else + { + if (SUCCEED != set_result_type(result, value_type, data_type, strval_dyn)) + { + ret = NOTSUPPORTED; + } + ((struct variable_list *) var)->type = ASN_OCTET_STR; + + zbx_free(strval_dyn); + } + } +#endif // PGINGRAS #ifdef OPAQUE_SPECIAL_TYPES else if (ASN_UINTEGER == var->type || ASN_COUNTER == var->type || ASN_UNSIGNED64 == var->type || ASN_TIMETICKS == var->type || ASN_GAUGE == var->type)