diff --git a/src/app/mumta.cpp b/src/app/mumta.cpp index 001c8fafcc6c74fe039eae5bfe34e9083a297665..f9aca82989e37768e3b3e9f39229e21bde334b47 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 8c91bf42df5f889a4de0bb9777dfe33adbb3216a..6e8b4f222dd819bc408875db6c48297569b1c177 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 0000000000000000000000000000000000000000..35677049e378e9d849f6ae060c29f5e9be2d8622 --- /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 0000000000000000000000000000000000000000..5f62e6c039fb913757f0a41bc66b3579f5269932 --- /dev/null +++ b/src/lib/openssl/openssl.hpp @@ -0,0 +1,3 @@ +#pragma once + +bool check_version_openssl();