PROJECT(eurephia C) cmake_minimum_required(VERSION 2.6) SET(eurephia_auth_SRC certinfo.c eurephia-auth.c eurephia.c eurephiadb.c eurephiadb_session.c eurephiafw.c eurephiafw_helpers.c eurephia_getsym.c eurephia_log.c eurephia_values.c passwd.c sha512.c ) OPTION(DEBUG "Add more verbose debug information" OFF) OPTION(SHOW_SECRETS "Show passwords as clear text in logs." OFF) OPTION(SQLITE3 "Build database driver for SQLite3" OFF) SET(OPNVPN_SRC "" CACHE STRING "Path to OpenVPN source code") IF(SQLITE3) message(STATUS "Will build database interface for SQLite") SET(subdirs ${subdirs} database/sqlite) SET(DATABASE ON) ENDIF(SQLITE3) IF(FW_IPTABLES) message(STATUS "Will build iptables firewall module") SET(subdirs ${subdirs} firewall/iptables) ENDIF(FW_IPTABLES) IF(NOT DATABASE) message(FATAL_ERROR "Cannot build eurephia without any database drivers.") ENDIF(NOT DATABASE) IF(DEBUG) message(STATUS "DEBUG enabled - might be a security issue") ADD_DEFINITIONS(-DENABLE_DEBUG) IF(SHOW_SECRETS) message(STATUS "SHOW_SECRETS ENABLED -- THIS WILL LOG PASSWORDS IN CLEAR TEXT") ADD_DEFINITIONS(-DSHOW_SECRETS) ENDIF(SHOW_SECRETS) ENDIF(DEBUG) IF(NOT OPENVPN_SRC) message(FATAL_ERROR "Missing path to OpenVPN source - try running ./configure again") ENDIF(NOT OPENVPN_SRC) INCLUDE_DIRECTORIES(BEFORE ${OPENVPN_SRC} .) SET(CHECK_INCL_FILE "${OPENVPN_SRC}/openvpn-plugin.h") IF(NOT EXISTS ${CHECK_INCL_FILE}) message(FATAL_ERROR "Missing openvpn-plugin.h ... Is the OpenVPN source code really located here? ${OPENVPN_SRC}") ENDIF(NOT EXISTS ${CHECK_INCL_FILE}) INCLUDE(CheckIncludeFile) CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H) INCLUDE(CheckLibraryExists) CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_DLOPEN) CHECK_LIBRARY_EXISTS(dl dlclose "" HAVE_DLCLOSE) IF(NOT HAVE_DLOPEN OR NOT HAVE_DLCLOSE) message(FATAL_ERROR "Missing proper dl library") ENDIF(NOT HAVE_DLOPEN OR NOT HAVE_DLCLOSE) CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H) CHECK_LIBRARY_EXISTS(pthread pthread_mutex_lock "" HAVE_PTHREAD_MUTEX_LOCK) CHECK_LIBRARY_EXISTS(pthread pthread_mutex_unlock "" HAVE_PTHREAD_MUTEX_UNLOCK) IF(NOT HAVE_PTHREAD_MUTEX_LOCK OR NOT HAVE_PTHREAD_MUTEX_UNLOCK) message(FATAL_ERROR "Missing proper pthread_mutex support") ENDIF(NOT HAVE_PTHREAD_MUTEX_LOCK OR NOT HAVE_PTHREAD_MUTEX_UNLOCK) CHECK_LIBRARY_EXISTS(rt sem_wait "" HAVE_RT_SEM_WAIT) CHECK_LIBRARY_EXISTS(rt sem_post "" HAVE_RT_SEM_POST) CHECK_LIBRARY_EXISTS(rt mq_open "" HAVE_RT_MQ_OPEN) CHECK_LIBRARY_EXISTS(rt mq_close "" HAVE_RT_MQ_CLOSE) CHECK_LIBRARY_EXISTS(rt mq_unlink "" HAVE_RT_MQ_UNLINK) CHECK_LIBRARY_EXISTS(rt mq_send "" HAVE_RT_MQ_SEND) CHECK_LIBRARY_EXISTS(rt mq_receive "" HAVE_RT_MQ_RECEIVE) CHECK_LIBRARY_EXISTS(rt mq_getattr "" HAVE_RT_MQ_GETATTR) IF(NOT HAVE_RT_SEM_WAIT OR NOT HAVE_RT_SEM_POST) message(FATAL_ERROR "Missing proper pthread semaphore support") ENDIF(NOT HAVE_RT_SEM_WAIT OR NOT HAVE_RT_SEM_POST) IF(NOT HAVE_RT_MQ_OPEN OR NOT HAVE_RT_MQ_CLOSE OR NOT HAVE_RT_MQ_UNLINK OR NOT HAVE_RT_MQ_SEND OR NOT HAVE_RT_MQ_RECEIVE OR NOT HAVE_RT_MQ_GETATTR) message(FATAL_ERROR "Missing proper pthread message queue support") ENDIF(NOT HAVE_RT_MQ_OPEN OR NOT HAVE_RT_MQ_CLOSE OR NOT HAVE_RT_MQ_UNLINK OR NOT HAVE_RT_MQ_SEND OR NOT HAVE_RT_MQ_RECEIVE OR NOT HAVE_RT_MQ_GETATTR) CHECK_INCLUDE_FILE(openssl/rand.h HAVE_OPENSSL_RAND_H) CHECK_LIBRARY_EXISTS(crypto RAND_load_file "" HAVE_OPENSSL_RAND_LOAD_FILE) CHECK_LIBRARY_EXISTS(crypto RAND_pseudo_bytes "" HAVE_OPENSSL_RAND_PSEUDO_BYTES) IF(NOT HAVE_OPENSSL_RAND_H OR NOT HAVE_OPENSSL_RAND_LOAD_FILE OR NOT HAVE_OPENSSL_RAND_PSEUDO_BYTES) message(FATAL_ERROR "Missing OpenSSL crypto support") ENDIF(NOT HAVE_OPENSSL_RAND_H OR NOT HAVE_OPENSSL_RAND_LOAD_FILE OR NOT HAVE_OPENSSL_RAND_PSEUDO_BYTES) ADD_DEFINITIONS(-g -Wall) ADD_LIBRARY(eurephia-auth MODULE ${eurephia_auth_SRC}) TARGET_LINK_LIBRARIES(eurephia-auth dl pthread rt crypto) SET_TARGET_PROPERTIES(eurephia-auth PROPERTIES OUTPUT_NAME eurephia-auth PREFIX "") SUBDIRS(${subdirs})