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..edd8119 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,14 +5,17 @@ stages: .build: stage: build before_script: - - apt-get update && apt-get install -y build-essential exim4-dev libsodium-dev + - apt-get update + - DEBIAN_FRONTEND=noninteractive DEBIAN_PRIORITY=critical apt-get install -y build-essential exim4-dev libsodium-dev meson exim4-daemon-heavy pkg-config openssl script: - - cd src - - make all + - meson build + - cd build + - ninja + - ninja test artifacts: paths: - - src/genkey - - src/libexim-encrypt-dlfunc.so + - build/src/genkey + - build/src/libexim-encrypt-dlfunc.so build:buster: extends: @@ -33,34 +36,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..8533b9b --- /dev/null +++ b/meson.build @@ -0,0 +1,23 @@ +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() + +conf_data.set('local_scan_version', local_scan_version) + +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..b8329f2 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 -#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 -#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 +#if LOCAL_SCAN_VERSION < 3 +#define store_get_untainted(size) (store_get(size)) +#define store_get_tainted(size) (store_get(size)) +#elif LOCAL_SCAN_VERSION >= 3 +#define store_get_untainted(size) (store_get(size, FALSE)) +#define store_get_tainted(size) (store_get(size, TRUE)) #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