From 276ddf35aa256ca3bc517cd20e8337ea3ef448e0 Mon Sep 17 00:00:00 2001 From: Heiko Reese Date: Sat, 21 Aug 2021 22:57:01 +0200 Subject: [PATCH 1/9] Switched build system to meson. --- .gitignore | 7 ++---- .gitlab-ci.yml | 42 ++++++------------------------------ meson.build | 29 +++++++++++++++++++++++++ src/config.h.in | 4 ++++ src/libexim-encrypt-dlfunc.c | 26 ++++++++-------------- src/meson.build | 14 ++++++++++++ src/simple_exim_test.sh | 4 +++- 7 files changed, 67 insertions(+), 59 deletions(-) create mode 100644 meson.build create mode 100644 src/config.h.in create mode 100644 src/meson.build 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 From f8f2a06abcbcaa4fe07559b40e851788df044dee Mon Sep 17 00:00:00 2001 From: "heiko.reese" Date: Sat, 21 Aug 2021 22:58:16 +0200 Subject: [PATCH 2/9] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 835d96a..bda8411 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,7 +9,7 @@ stages: script: - meson build - meson compile -C build - - meson test -C build + - meson test -C build artifacts: paths: - build/src/genkey From 26a591bedd5e8159e6f54b3d4dbad336c82420de Mon Sep 17 00:00:00 2001 From: "heiko.reese" Date: Sat, 21 Aug 2021 23:00:13 +0200 Subject: [PATCH 3/9] CI: Install pkg-config --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bda8411..3b232cd 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,7 +5,7 @@ stages: .build: stage: build before_script: - - apt-get update && apt-get install -y build-essential exim4-dev libsodium-dev meson exim4-daemon-heavy + - apt-get update && apt-get install -y build-essential exim4-dev libsodium-dev meson exim4-daemon-heavy pkg-config script: - meson build - meson compile -C build From 3e73cc6ee10442da4b68cd31d700135c672861ee Mon Sep 17 00:00:00 2001 From: "heiko.reese" Date: Sat, 21 Aug 2021 23:04:47 +0200 Subject: [PATCH 4/9] CI: Support ancient meson versions --- .gitlab-ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3b232cd..eea3e6e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,8 +8,9 @@ stages: - apt-get update && apt-get install -y build-essential exim4-dev libsodium-dev meson exim4-daemon-heavy pkg-config script: - meson build - - meson compile -C build - - meson test -C build + - cd build + - ninja + - ninja test artifacts: paths: - build/src/genkey From eb9123b3f6e1a9577abc8481ea459418e7633941 Mon Sep 17 00:00:00 2001 From: "heiko.reese" Date: Sat, 21 Aug 2021 23:10:05 +0200 Subject: [PATCH 6/9] Fix apt interactivity in Ubuntu --- .gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index eea3e6e..2d8bf43 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,7 +5,8 @@ stages: .build: stage: build before_script: - - apt-get update && apt-get install -y build-essential exim4-dev libsodium-dev meson exim4-daemon-heavy pkg-config + - 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 script: - meson build - cd build From da6bff859ea524d439c6091024f673ea577b401e Mon Sep 17 00:00:00 2001 From: "heiko.reese" Date: Sat, 21 Aug 2021 23:25:05 +0200 Subject: [PATCH 7/9] Update meson.build --- meson.build | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/meson.build b/meson.build index 2506c6b..8533b9b 100644 --- a/meson.build +++ b/meson.build @@ -18,12 +18,6 @@ int main() { 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 +conf_data.set('local_scan_version', local_scan_version) subdir('src') From b85641ac0e52b26717f8336d8a985186c67339ae Mon Sep 17 00:00:00 2001 From: "heiko.reese" Date: Sat, 21 Aug 2021 23:28:34 +0200 Subject: [PATCH 8/9] Update .gitlab-ci.yml file: install openssl --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2d8bf43..edd8119 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,7 +6,7 @@ stages: stage: build before_script: - 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 + - DEBIAN_FRONTEND=noninteractive DEBIAN_PRIORITY=critical apt-get install -y build-essential exim4-dev libsodium-dev meson exim4-daemon-heavy pkg-config openssl script: - meson build - cd build From 256042512d334d146a5d1e42f10e8c9c297260c9 Mon Sep 17 00:00:00 2001 From: Heiko Reese Date: Sat, 21 Aug 2021 23:33:50 +0200 Subject: [PATCH 9/9] cpp: more careful macro expansion --- src/libexim-encrypt-dlfunc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libexim-encrypt-dlfunc.c b/src/libexim-encrypt-dlfunc.c index 98eb8c3..b8329f2 100644 --- a/src/libexim-encrypt-dlfunc.c +++ b/src/libexim-encrypt-dlfunc.c @@ -26,11 +26,11 @@ */ #if LOCAL_SCAN_VERSION < 3 -#define store_get_untainted(size) store_get(size) -#define store_get_tainted(size) store_get(size) +#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) +#define store_get_untainted(size) (store_get(size, FALSE)) +#define store_get_tainted(size) (store_get(size, TRUE)) #else #error "exim4 local version" #endif