Remove support for OpenSSL <= 1.0.2

Removes openssl thread locking callbacks required by OpenSSL <= 1.0.2
Other SSL libraries and newer OpenSSL should be handled by libcurl in a way that is thread-safe
This commit is contained in:
Sude 2021-09-09 14:18:17 +03:00
parent 521eea8522
commit f69747bb88
5 changed files with 1 additions and 124 deletions

View File

@ -2,7 +2,6 @@ cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)
project (lgogdownloader LANGUAGES C CXX VERSION 3.8) project (lgogdownloader LANGUAGES C CXX VERSION 3.8)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
set(LINK_LIBCRYPTO 0)
# Disable search for boost-cmake # Disable search for boost-cmake
# Fixes building with Boost >= 1.70.0 # Fixes building with Boost >= 1.70.0
@ -27,19 +26,6 @@ find_package(Boost
iostreams iostreams
) )
find_package(CURL 7.32.0 REQUIRED) find_package(CURL 7.32.0 REQUIRED)
if(CURL_FOUND)
execute_process(
COMMAND ${READELF} -d ${CURL_LIBRARIES}
COMMAND ${GREP} -q "libssl\\|libcrypto"
RESULT_VARIABLE READELF_RESULT_VAR
)
if(READELF_RESULT_VAR EQUAL 0)
add_definitions(-DSSL_THREAD_SETUP_OPENSSL=1)
find_package(Libcrypto REQUIRED)
set(LINK_LIBCRYPTO 1)
endif(READELF_RESULT_VAR EQUAL 0)
endif(CURL_FOUND)
find_package(Jsoncpp REQUIRED) find_package(Jsoncpp REQUIRED)
find_package(Htmlcxx REQUIRED) find_package(Htmlcxx REQUIRED)
find_package(Tinyxml2 REQUIRED) find_package(Tinyxml2 REQUIRED)
@ -154,12 +140,6 @@ if (NOT ATOMIC_BUILD_SUCCEEDED)
endif () endif ()
file(REMOVE ${CMAKE_BINARY_DIR}/test_atomic.cpp) file(REMOVE ${CMAKE_BINARY_DIR}/test_atomic.cpp)
if(LINK_LIBCRYPTO EQUAL 1)
target_link_libraries(${PROJECT_NAME}
PRIVATE ${Libcrypto_LIBRARIES}
)
endif(LINK_LIBCRYPTO EQUAL 1)
if(USE_QT_GUI) if(USE_QT_GUI)
target_link_libraries(${PROJECT_NAME} target_link_libraries(${PROJECT_NAME}
PRIVATE Qt5::Widgets PRIVATE Qt5::Widgets

View File

@ -11,22 +11,19 @@ It uses the same API as GOG Galaxy which doesn't have Linux support at the momen
* [htmlcxx](http://htmlcxx.sourceforge.net/) * [htmlcxx](http://htmlcxx.sourceforge.net/)
* [tinyxml2](https://github.com/leethomason/tinyxml2) * [tinyxml2](https://github.com/leethomason/tinyxml2)
* [boost](http://www.boost.org/) (regex, date-time, system, filesystem, program-options, iostreams) * [boost](http://www.boost.org/) (regex, date-time, system, filesystem, program-options, iostreams)
* [libcrypto](https://www.openssl.org/) if libcurl is built with OpenSSL
* [zlib](https://www.zlib.net/) * [zlib](https://www.zlib.net/)
* [qtwebengine](https://www.qt.io/) if built with -DUSE_QT_GUI=ON * [qtwebengine](https://www.qt.io/) if built with -DUSE_QT_GUI=ON
## Make dependencies ## Make dependencies
* [cmake](https://cmake.org/) >= 3.0.0 * [cmake](https://cmake.org/) >= 3.0.0
* [help2man](https://www.gnu.org/software/help2man/help2man.html) (optional, man page generation) * [help2man](https://www.gnu.org/software/help2man/help2man.html) (optional, man page generation)
* [grep](https://www.gnu.org/software/grep/)
* [binutils](https://www.gnu.org/software/binutils/) (readelf)
### Debian/Ubuntu ### Debian/Ubuntu
# apt install build-essential libcurl4-openssl-dev libboost-regex-dev \ # apt install build-essential libcurl4-openssl-dev libboost-regex-dev \
libjsoncpp-dev librhash-dev libtinyxml2-dev libhtmlcxx-dev \ libjsoncpp-dev librhash-dev libtinyxml2-dev libhtmlcxx-dev \
libboost-system-dev libboost-filesystem-dev libboost-program-options-dev \ libboost-system-dev libboost-filesystem-dev libboost-program-options-dev \
libboost-date-time-dev libboost-iostreams-dev help2man cmake libssl-dev \ libboost-date-time-dev libboost-iostreams-dev help2man cmake \
pkg-config zlib1g-dev qtwebengine5-dev pkg-config zlib1g-dev qtwebengine5-dev
## Build and install ## Build and install

View File

@ -1,27 +0,0 @@
# - Try to find libcrypto
#
# Once done this will define
# Libcrypto_FOUND - System has libcrypto
# Libcrypto_INCLUDE_DIRS - The libcrypto include directories
# Libcrypto_LIBRARIES - The libraries needed to use libcrypto
find_package(PkgConfig)
pkg_check_modules(PC_LIBCRYPTO REQUIRED libcrypto)
find_path(LIBCRYPTO_INCLUDE_DIR openssl/crypto.h
HINTS ${PC_LIBCRYPTO_INCLUDEDIR}
${PC_LIBCRYPTO_INCLUDE_DIRS}
)
find_library(LIBCRYPTO_LIBRARY NAMES crypto
HINTS ${PC_LIBCRYPTO_LIBDIR}
${PC_LIBCRYPTO_LIBRARY_DIRS}
)
mark_as_advanced(LIBCRYPTO_INCLUDE_DIR LIBCRYPTO_LIBRARY)
if(PC_LIBCRYPTO_FOUND)
set(Libcrypto_FOUND ON)
set(Libcrypto_INCLUDE_DIRS ${LIBCRYPTO_INCLUDE_DIR})
set(Libcrypto_LIBRARIES ${LIBCRYPTO_LIBRARY})
endif(PC_LIBCRYPTO_FOUND)

View File

@ -1,64 +0,0 @@
/* This program is free software. It comes without any warranty, to
* the extent permitted by applicable law. You can redistribute it
* and/or modify it under the terms of the Do What The Fuck You Want
* To Public License, Version 2, as published by Sam Hocevar. See
* http://www.wtfpl.net/ for more details. */
#ifndef SSL_THREAD_SETUP_H
#define SSL_THREAD_SETUP_H
#include <thread>
#include <mutex>
#if SSL_THREAD_SETUP_OPENSSL == 1
#include <openssl/crypto.h>
static std::mutex* ssl_mutex_array;
void thread_locking_callback(int mode, int n, const char* file, int line)
{
// suppress -Wunused-parameter messages by casting these variables to void
(void) file;
(void) line;
if(mode & CRYPTO_LOCK)
ssl_mutex_array[n].lock();
else
ssl_mutex_array[n].unlock();
}
unsigned long thread_id_callback()
{
return (unsigned long)std::hash<std::thread::id>() (std::this_thread::get_id());
}
int ssl_thread_setup()
{
ssl_mutex_array = new std::mutex[CRYPTO_num_locks()];
if(!ssl_mutex_array)
return 0;
else
{
CRYPTO_set_id_callback(thread_id_callback);
CRYPTO_set_locking_callback(thread_locking_callback);
}
return 1;
}
int ssl_thread_cleanup()
{
if(!ssl_mutex_array)
return 0;
CRYPTO_set_id_callback(NULL);
CRYPTO_set_locking_callback(NULL);
delete[] ssl_mutex_array;
ssl_mutex_array = NULL;
return 1;
}
#else
#define ssl_thread_setup()
#define ssl_thread_cleanup()
#endif
#endif // SSL_THREAD_SETUP_H

View File

@ -8,7 +8,6 @@
#include "config.h" #include "config.h"
#include "util.h" #include "util.h"
#include "globalconstants.h" #include "globalconstants.h"
#include "ssl_thread_setup.h"
#include "galaxyapi.h" #include "galaxyapi.h"
#include "globals.h" #include "globals.h"
@ -602,7 +601,6 @@ int main(int argc, char *argv[])
} }
// Init curl globally // Init curl globally
ssl_thread_setup();
curl_global_init(CURL_GLOBAL_ALL); curl_global_init(CURL_GLOBAL_ALL);
Downloader downloader; Downloader downloader;
@ -632,7 +630,6 @@ int main(int argc, char *argv[])
if (!bLoginOK && !bIsLoggedin) if (!bLoginOK && !bIsLoggedin)
{ {
curl_global_cleanup(); curl_global_cleanup();
ssl_thread_cleanup();
return 1; return 1;
} }
@ -696,7 +693,6 @@ int main(int argc, char *argv[])
if (Globals::globalConfig.bSaveConfig) if (Globals::globalConfig.bSaveConfig)
{ {
curl_global_cleanup(); curl_global_cleanup();
ssl_thread_cleanup();
return 0; return 0;
} }
} }
@ -704,7 +700,6 @@ int main(int argc, char *argv[])
{ {
std::cerr << "Failed to create config: " << Globals::globalConfig.sConfigFilePath << std::endl; std::cerr << "Failed to create config: " << Globals::globalConfig.sConfigFilePath << std::endl;
curl_global_cleanup(); curl_global_cleanup();
ssl_thread_cleanup();
return 1; return 1;
} }
} }
@ -718,14 +713,12 @@ int main(int argc, char *argv[])
Util::setFilePermissions(Globals::globalConfig.sConfigFilePath, boost::filesystem::owner_read | boost::filesystem::owner_write); Util::setFilePermissions(Globals::globalConfig.sConfigFilePath, boost::filesystem::owner_read | boost::filesystem::owner_write);
curl_global_cleanup(); curl_global_cleanup();
ssl_thread_cleanup();
return 0; return 0;
} }
else else
{ {
std::cerr << "Failed to create config: " << Globals::globalConfig.sConfigFilePath << std::endl; std::cerr << "Failed to create config: " << Globals::globalConfig.sConfigFilePath << std::endl;
curl_global_cleanup(); curl_global_cleanup();
ssl_thread_cleanup();
return 1; return 1;
} }
} }
@ -734,7 +727,6 @@ int main(int argc, char *argv[])
if (!bInitOK) if (!bInitOK)
{ {
curl_global_cleanup(); curl_global_cleanup();
ssl_thread_cleanup();
return 1; return 1;
} }
@ -802,7 +794,6 @@ int main(int argc, char *argv[])
downloader.checkOrphans(); downloader.checkOrphans();
curl_global_cleanup(); curl_global_cleanup();
ssl_thread_cleanup();
return res; return res;
} }