mirror of
https://github.com/Sude-/lgogdownloader.git
synced 2024-11-20 11:49:17 +01:00
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:
parent
521eea8522
commit
f69747bb88
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
|
@ -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
|
|
9
main.cpp
9
main.cpp
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user