summaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
blob: b679353a78c44d485cec96e698adaa7d74770ed2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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})