|
|
|
|
@@ -14,6 +14,7 @@ option(TINYLDAP_BUILD_TOOLS "Build tinyldap command line tools" ON)
|
|
|
|
|
option(TINYLDAP_BUILD_TESTS "Build tinyldap test programs" ${PROJECT_IS_TOP_LEVEL})
|
|
|
|
|
option(TINYLDAP_RUN_TESTS "Register non-interactive tinyldap tests with CTest" ${PROJECT_IS_TOP_LEVEL})
|
|
|
|
|
option(TINYLDAP_INSTALL "Install tinyldap libraries, headers and tools" ON)
|
|
|
|
|
option(TINYLDAP_ALLOW_SYSTEM_OPENSSL "Allow fallback to system OpenSSL Crypto when MatrixSSL compat is not available" ON)
|
|
|
|
|
|
|
|
|
|
set(TINYLDAP_OUTPUT_NAME "tinyldap" CACHE STRING "Library basename and default server name, e.g. nwdirectory builds libnwdirectory and nwdirectory")
|
|
|
|
|
set(TINYLDAP_SERVER_NAME "" CACHE STRING "Installed server executable name. Defaults to TINYLDAP_OUTPUT_NAME")
|
|
|
|
|
@@ -21,7 +22,8 @@ set(TINYLDAP_TOOL_PREFIX "" CACHE STRING "Optional prefix for non-server tool ex
|
|
|
|
|
set(TINYLDAP_INCLUDE_SUBDIR "" CACHE STRING "Public include subdirectory below CMAKE_INSTALL_INCLUDEDIR. Defaults to TINYLDAP_OUTPUT_NAME")
|
|
|
|
|
set(TINYLDAP_LIBOWFAT_INCLUDE_SUBDIR "" CACHE STRING "libowfat public include subdirectory. Defaults to LIBOWFAT_INSTALL_INCLUDE_SUBDIR if present, otherwise libowfat")
|
|
|
|
|
set(TINYLDAP_LIBOWFAT_BUILD_DIR "" CACHE PATH "Optional libowfat CMake build directory to consume directly without installation")
|
|
|
|
|
set(TINYLDAP_MATRIXSSL_BUILD_DIR "" CACHE PATH "Optional MatrixSSL CMake build directory to use for OpenSSL::Crypto compatibility")
|
|
|
|
|
set(TINYLDAP_NWSSL_TARGET "" CACHE STRING "Optional nwssl target that provides OpenSSL-compatible Crypto headers and symbols")
|
|
|
|
|
set(TINYLDAP_MATRIXSSL_BUILD_DIR "" CACHE PATH "Optional legacy MatrixSSL CMake build directory to use for OpenSSL::Crypto compatibility")
|
|
|
|
|
set(TINYLDAP_MATRIXSSL_INCLUDE_SUBDIR "" CACHE STRING "MatrixSSL public include subdirectory inside TINYLDAP_MATRIXSSL_BUILD_DIR/include. Auto-detected when empty")
|
|
|
|
|
|
|
|
|
|
if(NOT TINYLDAP_BUILD_STATIC AND NOT TINYLDAP_BUILD_SHARED)
|
|
|
|
|
@@ -189,7 +191,34 @@ else()
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(TARGET OpenSSL::Crypto)
|
|
|
|
|
|
|
|
|
|
function(tinyldap_write_matrixssl_md5_compat)
|
|
|
|
|
file(MAKE_DIRECTORY "${TINYLDAP_COMPAT_INCLUDE_DIR}/openssl")
|
|
|
|
|
file(WRITE "${TINYLDAP_COMPAT_INCLUDE_DIR}/openssl/md5.h" "#pragma once
|
|
|
|
|
#include <stddef.h>
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
#include <crypto/cryptoApi.h>
|
|
|
|
|
typedef psMd5_t MD5_CTX;
|
|
|
|
|
#define MD5Init MD5_Init
|
|
|
|
|
#define MD5Update MD5_Update
|
|
|
|
|
#define MD5Final MD5_Final
|
|
|
|
|
static inline int MD5_Init(MD5_CTX *c) { return psMd5Init(c) >= 0 ? 1 : 0; }
|
|
|
|
|
static inline int MD5_Update(MD5_CTX *c, const void *data, size_t len) { psMd5Update(c, (const unsigned char *)data, (uint32_t)len); return 1; }
|
|
|
|
|
static inline int MD5_Final(unsigned char *md, MD5_CTX *c) { psMd5Final(c, md); return 1; }
|
|
|
|
|
")
|
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
|
|
if(NOT TINYLDAP_NWSSL_TARGET STREQUAL "")
|
|
|
|
|
if(NOT TARGET ${TINYLDAP_NWSSL_TARGET})
|
|
|
|
|
message(FATAL_ERROR "TINYLDAP_NWSSL_TARGET=${TINYLDAP_NWSSL_TARGET} is not a CMake target")
|
|
|
|
|
endif()
|
|
|
|
|
set(TINYLDAP_CRYPTO_TARGET ${TINYLDAP_NWSSL_TARGET})
|
|
|
|
|
elseif(TARGET mars_nwe::ssl)
|
|
|
|
|
set(TINYLDAP_CRYPTO_TARGET mars_nwe::ssl)
|
|
|
|
|
elseif(TARGET OpenSSL::Crypto)
|
|
|
|
|
if(TARGET MATRIXSSL::matrixssl OR TARGET matrixssl OR TARGET matrixssl_static)
|
|
|
|
|
tinyldap_write_matrixssl_md5_compat()
|
|
|
|
|
endif()
|
|
|
|
|
set(TINYLDAP_CRYPTO_TARGET OpenSSL::Crypto)
|
|
|
|
|
elseif(NOT TINYLDAP_MATRIXSSL_BUILD_DIR STREQUAL "")
|
|
|
|
|
if(TINYLDAP_MATRIXSSL_INCLUDE_SUBDIR STREQUAL "")
|
|
|
|
|
@@ -214,25 +243,19 @@ elseif(NOT TINYLDAP_MATRIXSSL_BUILD_DIR STREQUAL "")
|
|
|
|
|
if(NOT TINYLDAP_MATRIXSSL_OPENSSL_INCLUDE_ROOT)
|
|
|
|
|
message(FATAL_ERROR "Could not find MatrixSSL OpenSSL compatibility include root in ${TINYLDAP_MATRIXSSL_BUILD_DIR}")
|
|
|
|
|
endif()
|
|
|
|
|
file(MAKE_DIRECTORY "${TINYLDAP_COMPAT_INCLUDE_DIR}/openssl")
|
|
|
|
|
if(NOT EXISTS "${TINYLDAP_MATRIXSSL_OPENSSL_INCLUDE_ROOT}/openssl/md5.h")
|
|
|
|
|
file(WRITE "${TINYLDAP_COMPAT_INCLUDE_DIR}/openssl/md5.h" "#pragma once
|
|
|
|
|
#include <stddef.h>
|
|
|
|
|
#include <crypto/cryptoApi.h>
|
|
|
|
|
typedef psMd5_t MD5_CTX;
|
|
|
|
|
static inline int MD5_Init(MD5_CTX *c) { return psMd5Init(c) >= 0 ? 1 : 0; }
|
|
|
|
|
static inline int MD5_Update(MD5_CTX *c, const void *data, size_t len) { psMd5Update(c, (const unsigned char *)data, (uint32_t)len); return 1; }
|
|
|
|
|
static inline int MD5_Final(unsigned char *md, MD5_CTX *c) { psMd5Final(c, md); return 1; }
|
|
|
|
|
")
|
|
|
|
|
tinyldap_write_matrixssl_md5_compat()
|
|
|
|
|
endif()
|
|
|
|
|
add_library(tinyldap_matrixssl_crypto_external UNKNOWN IMPORTED)
|
|
|
|
|
set_target_properties(tinyldap_matrixssl_crypto_external PROPERTIES
|
|
|
|
|
IMPORTED_LOCATION "${TINYLDAP_MATRIXSSL_CRYPTO_LIBRARY}"
|
|
|
|
|
INTERFACE_INCLUDE_DIRECTORIES "${TINYLDAP_MATRIXSSL_OPENSSL_INCLUDE_ROOT}")
|
|
|
|
|
set(TINYLDAP_CRYPTO_TARGET tinyldap_matrixssl_crypto_external)
|
|
|
|
|
else()
|
|
|
|
|
elseif(TINYLDAP_ALLOW_SYSTEM_OPENSSL)
|
|
|
|
|
find_package(OpenSSL REQUIRED COMPONENTS Crypto)
|
|
|
|
|
set(TINYLDAP_CRYPTO_TARGET OpenSSL::Crypto)
|
|
|
|
|
else()
|
|
|
|
|
message(FATAL_ERROR "TinyLDAP requires MatrixSSL OpenSSL-compat target OpenSSL::Crypto when TINYLDAP_ALLOW_SYSTEM_OPENSSL=OFF")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
find_library(TINYLDAP_CRYPT_LIBRARY crypt)
|
|
|
|
|
|