summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 1d429f7)
raw | patch | inline | side by side (parent: 1d429f7)
author | Florian Forster <octo@collectd.org> | |
Wed, 30 Aug 2017 09:16:54 +0000 (11:16 +0200) | ||
committer | Florian Forster <octo@collectd.org> | |
Wed, 30 Aug 2017 09:16:54 +0000 (11:16 +0200) |
src/libcollectdclient/network_parse.c | patch | blob | history |
index 43c2258724a575abc4f1709609ba5c334f6b7bab..4083e1ec8ff5017da20b5afcfd8bbed363535d48 100644 (file)
#include <sys/endian.h>
#endif
+#if HAVE_GCRYPT_H
#define GCRYPT_NO_DEPRECATED
#include <gcrypt.h>
+#endif
#include <stdio.h>
#define DEBUG(...) printf(__VA_ARGS__)
+#if HAVE_GCRYPT_H
#if GCRYPT_VERSION_NUMBER < 0x010600
GCRY_THREAD_OPTION_PTHREAD_IMPL;
#endif
+#endif
/* forward declaration because parse_sign_sha256()/parse_encrypt_aes256() and
* network_parse() need to call each other. */
static int network_parse(void *data, size_t data_size, lcc_security_level_t sl,
lcc_network_parse_options_t const *opts);
+#if HAVE_GCRYPT_H
static int init_gcrypt() {
/* http://lists.gnupg.org/pipermail/gcrypt-devel/2003-August/000458.html
* Because you can't know in a library whether another library has
gcry_control(GCRYCTL_INITIALIZATION_FINISHED);
return 0;
}
+#endif
typedef struct {
uint8_t *data;
return 0;
}
+#if HAVE_GCRYPT_H
static int verify_sha256(void *payload, size_t payload_size,
char const *username, char const *password,
uint8_t hash_provided[32]) {
return !!ret;
}
+#else /* !HAVE_GCRYPT_H */
+static int verify_sha256(void *payload, size_t payload_size,
+ char const *username, char const *password,
+ uint8_t hash_provided[32]) {
+ return ENOTSUP;
+}
+#endif
static int parse_sign_sha256(void *signature, size_t signature_len,
void *payload, size_t payload_size,
return network_parse(payload, payload_size, SIGN, opts);
}
+#if HAVE_GCRYPT_H
static int decrypt_aes256(buffer_t *b, void *iv, size_t iv_size,
char const *password) {
gcry_cipher_hd_t cipher = NULL;
return network_parse(b->data, b->len, ENCRYPT, opts);
}
+#else /* !HAVE_GCRYPT_H */
+static int parse_encrypt_aes256(void *data, size_t data_size,
+ lcc_network_parse_options_t const *opts) {
+ return ENOTSUP;
+}
+#endif
static int network_parse(void *data, size_t data_size, lcc_security_level_t sl,
lcc_network_parse_options_t const *opts) {
@@ -588,10 +609,14 @@ static int network_parse(void *data, size_t data_size, lcc_security_level_t sl,
int lcc_network_parse(void *data, size_t data_size,
lcc_network_parse_options_t opts) {
if (opts.password_lookup) {
+#if HAVE_GCRYPT_H
int status;
if ((status = init_gcrypt())) {
return status;
}
+#else
+ return ENOTSUP;
+#endif
}
return network_parse(data, data_size, NONE, &opts);