From: Florian Forster Date: Sat, 5 Dec 2015 22:08:22 +0000 (+0100) Subject: Merge branch 'collectd-5.5' X-Git-Tag: collectd-5.6.0~520 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=090e054043f6d93b374dee20d766c4f906acd43a;hp=-c;p=collectd.git Merge branch 'collectd-5.5' --- 090e054043f6d93b374dee20d766c4f906acd43a diff --combined src/daemon/common.c index dfaa61aa,fba51ef8..dd4f9b15 --- a/src/daemon/common.c +++ b/src/daemon/common.c @@@ -46,6 -46,7 +46,6 @@@ /* for getaddrinfo */ #include -#include #include #include @@@ -258,8 -259,8 +258,8 @@@ ssize_t sread (int fd, void *buf, size_ assert ((0 > status) || (nleft >= (size_t)status)); - nleft = nleft - status; - ptr = ptr + status; + nleft = nleft - ((size_t) status); + ptr = ptr + ((size_t) status); } return (0); @@@ -299,8 -300,8 +299,8 @@@ ssize_t swrite (int fd, const void *buf if (status < 0) return (status); - nleft = nleft - status; - ptr = ptr + status; + nleft = nleft - ((size_t) status); + ptr = ptr + ((size_t) status); } return (0); @@@ -371,7 -372,7 +371,7 @@@ int strjoin (char *buffer, size_t buffe } assert (buffer[buffer_size - 1] == 0); - return (strlen (buffer)); + return ((int) strlen (buffer)); } int strsubstitute (char *str, char c_from, char c_to) @@@ -506,8 -507,8 +506,8 @@@ size_t strstripnewline (char *buffer int escape_slashes (char *buffer, size_t buffer_size) { - int i; size_t buffer_len; + size_t i; buffer_len = strlen (buffer); @@@ -680,8 -681,8 +680,8 @@@ int check_create_dir (const char *file_ * Join the components together again */ dir[0] = '/'; - if (strjoin (dir + path_is_absolute, dir_len - path_is_absolute, - fields, i + 1, "/") < 0) + if (strjoin (dir + path_is_absolute, (size_t) (dir_len - path_is_absolute), + fields, (size_t) (i + 1), "/") < 0) { ERROR ("strjoin failed: `%s', component #%i", file_orig, i); return (-1); @@@ -961,7 -962,7 +961,7 @@@ int format_values (char *ret, size_t re { size_t offset = 0; int status; - int i; + size_t i; gauge_t *rates = NULL; assert (0 == strcmp (ds->type, vl->type)); @@@ -1164,15 -1165,17 +1164,18 @@@ int parse_value (const char *value_orig int parse_values (char *buffer, value_list_t *vl, const data_set_t *ds) { - int i; + size_t i; char *dummy; char *ptr; char *saveptr; + if ((buffer == NULL) || (vl == NULL) || (ds == NULL)) + return EINVAL; + - i = -1; + i = 0; dummy = buffer; saveptr = NULL; + vl->time = 0; while ((ptr = strtok_r (dummy, ":", &saveptr)) != NULL) { dummy = NULL; @@@ -1180,11 -1183,11 +1183,11 @@@ if (i >= vl->values_len) { /* Make sure i is invalid. */ - i = vl->values_len + 1; + i = 0; break; } - if (i == -1) + if (vl->time == 0) { if (strcmp ("N", ptr) == 0) vl->time = cdtime (); @@@ -1203,19 -1206,19 +1206,19 @@@ vl->time = DOUBLE_TO_CDTIME_T (tmp); } + + continue; } - else - { - if ((strcmp ("U", ptr) == 0) && (ds->ds[i].type == DS_TYPE_GAUGE)) - vl->values[i].gauge = NAN; - else if (0 != parse_value (ptr, &vl->values[i], ds->ds[i].type)) - return -1; - } + + if ((strcmp ("U", ptr) == 0) && (ds->ds[i].type == DS_TYPE_GAUGE)) + vl->values[i].gauge = NAN; + else if (0 != parse_value (ptr, &vl->values[i], ds->ds[i].type)) + return -1; i++; } /* while (strtok_r) */ - if ((ptr != NULL) || (i != vl->values_len)) + if ((ptr != NULL) || (i == 0)) return (-1); return (0); } /* int parse_values */ @@@ -1377,9 -1380,10 +1380,9 @@@ counter_t counter_diff (counter_t old_v if (old_value > new_value) { if (old_value <= 4294967295U) - diff = (4294967295U - old_value) + new_value; + diff = (4294967295U - old_value) + new_value + 1; else - diff = (18446744073709551615ULL - old_value) - + new_value; + diff = (18446744073709551615ULL - old_value) + new_value + 1; } else { @@@ -1484,10 -1488,11 +1487,10 @@@ int rate_to_value (value_t *ret_value, return (0); } /* }}} value_t rate_to_value */ -int value_to_rate (value_t *ret_rate, derive_t value, /* {{{ */ - value_to_rate_state_t *state, - int ds_type, cdtime_t t) +int value_to_rate (gauge_t *ret_rate, /* {{{ */ + value_t value, int ds_type, cdtime_t t, value_to_rate_state_t *state) { - double interval; + gauge_t interval; /* Another invalid state: The time is not increasing. */ if (t <= state->last_time) @@@ -1499,39 -1504,50 +1502,39 @@@ interval = CDTIME_T_TO_DOUBLE(t - state->last_time); /* Previous value is invalid. */ - if (state->last_time == 0) /* {{{ */ + if (state->last_time == 0) { - if (ds_type == DS_TYPE_DERIVE) - { - state->last_value.derive = value; - } - else if (ds_type == DS_TYPE_COUNTER) - { - state->last_value.counter = (counter_t) value; - } - else if (ds_type == DS_TYPE_ABSOLUTE) - { - state->last_value.absolute = (absolute_t) value; - } - else - { - assert (23 == 42); - } - + state->last_value = value; state->last_time = t; return (EAGAIN); - } /* }}} */ + } - if (ds_type == DS_TYPE_DERIVE) - { - ret_rate->gauge = (value - state->last_value.derive) / interval; - state->last_value.derive = value; + switch (ds_type) { + case DS_TYPE_DERIVE: { + derive_t diff = value.derive - state->last_value.derive; + *ret_rate = ((gauge_t) diff) / ((gauge_t) interval); + break; } - else if (ds_type == DS_TYPE_COUNTER) - { - ret_rate->gauge = (((counter_t)value) - state->last_value.counter) / interval; - state->last_value.counter = (counter_t) value; + case DS_TYPE_GAUGE: { + *ret_rate = value.gauge; + break; } - else if (ds_type == DS_TYPE_ABSOLUTE) - { - ret_rate->gauge = (((absolute_t)value) - state->last_value.absolute) / interval; - state->last_value.absolute = (absolute_t) value; + case DS_TYPE_COUNTER: { + counter_t diff = counter_diff (state->last_value.counter, value.counter); + *ret_rate = ((gauge_t) diff) / ((gauge_t) interval); + break; } - else - { - assert (23 == 42); + case DS_TYPE_ABSOLUTE: { + absolute_t diff = value.absolute; + *ret_rate = ((gauge_t) diff) / ((gauge_t) interval); + break; + } + default: + return EINVAL; } - state->last_time = t; + state->last_value = value; + state->last_time = t; return (0); } /* }}} value_t rate_to_value */ diff --combined src/iptables.c index 806b7a45,590b6931..027a2327 --- a/src/iptables.c +++ b/src/iptables.c @@@ -29,6 -29,8 +29,6 @@@ #include "plugin.h" #include "configfile.h" -#include - #include #include @@@ -109,132 -111,127 +109,127 @@@ static int iptables_config (const char ip_version = IPV4; else if (strcasecmp (key, "Chain6") == 0) ip_version = IPV6; + else + return (1); - if (( ip_version == IPV4 ) || ( ip_version == IPV6 )) - { - ip_chain_t temp, *final, **list; - char *table; - int table_len; - char *chain; - int chain_len; - - char *value_copy; - char *fields[4]; - int fields_num; - - memset (&temp, 0, sizeof (temp)); - - value_copy = strdup (value); - if (value_copy == NULL) - { - char errbuf[1024]; - ERROR ("strdup failed: %s", - sstrerror (errno, errbuf, sizeof (errbuf))); - return (1); - } + ip_chain_t temp, *final, **list; + char *table; + int table_len; + char *chain; + int chain_len; - /* - * Time to fill the temp element - * Examine value string, it should look like: - * Chain[6] [ [name]] - */ + char *value_copy; + char *fields[4]; + int fields_num; - /* set IPv4 or IPv6 */ - temp.ip_version = ip_version; + memset (&temp, 0, sizeof (temp)); - /* Chain
[ [name]] */ - fields_num = strsplit (value_copy, fields, 4); - if (fields_num < 2) - { - free (value_copy); - return (1); - } + value_copy = strdup (value); + if (value_copy == NULL) + { + char errbuf[1024]; + ERROR ("strdup failed: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + return (1); + } - table = fields[0]; - chain = fields[1]; + /* + * Time to fill the temp element + * Examine value string, it should look like: + * Chain[6]
[ [name]] + */ - table_len = strlen (table) + 1; - if ((unsigned int)table_len > sizeof(temp.table)) - { - ERROR ("Table `%s' too long.", table); - free (value_copy); - return (1); - } - sstrncpy (temp.table, table, table_len); + /* set IPv4 or IPv6 */ + temp.ip_version = ip_version; - chain_len = strlen (chain) + 1; - if ((unsigned int)chain_len > sizeof(temp.chain)) - { - ERROR ("Chain `%s' too long.", chain); - free (value_copy); - return (1); - } - sstrncpy (temp.chain, chain, chain_len); + /* Chain
[ [name]] */ + fields_num = strsplit (value_copy, fields, 4); + if (fields_num < 2) + { + free (value_copy); + return (1); + } - if (fields_num >= 3) - { - char *comment = fields[2]; - int rule = atoi (comment); - - if (rule) - { - temp.rule.num = rule; - temp.rule_type = RTYPE_NUM; - } - else - { - temp.rule.comment = strdup (comment); - if (temp.rule.comment == NULL) - { - free (value_copy); - return (1); - } - temp.rule_type = RTYPE_COMMENT; - } - } - else - { - temp.rule_type = RTYPE_COMMENT_ALL; - } + table = fields[0]; + chain = fields[1]; - if (fields_num >= 4) - sstrncpy (temp.name, fields[3], sizeof (temp.name)); + table_len = strlen (table) + 1; + if ((unsigned int)table_len > sizeof(temp.table)) + { + ERROR ("Table `%s' too long.", table); + free (value_copy); + return (1); + } + sstrncpy (temp.table, table, table_len); + chain_len = strlen (chain) + 1; + if ((unsigned int)chain_len > sizeof(temp.chain)) + { + ERROR ("Chain `%s' too long.", chain); free (value_copy); - value_copy = NULL; - table = NULL; - chain = NULL; + return (1); + } + sstrncpy (temp.chain, chain, chain_len); - list = (ip_chain_t **) realloc (chain_list, (chain_num + 1) * sizeof (ip_chain_t *)); - if (list == NULL) + if (fields_num >= 3) + { + char *comment = fields[2]; + int rule = atoi (comment); + + if (rule) + { + temp.rule.num = rule; + temp.rule_type = RTYPE_NUM; + } + else + { + temp.rule.comment = strdup (comment); + if (temp.rule.comment == NULL) { - char errbuf[1024]; - ERROR ("realloc failed: %s", - sstrerror (errno, errbuf, sizeof (errbuf))); - sfree (temp.rule.comment); + free (value_copy); return (1); } + temp.rule_type = RTYPE_COMMENT; + } + } + else + { + temp.rule_type = RTYPE_COMMENT_ALL; + } - chain_list = list; - final = (ip_chain_t *) malloc( sizeof(temp) ); - if (final == NULL) - { - char errbuf[1024]; - ERROR ("malloc failed: %s", - sstrerror (errno, errbuf, sizeof (errbuf))); - sfree (temp.rule.comment); - return (1); - } - memcpy (final, &temp, sizeof (temp)); - chain_list[chain_num] = final; - chain_num++; + if (fields_num >= 4) + sstrncpy (temp.name, fields[3], sizeof (temp.name)); - DEBUG ("Chain #%i: table = %s; chain = %s;", chain_num, final->table, final->chain); + free (value_copy); + value_copy = NULL; + table = NULL; + chain = NULL; + + list = (ip_chain_t **) realloc (chain_list, (chain_num + 1) * sizeof (ip_chain_t *)); + if (list == NULL) + { + char errbuf[1024]; + ERROR ("realloc failed: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + sfree (temp.rule.comment); + return (1); } - else + + chain_list = list; + final = (ip_chain_t *) malloc( sizeof(temp) ); + if (final == NULL) { - return (-1); + char errbuf[1024]; + ERROR ("malloc failed: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + sfree (temp.rule.comment); + return (1); } + memcpy (final, &temp, sizeof (temp)); + chain_list[chain_num] = final; + chain_num++; + + DEBUG ("Chain #%i: table = %s; chain = %s;", chain_num, final->table, final->chain); return (0); } /* int iptables_config */ diff --combined src/libcollectdclient/network.c index 7b98497c,a3b8fdfa..7a866ee7 --- a/src/libcollectdclient/network.c +++ b/src/libcollectdclient/network.c @@@ -89,7 -89,6 +89,7 @@@ static int server_close_socket (lcc_ser return (0); close (srv->fd); + srv->fd = -1; free (srv->sa); srv->sa = NULL; srv->sa_len = 0; @@@ -108,6 -107,12 +108,6 @@@ static void int_server_destroy (lcc_ser next = srv->next; - if (srv->fd >= 0) - { - close (srv->fd); - srv->fd = -1; - } - free (srv->node); free (srv->service); free (srv->username); @@@ -149,7 -154,6 +149,6 @@@ static int server_open_socket (lcc_serv if (ai_ptr->ai_family == AF_INET) { - struct sockaddr_in *addr = (struct sockaddr_in *) ai_ptr->ai_addr; int optname; @@@ -158,9 -162,8 +157,8 @@@ else optname = IP_TTL; - setsockopt (srv->fd, IPPROTO_IP, optname, - &srv->ttl, - sizeof (srv->ttl)); + status = setsockopt (srv->fd, IPPROTO_IP, optname, + &srv->ttl, sizeof (srv->ttl)); } else if (ai_ptr->ai_family == AF_INET6) { @@@ -173,9 -176,15 +171,15 @@@ else optname = IPV6_UNICAST_HOPS; - setsockopt (srv->fd, IPPROTO_IPV6, optname, - &srv->ttl, - sizeof (srv->ttl)); + status = setsockopt (srv->fd, IPPROTO_IPV6, optname, + &srv->ttl, sizeof (srv->ttl)); + } + if (status != 0) + { + /* setsockopt failed. */ + close (srv->fd); + srv->fd = -1; + continue; } srv->sa = malloc (ai_ptr->ai_addrlen); @@@ -388,7 -397,7 +392,7 @@@ int lcc_server_set_ttl (lcc_server_t *s int lcc_server_set_interface (lcc_server_t *srv, char const *interface) /* {{{ */ { - int if_index; + unsigned int if_index; int status; if ((srv == NULL) || (interface == NULL)) @@@ -416,7 -425,7 +420,7 @@@ memset (&mreq, 0, sizeof (mreq)); mreq.imr_multiaddr.s_addr = addr->sin_addr.s_addr; mreq.imr_address.s_addr = ntohl (INADDR_ANY); - mreq.imr_ifindex = if_index; + mreq.imr_ifindex = (int) if_index; #else struct ip_mreq mreq; @@@ -452,8 -461,8 +456,8 @@@ /* else: Not a multicast interface. */ #if defined(SO_BINDTODEVICE) - status = setsockopt (srv->fd, SOL_SOCKET, SO_BINDTODEVICE, - interface, strlen (interface) + 1); + status = setsockopt (srv->fd, SOL_SOCKET, SO_BINDTODEVICE, interface, + (socklen_t) (strlen (interface) + 1)); if (status != 0) return (-1); #endif