From: Florian Forster Date: Tue, 22 Jan 2008 10:06:15 +0000 (+0100) Subject: apache plugin: Improved some error messages and fixed-buffer string copying. X-Git-Tag: collectd-4.3.0beta0~10^2~1^2~1^2 X-Git-Url: https://git.octo.it/?a=commitdiff_plain;h=df724fee6b417cfbeea2925f4c6fd8c70f9a7d66;p=collectd.git apache plugin: Improved some error messages and fixed-buffer string copying. Return an error when initialization fails. This includes the case when no URL is configured. The user is informed about this as clear as possible. Also, `strncpy' and `snprintf' now are followed by a forced NULL-termination of the strings to be on the save side. This also changes the plugin to look more like the other plugins which mostly do this already. --- diff --git a/src/apache.c b/src/apache.c index 5a3272f8..280c687f 100644 --- a/src/apache.c +++ b/src/apache.c @@ -1,6 +1,6 @@ /** * collectd - src/apache.c - * Copyright (C) 2006,2007 Florian octo Forster + * Copyright (C) 2006-2008 Florian octo Forster * Copyright (C) 2007 Florent EppO Monbillard * * This program is free software; you can redistribute it and/or modify it @@ -46,10 +46,9 @@ static const char *config_keys[] = "URL", "User", "Password", - "CACert", - NULL + "CACert" }; -static int config_keys_num = 4; +static int config_keys_num = STATIC_ARRAY_SIZE (config_keys); static size_t apache_curl_callback (void *buf, size_t size, size_t nmemb, void *stream) { @@ -103,7 +102,11 @@ static int init (void) static char credentials[1024]; if (url == NULL) - return (0); + { + WARNING ("apache plugin: init: No URL configured, returning " + "an error."); + return (-1); + } if (curl != NULL) { @@ -112,7 +115,7 @@ static int init (void) if ((curl = curl_easy_init ()) == NULL) { - ERROR ("apache: `curl_easy_init' failed."); + ERROR ("apache plugin: init: `curl_easy_init' failed."); return (-1); } @@ -122,11 +125,18 @@ static int init (void) if (user != NULL) { - if (snprintf (credentials, 1024, "%s:%s", user, pass == NULL ? "" : pass) >= 1024) + int status; + + status = snprintf (credentials, sizeof (credentials), "%s:%s", + user, (pass == NULL) ? "" : pass); + if (status >= sizeof (credentials)) { - ERROR ("apache: Credentials would have been truncated."); + ERROR ("apache plugin: init: Returning an error " + "because the credentials have been " + "truncated."); return (-1); } + credentials[sizeof (credentials) - 1] = '\0'; curl_easy_setopt (curl, CURLOPT_USERPWD, credentials); } @@ -142,14 +152,11 @@ static int init (void) } /* int init */ static void submit_counter (const char *type, const char *type_instance, - unsigned long long value) + counter_t value) { value_t values[1]; value_list_t vl = VALUE_LIST_INIT; - DEBUG ("type = %s; type_instance = %s; value = %llu;", - type, type_instance, value); - values[0].counter = value; vl.values = values; @@ -158,20 +165,23 @@ static void submit_counter (const char *type, const char *type_instance, strcpy (vl.host, hostname_g); strcpy (vl.plugin, "apache"); strcpy (vl.plugin_instance, ""); - strncpy (vl.type_instance, type_instance, sizeof (vl.type_instance)); + + if (type_instance != NULL) + { + strncpy (vl.type_instance, type_instance, + sizeof (vl.type_instance)); + vl.type_instance[sizeof (vl.type_instance) - 1] = '\0'; + } plugin_dispatch_values (type, &vl); } /* void submit_counter */ static void submit_gauge (const char *type, const char *type_instance, - double value) + gauge_t value) { value_t values[1]; value_list_t vl = VALUE_LIST_INIT; - DEBUG ("type = %s; type_instance = %s; value = %lf;", - type, type_instance, value); - values[0].gauge = value; vl.values = values; @@ -182,8 +192,11 @@ static void submit_gauge (const char *type, const char *type_instance, strcpy (vl.plugin_instance, ""); if (type_instance != NULL) + { strncpy (vl.type_instance, type_instance, sizeof (vl.type_instance)); + vl.type_instance[sizeof (vl.type_instance) - 1] = '\0'; + } plugin_dispatch_values (type, &vl); } /* void submit_counter */