X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fascent.c;h=993e480cb1746b0464741967eb6340921365ca7b;hb=e35f3c5c634216860f14586a7d17232022d8b588;hp=6b4f21fc6b887b37b6ddfc70a8cdd5bfdd7e9018;hpb=cacaa2126020832df99fa6423147bd3de6d4faae;p=collectd.git diff --git a/src/ascent.c b/src/ascent.c index 6b4f21fc..993e480c 100644 --- a/src/ascent.c +++ b/src/ascent.c @@ -91,10 +91,12 @@ struct player_info_s typedef struct player_info_s player_info_t; #define PLAYER_INFO_STATIC_INIT { -1, -1, -1, -1, -1 } -static char *url = NULL; -static char *user = NULL; -static char *pass = NULL; -static char *cacert = NULL; +static char *url = NULL; +static char *user = NULL; +static char *pass = NULL; +static char *verify_peer = NULL; +static char *verify_host = NULL; +static char *cacert = NULL; static CURL *curl = NULL; @@ -108,6 +110,8 @@ static const char *config_keys[] = "URL", "User", "Password", + "VerifyPeer", + "VerifyHost", "CACert" }; static int config_keys_num = STATIC_ARRAY_SIZE (config_keys); @@ -122,9 +126,8 @@ static int ascent_submit_gauge (const char *plugin_instance, /* {{{ */ vl.values = values; vl.values_len = 1; - vl.time = time (NULL); - strcpy (vl.host, hostname_g); - strcpy (vl.plugin, "ascent"); + sstrncpy (vl.host, hostname_g, sizeof (vl.host)); + sstrncpy (vl.plugin, "ascent", sizeof (vl.plugin)); if (plugin_instance != NULL) sstrncpy (vl.plugin_instance, plugin_instance, @@ -140,7 +143,7 @@ static int ascent_submit_gauge (const char *plugin_instance, /* {{{ */ } /* }}} int ascent_submit_gauge */ static size_t ascent_curl_callback (void *buf, size_t size, size_t nmemb, /* {{{ */ - void *stream) + void __attribute__((unused)) *stream) { size_t len = size * nmemb; @@ -171,7 +174,7 @@ static size_t ascent_curl_callback (void *buf, size_t size, size_t nmemb, /* {{{ static int ascent_submit_players (player_stats_t *ps) /* {{{ */ { - int i; + size_t i; gauge_t value; for (i = 0; i < RACES_LIST_LENGTH; i++) @@ -210,7 +213,7 @@ static int ascent_account_player (player_stats_t *ps, /* {{{ */ { if (pi->race >= 0) { - if ((pi->race >= RACES_LIST_LENGTH) + if (((size_t) pi->race >= RACES_LIST_LENGTH) || (races_list[pi->race] == NULL)) ERROR ("ascent plugin: Ignoring invalid numeric race %i.", pi->race); else @@ -219,7 +222,7 @@ static int ascent_account_player (player_stats_t *ps, /* {{{ */ if (pi->class >= 0) { - if ((pi->class >= CLASSES_LIST_LENGTH) + if (((size_t) pi->class >= CLASSES_LIST_LENGTH) || (classes_list[pi->class] == NULL)) ERROR ("ascent plugin: Ignoring invalid numeric class %i.", pi->class); else @@ -228,7 +231,7 @@ static int ascent_account_player (player_stats_t *ps, /* {{{ */ if (pi->gender >= 0) { - if ((pi->gender >= GENDERS_LIST_LENGTH) + if (((size_t) pi->gender >= GENDERS_LIST_LENGTH) || (genders_list[pi->gender] == NULL)) ERROR ("ascent plugin: Ignoring invalid numeric gender %i.", pi->gender); @@ -273,10 +276,12 @@ static int ascent_xml_submit_gauge (xmlDoc *doc, xmlNode *node, /* {{{ */ value = strtod (str_ptr, &end_ptr); if (str_ptr == end_ptr) { + xmlFree(str_ptr); ERROR ("ascent plugin: ascent_xml_submit_gauge: strtod failed."); return (-1); } } + xmlFree(str_ptr); return (ascent_submit_gauge (plugin_instance, type, type_instance, value)); } /* }}} int ascent_xml_submit_gauge */ @@ -302,10 +307,12 @@ static int ascent_xml_read_int (xmlDoc *doc, xmlNode *node, /* {{{ */ value = strtol (str_ptr, &end_ptr, 0); if (str_ptr == end_ptr) { + xmlFree(str_ptr); ERROR ("ascent plugin: ascent_xml_read_int: strtol failed."); return (-1); } } + xmlFree(str_ptr); *ret_value = value; return (0); @@ -500,6 +507,10 @@ static int ascent_config (const char *key, const char *value) /* {{{ */ return (config_set (&user, value)); else if (strcasecmp (key, "Password") == 0) return (config_set (&pass, value)); + else if (strcasecmp (key, "VerifyPeer") == 0) + return (config_set (&verify_peer, value)); + else if (strcasecmp (key, "VerifyHost") == 0) + return (config_set (&verify_host, value)); else if (strcasecmp (key, "CACert") == 0) return (config_set (&cacert, value)); else @@ -528,6 +539,7 @@ static int ascent_init (void) /* {{{ */ return (-1); } + curl_easy_setopt (curl, CURLOPT_NOSIGNAL, 1); curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, ascent_curl_callback); curl_easy_setopt (curl, CURLOPT_USERAGENT, PACKAGE_NAME"/"PACKAGE_VERSION); curl_easy_setopt (curl, CURLOPT_ERRORBUFFER, ascent_curl_error); @@ -538,7 +550,7 @@ static int ascent_init (void) /* {{{ */ status = ssnprintf (credentials, sizeof (credentials), "%s:%s", user, (pass == NULL) ? "" : pass); - if (status >= sizeof (credentials)) + if ((status < 0) || ((size_t) status >= sizeof (credentials))) { ERROR ("ascent plugin: ascent_init: Returning an error because the " "credentials have been truncated."); @@ -549,6 +561,17 @@ static int ascent_init (void) /* {{{ */ } curl_easy_setopt (curl, CURLOPT_URL, url); + curl_easy_setopt (curl, CURLOPT_FOLLOWLOCATION, 1); + + if ((verify_peer == NULL) || IS_TRUE (verify_peer)) + curl_easy_setopt (curl, CURLOPT_SSL_VERIFYPEER, 1); + else + curl_easy_setopt (curl, CURLOPT_SSL_VERIFYPEER, 0); + + if ((verify_host == NULL) || IS_TRUE (verify_host)) + curl_easy_setopt (curl, CURLOPT_SSL_VERIFYHOST, 2); + else + curl_easy_setopt (curl, CURLOPT_SSL_VERIFYHOST, 0); if (cacert != NULL) curl_easy_setopt (curl, CURLOPT_CAINFO, cacert);