X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Flibcollectdclient%2Fnetwork_buffer.c;h=8d35d2031bf07f2608494056fccb24bc34a811e1;hb=3d7453f6c3a13dc49e9ed6dd6d7a19202a3b087e;hp=5553d82629bc08974cf27c3a72e7fd0cc39a553b;hpb=05fb05dcf56a4676956c38d7a33ae5e6967ac331;p=collectd.git diff --git a/src/libcollectdclient/network_buffer.c b/src/libcollectdclient/network_buffer.c index 5553d826..8d35d203 100644 --- a/src/libcollectdclient/network_buffer.c +++ b/src/libcollectdclient/network_buffer.c @@ -1,6 +1,6 @@ /** * collectd - src/libcollectdclient/network_buffer.c - * Copyright (C) 2010-2012 Florian octo Forster + * Copyright (C) 2010-2015 Florian octo Forster * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -44,12 +44,19 @@ */ # pragma GCC diagnostic ignored "-Wdeprecated-declarations" # endif +/* FreeBSD's copy of libgcrypt extends the existing GCRYPT_NO_DEPRECATED + * to properly hide all deprecated functionality. + * http://svnweb.freebsd.org/ports/head/security/libgcrypt/files/patch-src__gcrypt.h.in + */ +# define GCRYPT_NO_DEPRECATED # include # if defined __APPLE__ /* Re enable deprecation warnings */ # pragma GCC diagnostic warning "-Wdeprecated-declarations" # endif +# if GCRYPT_VERSION_NUMBER < 0x010600 GCRY_THREAD_OPTION_PTHREAD_IMPL; +# endif #endif #include "collectd/network_buffer.h" @@ -101,9 +108,11 @@ struct lcc_network_buffer_s char *username; char *password; +#if HAVE_LIBGCRYPT gcry_cipher_hd_t encr_cypher; size_t encr_header_len; char encr_iv[16]; +#endif }; #define SSTRNCPY(dst,src,sz) do { \ @@ -123,18 +132,28 @@ static _Bool have_gcrypt (void) /* {{{ */ return (result); need_init = 0; - gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread); +#if HAVE_LIBGCRYPT +# if GCRYPT_VERSION_NUMBER < 0x010600 + if (gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread)) + return (0); +# endif if (!gcry_check_version (GCRYPT_VERSION)) return (0); - gcry_control (GCRYCTL_INIT_SECMEM, 32768, 0); + if (!gcry_control (GCRYCTL_INIT_SECMEM, 32768, 0)) + return (0); + gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0); result = 1; return (1); +#else + return(0); +#endif } /* }}} _Bool have_gcrypt */ +#ifndef HAVE_HTONLL static uint64_t htonll (uint64_t val) /* {{{ */ { static int config = 0; @@ -164,6 +183,7 @@ static uint64_t htonll (uint64_t val) /* {{{ */ return ((((uint64_t) lo) << 32) | ((uint64_t) hi)); } /* }}} uint64_t htonll */ +#endif static double htond (double val) /* {{{ */ { @@ -489,6 +509,7 @@ static int nb_add_value_list (lcc_network_buffer_t *nb, /* {{{ */ return (0); } /* }}} int nb_add_value_list */ +#if HAVE_LIBGCRYPT static int nb_add_signature (lcc_network_buffer_t *nb) /* {{{ */ { char *buffer; @@ -615,6 +636,7 @@ static int nb_add_encryption (lcc_network_buffer_t *nb) /* {{{ */ return (0); } /* }}} int nb_add_encryption */ +#endif /* * Public functions @@ -715,6 +737,7 @@ int lcc_network_buffer_initialize (lcc_network_buffer_t *nb) /* {{{ */ nb->ptr = nb->buffer; nb->free = nb->size; +#if HAVE_LIBGCRYPT if (nb->seclevel == SIGN) { size_t username_len; @@ -760,6 +783,7 @@ int lcc_network_buffer_initialize (lcc_network_buffer_t *nb) /* {{{ */ ADD_GENERIC (nb, hash, sizeof (hash)); assert ((nb->encr_header_len + nb->free) == nb->size); } +#endif return (0); } /* }}} int lcc_network_buffer_initialize */ @@ -769,10 +793,12 @@ int lcc_network_buffer_finalize (lcc_network_buffer_t *nb) /* {{{ */ if (nb == NULL) return (EINVAL); +#if HAVE_LIBGCRYPT if (nb->seclevel == SIGN) - nb_add_signature (nb); + return nb_add_signature (nb); else if (nb->seclevel == ENCRYPT) - nb_add_encryption (nb); + return nb_add_encryption (nb); +#endif return (0); } /* }}} int lcc_network_buffer_finalize */