From 1f70cee2f226b4cc654e71bd32359a81789ba96d Mon Sep 17 00:00:00 2001 From: Benny Baumann <BenBE@geshi.org> Date: Wed, 30 Dec 2020 15:46:15 +0100 Subject: [PATCH] Basic interface for using OpenSSL --- src/app/mumta.cpp | 4 ++++ src/app/mumta.ldflags | 1 + src/lib/openssl/openssl.cpp | 36 ++++++++++++++++++++++++++++++++++++ src/lib/openssl/openssl.hpp | 3 +++ 4 files changed, 44 insertions(+) create mode 100644 src/lib/openssl/openssl.cpp create mode 100644 src/lib/openssl/openssl.hpp diff --git a/src/app/mumta.cpp b/src/app/mumta.cpp index 001c8fa..f9aca82 100644 --- a/src/app/mumta.cpp +++ b/src/app/mumta.cpp @@ -5,6 +5,7 @@ #include "lib/ev/ev.hpp" #include "lib/nl/nl.hpp" +#include "lib/openssl/openssl.hpp" #include "mumta/evloop.hpp" @@ -18,6 +19,9 @@ int main() { if (!check_version_libnl()) { return 1; } + if (!check_version_openssl()) { + return 1; + } dctl_status_msg("Initializing"); dctl_status_msg("Reading configuration"); diff --git a/src/app/mumta.ldflags b/src/app/mumta.ldflags index 8c91bf4..6e8b4f2 100644 --- a/src/app/mumta.ldflags +++ b/src/app/mumta.ldflags @@ -1,4 +1,5 @@ `pkg-config --cflags --libs libsystemd` `pkg-config --cflags --libs libnl-3.0` +`pkg-config --cflags --libs libssl libcrypto` -lev -pthread diff --git a/src/lib/openssl/openssl.cpp b/src/lib/openssl/openssl.cpp new file mode 100644 index 0000000..3567704 --- /dev/null +++ b/src/lib/openssl/openssl.cpp @@ -0,0 +1,36 @@ +#include "lib/openssl/openssl.hpp" + +#include <iomanip> +#include <sstream> +#include <string> + +#include <openssl/crypto.h> + +#include "service/daemonctl.hpp" + +bool check_version_openssl() +{ + auto ossl_version{OpenSSL_version_num()}; + constexpr auto exp_version{OPENSSL_VERSION_NUMBER}; + constexpr auto exp_mask{0xFFFF0000UL}; + + std::stringstream str; + str << + "Checking dependency: libssl: detected " << + std::hex << std::setw(8) << ossl_version << + ", compiled " << + std::hex << std::setw(8) << ossl_version; + dctl_status_msg(str.str().c_str()); + + if ((ossl_version & exp_mask) != (exp_version & exp_mask)) { + dctl_status_err("Checking dependency: libssl: failed version check: Major API version mismatch.\n"); + return false; + } + + if ((ossl_version & ~exp_mask) < (exp_version & ~exp_mask)) { + dctl_status_err("Checking dependency: libssl: failed version check: Minor API version too old.\n"); + return false; + } + + return true; +} diff --git a/src/lib/openssl/openssl.hpp b/src/lib/openssl/openssl.hpp new file mode 100644 index 0000000..5f62e6c --- /dev/null +++ b/src/lib/openssl/openssl.hpp @@ -0,0 +1,3 @@ +#pragma once + +bool check_version_openssl(); -- GitLab