X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fnetwork.c;h=4393d08af384808506604c5722775f4efe646eba;hb=005a70ad7863229b8c60e8ca83b67e89dfb05ad0;hp=219f163eadbac1030f5b8f652cf1eaf9090d11f8;hpb=c89182b424bb4184bd7da3f2ab687b542ed7eea3;p=collectd.git diff --git a/src/network.c b/src/network.c index 219f163e..4393d08a 100644 --- a/src/network.c +++ b/src/network.c @@ -30,7 +30,6 @@ #include "common.h" #include "configfile.h" #include "utils_fbhash.h" -#include "utils_avltree.h" #include "utils_cache.h" #include "utils_complain.h" @@ -410,10 +409,10 @@ static int network_dispatch_values (value_list_t *vl, /* {{{ */ { int status; - if ((vl->time <= 0) - || (strlen (vl->host) <= 0) - || (strlen (vl->plugin) <= 0) - || (strlen (vl->type) <= 0)) + if ((vl->time == 0) + || (strlen (vl->host) == 0) + || (strlen (vl->plugin) == 0) + || (strlen (vl->type) == 0)) return (-EINVAL); if (!check_receive_okay (vl)) @@ -494,6 +493,8 @@ static int network_dispatch_notification (notification_t *n) /* {{{ */ #if HAVE_LIBGCRYPT static void network_init_gcrypt (void) /* {{{ */ { + gcry_error_t err; + /* http://lists.gnupg.org/pipermail/gcrypt-devel/2003-August/000458.html * Because you can't know in a library whether another library has * already initialized the library */ @@ -508,10 +509,23 @@ static void network_init_gcrypt (void) /* {{{ */ * * tl;dr: keep all these gry_* statements in this exact order please. */ # if GCRYPT_VERSION_NUMBER < 0x010600 - gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread); + err = gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread); + if (err) + { + ERROR ("network plugin: gcry_control (GCRYCTL_SET_THREAD_CBS) failed: %s", gcry_strerror (err)); + abort (); + } # endif + gcry_check_version (NULL); - gcry_control (GCRYCTL_INIT_SECMEM, 32768); + + err = gcry_control (GCRYCTL_INIT_SECMEM, 32768); + if (err) + { + ERROR ("network plugin: gcry_control (GCRYCTL_INIT_SECMEM) failed: %s", gcry_strerror (err)); + abort (); + } + gcry_control (GCRYCTL_INITIALIZATION_FINISHED); } /* }}} void network_init_gcrypt */ @@ -591,11 +605,11 @@ static gcry_cipher_hd_t network_get_aes256_cypher (sockent_t *se, /* {{{ */ } /* }}} int network_get_aes256_cypher */ #endif /* HAVE_LIBGCRYPT */ -static int write_part_values (char **ret_buffer, int *ret_buffer_len, +static int write_part_values (char **ret_buffer, size_t *ret_buffer_len, const data_set_t *ds, const value_list_t *vl) { char *packet_ptr; - int packet_len; + size_t packet_len; int num_values; part_header_t pkg_ph; @@ -603,7 +617,7 @@ static int write_part_values (char **ret_buffer, int *ret_buffer_len, uint8_t *pkg_values_types; value_t *pkg_values; - int offset; + size_t offset; int i; num_values = vl->values_len; @@ -692,16 +706,16 @@ static int write_part_values (char **ret_buffer, int *ret_buffer_len, return (0); } /* int write_part_values */ -static int write_part_number (char **ret_buffer, int *ret_buffer_len, +static int write_part_number (char **ret_buffer, size_t *ret_buffer_len, int type, uint64_t value) { char *packet_ptr; - int packet_len; + size_t packet_len; part_header_t pkg_head; uint64_t pkg_value; - int offset; + size_t offset; packet_len = sizeof (pkg_head) + sizeof (pkg_value); @@ -727,16 +741,16 @@ static int write_part_number (char **ret_buffer, int *ret_buffer_len, return (0); } /* int write_part_number */ -static int write_part_string (char **ret_buffer, int *ret_buffer_len, - int type, const char *str, int str_len) +static int write_part_string (char **ret_buffer, size_t *ret_buffer_len, + int type, const char *str, size_t str_len) { char *buffer; - int buffer_len; + size_t buffer_len; uint16_t pkg_type; uint16_t pkg_length; - int offset; + size_t offset; buffer_len = 2 * sizeof (uint16_t) + str_len + 1; if (*ret_buffer_len < buffer_len) @@ -1246,7 +1260,7 @@ static int parse_part_encr_aes256 (sockent_t *se, /* {{{ */ BUFFER_READ (&username_len, sizeof (username_len)); username_len = ntohs (username_len); - if ((username_len <= 0) + if ((username_len == 0) || (username_len > (part_size - (PART_ENCRYPTION_AES256_SIZE + 1)))) { NOTICE ("network plugin: parse_part_encr_aes256: " @@ -1439,6 +1453,7 @@ static int parse_packet (sockent_t *se, /* {{{ */ printed_ignore_warning = 1; } buffer = ((char *) buffer) + pkg_length; + buffer_size -= (size_t) pkg_length; continue; } #endif /* HAVE_LIBGCRYPT */ @@ -1466,6 +1481,7 @@ static int parse_packet (sockent_t *se, /* {{{ */ printed_ignore_warning = 1; } buffer = ((char *) buffer) + pkg_length; + buffer_size -= (size_t) pkg_length; continue; } #endif /* HAVE_LIBGCRYPT */ @@ -1577,13 +1593,13 @@ static int parse_packet (sockent_t *se, /* {{{ */ "unknown severity %i.", n.severity); } - else if (n.time <= 0) + else if (n.time == 0) { INFO ("network plugin: " "Ignoring notification with " "time == 0."); } - else if (strlen (n.message) <= 0) + else if (strlen (n.message) == 0) { INFO ("network plugin: " "Ignoring notification with " @@ -1607,6 +1623,7 @@ static int parse_packet (sockent_t *se, /* {{{ */ DEBUG ("network plugin: parse_packet: Unknown part" " type: 0x%04hx", pkg_type); buffer = ((char *) buffer) + pkg_length; + buffer_size -= (size_t) pkg_length; } } /* while (buffer_size > sizeof (part_header_t)) */ @@ -2797,7 +2814,7 @@ static void network_send_buffer (char *buffer, size_t buffer_len) /* {{{ */ } /* for (sending_sockets) */ } /* }}} void network_send_buffer */ -static int add_to_buffer (char *buffer, int buffer_size, /* {{{ */ +static int add_to_buffer (char *buffer, size_t buffer_size, /* {{{ */ value_list_t *vl_def, const data_set_t *ds, const value_list_t *vl) { @@ -3241,10 +3258,10 @@ static int network_config (oconfig_item_t *ci) /* {{{ */ static int network_notification (const notification_t *n, user_data_t __attribute__((unused)) *user_data) { - char buffer[network_config_packet_size]; - char *buffer_ptr = buffer; - int buffer_free = sizeof (buffer); - int status; + char buffer[network_config_packet_size]; + char *buffer_ptr = buffer; + size_t buffer_free = sizeof (buffer); + int status; if (!check_send_notify_okay (n)) return (0);