diff --git a/.gitignore b/.gitignore index efd22c8..a774788 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,2 @@ -src/genkey -src/*.so -src/recipient_sk.* -src/recipient_pk.* -src/*.c~ +/build + diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f005f67..835d96a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,14 +5,15 @@ stages: .build: stage: build before_script: - - apt-get update && apt-get install -y build-essential exim4-dev libsodium-dev + - apt-get update && apt-get install -y build-essential exim4-dev libsodium-dev meson exim4-daemon-heavy script: - - cd src - - make all + - meson build + - meson compile -C build + - meson test -C build artifacts: paths: - - src/genkey - - src/libexim-encrypt-dlfunc.so + - build/src/genkey + - build/src/libexim-encrypt-dlfunc.so build:buster: extends: @@ -33,34 +34,3 @@ build:focal: image: ubuntu:focal extends: - .build -.test: - stage: test - before_script: - - apt-get update && apt-get install -y exim4-daemon-heavy openssl libsodium23 - script: - - cd src - - ./simple_exim_test.sh - -test:buster: - extends: - - .test - needs: ["build:buster"] - image: debian:buster - -test:bullseye: - extends: - - .test - needs: ["build:bullseye"] - image: debian:bullseye - -test:bionic: - extends: - - .test - needs: ["build:bionic"] - image: ubuntu:bionic - -test:focal: - extends: - - .test - needs: ["build:focal"] - image: ubuntu:focal diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..2506c6b --- /dev/null +++ b/meson.build @@ -0,0 +1,29 @@ +project('libexim-encrypt-dlfunc', 'c', + default_options: ['b_lundef=false', 'b_pie=true']) + +compiler = meson.get_compiler('c') +conf_data = configuration_data() + +sodium_deps = dependency('libsodium') + +exim4_code = ''' +#include +#include +int main() { + printf("%d\n", LOCAL_SCAN_ABI_VERSION_MAJOR); + return 0; +} +''' + +result = compiler.run(exim4_code) +local_scan_version = result.stdout().strip().to_int() + +if local_scan_version < 3 + conf_data.set('local_scan_version', 3) +elif local_scan_version >= 3 + conf_data.set('local_scan_version', 3) +else + error('exim local_scan version could not be determined') +endif + +subdir('src') diff --git a/src/config.h.in b/src/config.h.in new file mode 100644 index 0000000..d094bc8 --- /dev/null +++ b/src/config.h.in @@ -0,0 +1,4 @@ +#pragma once + +#define LOCAL_SCAN_VERSION @local_scan_version@ + diff --git a/src/libexim-encrypt-dlfunc.c b/src/libexim-encrypt-dlfunc.c index ed2d865..98eb8c3 100644 --- a/src/libexim-encrypt-dlfunc.c +++ b/src/libexim-encrypt-dlfunc.c @@ -1,3 +1,5 @@ +#include "config.h" + #include #include #include @@ -6,8 +8,10 @@ #include #include +#define LOCAL_SCAN +#define DLFUNC_IMPL /* Exim4 dlfunc API header */ -#include +#include /* * This is a set of workarounds for the different exim local_scan ABI versions, distribution patches and missing @@ -21,26 +25,14 @@ * 3.1 Ubuntu 20-04 (Focal) */ -// local_scan ABI version < 3 -#if LOCAL_SCAN_ABI_VERSION_MAJOR < 3 -#define LOCAL_SCAN +#if LOCAL_SCAN_VERSION < 3 #define store_get_untainted(size) store_get(size) #define store_get_tainted(size) store_get(size) - -// local_scan ABI version == 3 -#elif LOCAL_SCAN_ABI_VERSION_MAJOR == 3 -#define DLFUNC_IMPL +#elif LOCAL_SCAN_VERSION >= 3 #define store_get_untainted(size) store_get(size, FALSE) #define store_get_tainted(size) store_get(size, TRUE) - -# define string_copy(s) string_copy_function(s) -extern uschar * string_copy_function(const uschar *); - -// local_scan ABI version > 3 #else -#define DLFUNC_IMPL -#define store_get_untainted(size) store_get(size, FALSE) -#define store_get_tainted(size) store_get(size, TRUE) +#error "exim4 local version" #endif /* @@ -329,4 +321,4 @@ int sodium_crypto_box_seal_open(uschar **yield, int argc, uschar *argv[]) { // return cleartext *yield = string_copy(cleartext); return OK; -} \ No newline at end of file +} diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 0000000..37f4753 --- /dev/null +++ b/src/meson.build @@ -0,0 +1,14 @@ +configure_file(input: 'config.h.in', + output: 'config.h', + configuration: conf_data) + +executable('genkey', 'genkey.c', dependencies : [ sodium_deps ] ) + +shared_library('exim-encrypt-dlfunc', 'libexim-encrypt-dlfunc.c', + dependencies : [ sodium_deps ], + install: true) + + +simple_exim_test = find_program('simple_exim_test.sh') +test('simple test', simple_exim_test) + diff --git a/src/simple_exim_test.sh b/src/simple_exim_test.sh index c65a4c3..cf5acff 100755 --- a/src/simple_exim_test.sh +++ b/src/simple_exim_test.sh @@ -2,8 +2,10 @@ set -e +PATH=/sbin:/usr/sbin:$PATH + # copy to /tmp to keep call to exim under 256 chars (prevent problems on Ubuntu) -install -t /tmp libexim-encrypt-dlfunc.so +install -t /tmp src/libexim-encrypt-dlfunc.so LIB=/tmp/libexim-encrypt-dlfunc.so CLEARTEXT="127.88.99.23" # keep short; see above