summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore8
-rw-r--r--CMakeLists.txt100
-rw-r--r--Makefile56
-rw-r--r--Makefile.global18
-rwxr-xr-xconfigure104
-rw-r--r--database/sqlite/CMakeLists.txt39
-rw-r--r--database/sqlite/Makefile43
-rw-r--r--database/sqlite/eurephiadb-sqlite.c3
-rw-r--r--firewall/iptables/CMakeLists.txt11
-rw-r--r--firewall/iptables/Makefile33
-rw-r--r--firewall/iptables/efw_iptables.c3
11 files changed, 267 insertions, 151 deletions
diff --git a/.gitignore b/.gitignore
index dd90978..d2b3289 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,5 +4,11 @@
*.log
*.conf
*.~*~
-test/
+test/*
database/sqlite/eurephiadb
+CMakeCache.txt
+cmake_install.cmake
+CMakeFiles/*
+*/*/CMakeFiles/*
+*/*/cmake_install.cmake
+Makefile
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..b679353
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,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})
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 48b868a..0000000
--- a/Makefile
+++ /dev/null
@@ -1,56 +0,0 @@
-topdir = .
-
-directories = database/sqlite firewall/iptables
-
-objs = eurephiadb.o eurephia_log.o eurephia_values.o eurephiadb_session.o sha512.o passwd.o \
- eurephia-auth.o eurephia.o certinfo.o eurephia_getsym.o eurephiafw.o eurephiafw_helpers.o
-
-#programs = eurephiadb-testprog
-testprog_obj = eurephiadb-testprog.o eurephiadb.o eurephia_log.o sha512.o eurephiadb_session.o
-
-CFLAGS += -I.
-LDFLAGS += -lpthread -lrt -lgcc_s -lcrypto
-
-ifeq (${EUREPHIAMW},enabled)
- objs += memwatch.o
- testprog_obj += memwatch.o
- CFLAGS += -DMEMWATCH
-endif
-
-ifeq (${DRIVERMW},enabled)
- objs += memwatch.o
-endif
-
-CFLAGS += -fPIC
-LDFLAGS += -ldl
-
-include ${topdir}/Makefile.global
-
-
-.PHONY : ${directories}
-
-all :
-ifndef OPENVPN_SRC_DIR
- @echo "Invokce with make OPENVPN_SRC_DIR=<path to openvpn source>"
-else
- make do-real-all
-endif
-
-
-do-real-all : ${objs} ${directories} eurephia-auth.so
-
-${directories} :
- make -C $@
-
-eurephia-auth.so : ${objs}
- ${CC} -fPIC -g -shared -Wall ${LDFLAGS} -o $@ $^
-
-eurephiadb-testprog : ${testprog_obj}
- ${CC} -o $@ -g ${LDFLAGS} $^
-
-clean : clean-dir
- rm -f ${objs} *.so ${programs} memwatch.log *~
-
-clean-dir :
- @for i in ${directories} ; do make -C $$i clean ; done
-
diff --git a/Makefile.global b/Makefile.global
deleted file mode 100644
index bce1ef1..0000000
--- a/Makefile.global
+++ /dev/null
@@ -1,18 +0,0 @@
-
-#DRIVER_DIR=/etc/openvpn/eurephia
-DRIVER_DIR=${HOME}/tmp/openvpntest
-
-DATABASE_NAME=eurephiadb
-DATABASE_DIR=${DRIVER_DIR}
-
-CFLAGS += -g -Wall
-INCLUDE += -I ${topdir} -I. -I${OPENVPN_SRC_DIR}
-
-ifdef DEBUG
- CFLAGS += -DENABLE_DEBUG # -DSHOW_SECRETS
-endif
-
-.SUFFIX=.c .o .so
-.c.o:
- ${CC} ${INCLUDE} ${CFLAGS} -fPIC -c $<
-
diff --git a/configure b/configure
new file mode 100755
index 0000000..59fe7af
--- /dev/null
+++ b/configure
@@ -0,0 +1,104 @@
+#!/bin/sh
+
+usage() {
+ cat <<EOF
+configure help for eurephia
+
+ --help | -h -- This help screen
+ --openvpn-src <path> | -s <path> -- OpenVPN source directory (needed for building)
+ --debug | -D -- Enable verbose debug logging
+ --show-secrets | -S -- Log passwords as clear text in log files
+ | (only available when debug is enabled)
+ --fw-iptables | -- Build iptables firewall module
+ --db-sqlite3 | -- Build SQLite3 database module
+
+EOF
+}
+
+PARAMS=""
+DB=""
+FW=""
+OPENVPN_SRC_DIR=""
+while [ ! -z "$1" ]; do
+ case $1 in
+ -h|--help)
+ usage
+ exit 0
+ ;;
+ -s|--openvpn-src)
+ OPENVPN_SRC_DIR="$2"
+ PARAMS="${PARAMS} -DOPENVPN_SRC:STRING=$2"
+ shift
+ ;;
+ -D|--debug)
+ PARAMS="${PARAMS} -DDEBUG=ON"
+ DEBUG_WARN=1
+ ;;
+ -S|--show-secrets)
+ PARAMS="${PARAMS} -DSHOW_SECRETS=ON"
+ SECRETS_WARN=1
+ ;;
+ --fw-iptables)
+ PARAMS="${PARAMS} -DFW_IPTABLES=ON"
+ FW="iptables "
+ ;;
+ --db-sqlite3)
+ PARAMS="${PARAMS} -DSQLITE3=ON"
+ DB="SQLite3 "
+ ;;
+ *)
+ echo "Unkown option: $1"
+ exit 2
+ ;;
+ esac
+ shift
+done
+
+if [ -z "$(which cmake)" ]; then
+ echo "To build eurephia, you need to install cmake (at least version 2.6)"
+ exit 1;
+fi
+
+if [ -z "${OPENVPN_SRC_DIR}" ]; then
+ echo "You need to give the --openvpn-src <path> option"
+ exit 1;
+fi
+
+if [ -z "${DB}" ]; then
+ echo "You need to activate at least one database driver"
+ exit 1;
+fi
+
+rm -f CMakeCache.txt
+cmake . ${PARAMS}
+ec=$?
+if [ $ec = 0 ]; then
+ cat >> Makefile <<EOF
+dist-clean : clean
+ find -type d -name "CMakeFiles" | xargs rm -rf
+ find -type f -name "cmake_install.cmake" | xargs rm -rf
+ find -type f -name Makefile | xargs rm -rf
+ find -type f -name "*~" | xargs rm -f
+ rm -f CMakeCache.txt
+
+EOF
+
+ echo
+ echo
+ echo "eurephia will be built with support for: "
+ echo
+ echo " Database: ${DB}"
+ echo " Firewall: ${FW:-"None"}"
+ echo
+ if [ "$DEBUG_WARN" = 1 ]; then
+ echo
+ echo " ******* DEBUG is enabled. This might be a security issue *******"
+ echo
+ if [ "$SECRETS_WARN" = 1 ]; then
+ echo
+ echo " ******* SHOW_SECRETS is enabled. THIS WILL LOG PASSWORDS IN CLEAR TEXT IN LOG FILES *******"
+ echo
+ fi
+ fi
+fi
+exit $?
diff --git a/database/sqlite/CMakeLists.txt b/database/sqlite/CMakeLists.txt
new file mode 100644
index 0000000..db23189
--- /dev/null
+++ b/database/sqlite/CMakeLists.txt
@@ -0,0 +1,39 @@
+PROJECT(eurephiadb-sqlite C)
+cmake_minimum_required(VERSION 2.6)
+SET(eurephiadb_sqlite_SRC
+ sqlite.c
+ eurephiadb-sqlite.c
+)
+SET(COMMON
+ ../../eurephia_log.c
+ ../../eurephiadb_session.c
+ ../..//eurephia_values.c
+ ../../passwd.c
+ ../../sha512.c
+)
+
+INCLUDE(CheckIncludeFile)
+CHECK_INCLUDE_FILE(sqlite3.h HAVE_SQLITE3_H)
+INCLUDE(CheckLibraryExists)
+CHECK_LIBRARY_EXISTS(sqlite3 sqlite3_open "" HAVE_SQLITE3_OPEN)
+CHECK_LIBRARY_EXISTS(sqlite3 sqlite3_close "" HAVE_SQLITE3_CLOSE)
+CHECK_LIBRARY_EXISTS(sqlite3 sqlite3_exec "" HAVE_SQLITE3_EXEC)
+CHECK_LIBRARY_EXISTS(sqlite3 sqlite3_free "" HAVE_SQLITE3_FREE)
+CHECK_LIBRARY_EXISTS(sqlite3 sqlite3_vmprintf "" HAVE_SQLITE3_VMPRINTF)
+
+FIND_PROGRAM(SQLITE3BIN sqlite3 /usr)
+IF(NOT SQLITE3BIN)
+ MESSAGE(STATUS "sqlite3 binary was not found. You will need to generate the database file on your own")
+ENDIF(NOT SQLITE3BIN)
+
+INCLUDE_DIRECTORIES(BEFORE ../..)
+ADD_LIBRARY(eurephiadb-sqlite SHARED ${eurephiadb_sqlite_SRC} ${COMMON})
+
+IF(SQLITE3BIN)
+ ADD_CUSTOM_COMMAND(TARGET eurephiadb-sqlite POST_BUILD COMMAND ${SQLITE3BIN} eurephiadb < sql-schema.sql COMMENT "Creating template database: eurephiadb")
+ENDIF(SQLITE3BIN)
+TARGET_LINK_LIBRARIES(eurephiadb-sqlite sqlite3)
+SET_TARGET_PROPERTIES(eurephiadb-sqlite PROPERTIES OUTPUT_NAME eurephiadb-sqlite PREFIX "")
+SET_SOURCE_FILES_PROPERTIES(${common_files_SRC} PROPERTIES GENERATED true)
+SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES eurephiadb)
+
diff --git a/database/sqlite/Makefile b/database/sqlite/Makefile
deleted file mode 100644
index fd5bd31..0000000
--- a/database/sqlite/Makefile
+++ /dev/null
@@ -1,43 +0,0 @@
-topdir = ../..
-
-DRIVERVERSION=1.0
-DRIVERAPIVERSION=1
-
-objs = eurephiadb-sqlite.o ../../eurephia_log.o ../../eurephiadb_session.o ../../eurephia_values.o ../../passwd.o ../../sha512.o sqlite.o
-
-driver=eurephiadb-sqlite.so
-
-include ${topdir}/Makefile.global
-
-LDFLAGS += -lsqlite3
-CFLAGS += -DDRIVERVERSION="\"${DRIVERVERSION}\"" -DDRIVERAPIVERSION=${DRIVERAPIVERSION}
-
-ifeq (${DRIVERMW},enabled)
- objs += ${topdir}/memwatch.o
- CFLAGS += -DMEMWATCH
-endif
-
-
-all : ${driver} ${DATABASE_NAME}
-
-sqlite :
- ${CC} -o $@ sqlite.c ../../eurephia_log.o -DSQLITE_DEBUG=1 -DMEMWATCH ../../memwatch.c -lsqlite3 -g -Wall -I. -I../..
-
-${driver} : ${objs}
- ${CC} -fPIC -g -shared ${LDFLAGS} -o $@ $^
-
-${DATABASE_NAME} :
- rm -f eurephiadb
- cat sql-schema.sql | sqlite3 $@
-
-
-install : all
- mkdir -p -m 755 ${DRIVER_DIR}
- install -m 755 ${driver} ${DRIVER_DIR}/
- if [ ! -f ${DATABASE_DIR}/${DATABASE_NAME} ]; then \
- install -m 644 ${DATABASE_NAME} ${DATABASE_DIR}/; \
- fi
-
-clean :
- rm -f *.so *.o *~ memwatch.log ${DATABASE_NAME}
-
diff --git a/database/sqlite/eurephiadb-sqlite.c b/database/sqlite/eurephiadb-sqlite.c
index 1424ffd..644815f 100644
--- a/database/sqlite/eurephiadb-sqlite.c
+++ b/database/sqlite/eurephiadb-sqlite.c
@@ -40,6 +40,9 @@
#endif
+#define DRIVERVERSION "1.0"
+#define DRIVERAPIVERSION 1
+
// Mapping table - mapping attempt types from .... to sqlite table fields
typedef struct {
char *colname;
diff --git a/firewall/iptables/CMakeLists.txt b/firewall/iptables/CMakeLists.txt
new file mode 100644
index 0000000..a05d99f
--- /dev/null
+++ b/firewall/iptables/CMakeLists.txt
@@ -0,0 +1,11 @@
+PROJECT(eurephiafw-iptables C)
+cmake_minimum_required(VERSION 2.6)
+SET(efw_ipt_SRC
+ efw_iptables.c
+ ../../eurephia_log.c
+ ../../eurephiafw_helpers.c
+)
+INCLUDE_DIRECTORIES(BEFORE ../..)
+ADD_LIBRARY(efw_iptables MODULE ${efw_ipt_SRC})
+TARGET_LINK_LIBRARIES(efw_iptables pthread rt gcc_s)
+SET_TARGET_PROPERTIES(efw_iptables PROPERTIES PREFIX "")
diff --git a/firewall/iptables/Makefile b/firewall/iptables/Makefile
deleted file mode 100644
index 1491abc..0000000
--- a/firewall/iptables/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-topdir = ../..
-
-INTERFACEVER=1.0
-INTERFACEAPIVER=1
-
-objs = efw_iptables.o ../../eurephia_log.o ../../eurephiafw_helpers.o
-
-interface = efw_iptables.so
-
-include ${topdir}/Makefile.global
-
-CFLAGS += -DINTERFACEVER="\"${INTERFACEVER}\"" -DINTERFACEAPIVER=${INTERFACEAPIVER}
-LDFLAGS += -lpthread -lrt -lgcc_s
-
-ifeq (${DRIVERMW},enabled)
- objs += ${topdir}/memwatch.o
- CFLAGS += -DMEMWATCH
-endif
-
-
-all : ${interface}
-
-${interface} : ${objs}
- ${CC} -fPIC -g -shared ${LDFLAGS} -o $@ $^
-
-
-install : all
- mkdir -p -m 755 ${FW_INTERFACE_DIR}
- install -m 755 ${interface} ${FW_INTERFACE_DIR}/
-
-clean :
- rm -f ${interface} ${objs} *~ memwatch.log
-
diff --git a/firewall/iptables/efw_iptables.c b/firewall/iptables/efw_iptables.c
index 9faad54..3bd9cce 100644
--- a/firewall/iptables/efw_iptables.c
+++ b/firewall/iptables/efw_iptables.c
@@ -32,6 +32,9 @@
#include <eurephia_struct.h>
#include <eurephiafw_helpers.h>
+#define INTERFACEVER "1.0"
+#define INTERFACEAPIVER 1
+
const char *eFWinterfaceVersion() {
return "eFW-iptables (v"INTERFACEVER") David Sommerseth 2008 (C) GPLv2";