X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fsnmp.c;h=d19493df9a53d5e4aefee9190cdc36cc6396afb3;hb=10075e6fe3c384b73c2dd398a1435f8d10e56654;hp=4311ff1670b5f92a6e2927d16420e2c1c5f8a011;hpb=7237c726f589df921a26d6951c2d1bf853580c43;p=collectd.git diff --git a/src/snmp.c b/src/snmp.c index 4311ff16..d19493df 100644 --- a/src/snmp.c +++ b/src/snmp.c @@ -198,7 +198,8 @@ static int csnmp_config_add_data_instance (data_definition_t *dd, oconfig_item_t else { /* Instance is a simple string */ - strncpy (dd->instance.string, ci->values[0].value.string, DATA_MAX_NAME_LEN - 1); + sstrncpy (dd->instance.string, ci->values[0].value.string, + sizeof (dd->instance.string)); } return (0); @@ -779,7 +780,7 @@ static int csnmp_check_res_left_subtree (const host_definition_t *host, if (vb == NULL) { ERROR ("snmp plugin: host %s: Expected one more variable for " - "the instance.."); + "the instance..", host->name); return (-1); } @@ -833,11 +834,10 @@ static int csnmp_instance_list_add (csnmp_list_instances_t **head, if (instance_len > vb->val_len) instance_len = vb->val_len; - strncpy (il->instance, (char *) ((vb->type == ASN_OCTET_STR) + sstrncpy (il->instance, (char *) ((vb->type == ASN_OCTET_STR) ? vb->val.string : vb->val.bitstring), instance_len); - il->instance[instance_len] = '\0'; for (ptr = il->instance; *ptr != '\0'; ptr++) { @@ -851,10 +851,9 @@ static int csnmp_instance_list_add (csnmp_list_instances_t **head, else { value_t val = csnmp_value_list_to_value (vb, DS_TYPE_COUNTER, 1.0, 0.0); - snprintf (il->instance, sizeof (il->instance), + ssnprintf (il->instance, sizeof (il->instance), "%llu", val.counter); } - il->instance[sizeof (il->instance) - 1] = '\0'; /* TODO: Debugging output */ @@ -907,9 +906,8 @@ static int csnmp_dispatch_table (host_definition_t *host, data_definition_t *dat return (-1); } - strncpy (vl.host, host->name, sizeof (vl.host)); - vl.host[sizeof (vl.host) - 1] = '\0'; - strcpy (vl.plugin, "snmp"); + sstrncpy (vl.host, host->name, sizeof (vl.host)); + sstrncpy (vl.plugin, "snmp", sizeof (vl.plugin)); vl.interval = host->interval; vl.time = time (NULL); @@ -972,30 +970,28 @@ static int csnmp_dispatch_table (host_definition_t *host, data_definition_t *dat || (instance_list_ptr->subid == value_table_ptr[0]->subid)); #endif + sstrncpy (vl.type, data->type, sizeof (vl.type)); + { char temp[DATA_MAX_NAME_LEN]; if (instance_list_ptr == NULL) - snprintf (temp, sizeof (temp), "%u", - (uint32_t) subid); + ssnprintf (temp, sizeof (temp), "%u", (uint32_t) subid); else - strncpy (temp, instance_list_ptr->instance, - sizeof (temp)); - temp[sizeof (temp) - 1] = '\0'; + sstrncpy (temp, instance_list_ptr->instance, sizeof (temp)); if (data->instance_prefix == NULL) - strncpy (vl.type_instance, temp, sizeof (vl.type_instance)); + sstrncpy (vl.type_instance, temp, sizeof (vl.type_instance)); else - snprintf (vl.type_instance, sizeof (vl.type_instance), "%s%s", + ssnprintf (vl.type_instance, sizeof (vl.type_instance), "%s%s", data->instance_prefix, temp); - vl.type_instance[sizeof (vl.type_instance) - 1] = '\0'; } for (i = 0; i < data->values_len; i++) vl.values[i] = value_table_ptr[i]->value; /* If we get here `vl.type_instance' and all `vl.values' have been set */ - plugin_dispatch_values (data->type, &vl); + plugin_dispatch_values (&vl); subid++; } /* while (have_more != 0) */ @@ -1299,11 +1295,10 @@ static int csnmp_read_value (host_definition_t *host, data_definition_t *data) vl.values[i].gauge = NAN; } - strncpy (vl.host, host->name, sizeof (vl.host)); - vl.host[sizeof (vl.host) - 1] = '\0'; - strcpy (vl.plugin, "snmp"); - strncpy (vl.type_instance, data->instance.string, sizeof (vl.type_instance)); - vl.type_instance[sizeof (vl.type_instance) - 1] = '\0'; + sstrncpy (vl.host, host->name, sizeof (vl.host)); + sstrncpy (vl.plugin, "snmp", sizeof (vl.plugin)); + sstrncpy (vl.type, data->type, sizeof (vl.type)); + sstrncpy (vl.type_instance, data->instance.string, sizeof (vl.type_instance)); vl.interval = host->interval; @@ -1361,8 +1356,8 @@ static int csnmp_read_value (host_definition_t *host, data_definition_t *data) snmp_free_pdu (res); res = NULL; - DEBUG ("snmp plugin: -> plugin_dispatch_values (%s, &vl);", data->type); - plugin_dispatch_values (data->type, &vl); + DEBUG ("snmp plugin: -> plugin_dispatch_values (&vl);"); + plugin_dispatch_values (&vl); sfree (vl.values); return (0); @@ -1400,8 +1395,8 @@ static int csnmp_read_host (host_definition_t *host) if ((time_end - time_start) > host->interval) { WARNING ("snmp plugin: Host `%s' should be queried every %i seconds, " - "but reading all values takes %i seconds.", - host->name, host->interval, time_end - time_start); + "but reading all values takes %lu seconds.", + host->name, host->interval, (unsigned long)(time_end - time_start)); } return (0);