]> git.ipfire.org Git - pakfire.git/commitdiff
libpakfire: Initialize libgcrypt when we need it
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 25 Nov 2017 14:06:18 +0000 (15:06 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 25 Nov 2017 14:06:18 +0000 (15:06 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/include/pakfire/util.h
src/libpakfire/util.c

index ba21e11a03c8768e9e172accda03a565826c65d9..dbe001abc2ef2ac4059f77bf727eaff4050603a5 100644 (file)
@@ -45,4 +45,6 @@ char* pakfire_dirname(const char* path);
 char* pakfire_sgets(char* str, int num, char** input);
 char* pakfire_remove_trailing_newline(char* str);
 
+void init_libgcrypt();
+
 #endif /* PAKFIRE_UTIL_H */
index 62411512b190c9c265356c7d02bb80b53ff28d32..a4bf292cd5afd2e833e08325b448e0dea8ec2fa6 100644 (file)
@@ -26,6 +26,8 @@
 #include <string.h>
 #include <time.h>
 
+#include <gcrypt.h>
+
 #include <pakfire/constants.h>
 
 void pakfire_oom(size_t num, size_t len) {
@@ -173,3 +175,22 @@ char* pakfire_remove_trailing_newline(char* str) {
 
        return str;
 }
+
+void init_libgcrypt() {
+       // Only execute this once
+       static int libgcrypt_initialized = 0;
+       if (libgcrypt_initialized++)
+               return;
+
+       const char* version = gcry_check_version(NULL);
+       if (!version) {
+               fprintf(stderr, "Could not initialize libgcrypt\n");
+               exit(1);
+       }
+
+       // Disable secure memory
+       gcry_control(GCRYCTL_DISABLE_SECMEM, 0);
+
+       // Tell libgcrypt that initialization has completed
+       gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
+}