From 86d51a7b1055b6fad9a4add3b42efd40328b5130 Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Wed, 4 Aug 2021 14:11:49 +0100 Subject: [PATCH] Builtin macros for ACL conditions & modifiers --- src/OS/Makefile-Base | 5 ++++- src/src/acl.c | 22 ++++++++++++++++++++++ src/src/macro_predef.c | 5 +++-- src/src/macro_predef.h | 1 + 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/OS/Makefile-Base b/src/OS/Makefile-Base index bc5fbc42c..dc5238a63 100644 --- a/src/OS/Makefile-Base +++ b/src/OS/Makefile-Base @@ -113,7 +113,7 @@ MACRO_HSRC = macro_predef.h os.h globals.h config.h macros.h \ OBJ_MACRO = macro_predef.o \ macro-globals.o macro-readconf.o macro-route.o macro-transport.o macro-drtables.o \ - macro-tls.o \ + macro-acl.o macro-tls.o \ macro-appendfile.o macro-autoreply.o macro-lmtp.o macro-pipe.o macro-queuefile.o \ macro-smtp.o macro-accept.o macro-dnslookup.o macro-ipliteral.o macro-iplookup.o \ macro-manualroute.o macro-queryprogram.o macro-redirect.o \ @@ -141,6 +141,9 @@ macro-transport.o: transport.c macro-drtables.o : drtables.c @echo "$(CC) -DMACRO_PREDEF drtables.c" $(FE)$(CC) -c $(CFLAGS) -DMACRO_PREDEF $(INCLUDE) -o $@ drtables.c +macro-acl.o: acl.c + @echo "$(CC) -DMACRO_PREDEF acl.c" + $(FE)$(CC) -c $(CFLAGS) -DMACRO_PREDEF $(INCLUDE) -o $@ acl.c macro-tls.o: tls.c tls-gnu.c tls-openssl.c @echo "$(CC) -DMACRO_PREDEF tls.c" $(FE)$(CC) -c $(CFLAGS) -DMACRO_PREDEF $(INCLUDE) -o $@ tls.c diff --git a/src/src/acl.c b/src/src/acl.c index f47259ca0..242425d1e 100644 --- a/src/src/acl.c +++ b/src/src/acl.c @@ -10,6 +10,7 @@ #include "exim.h" +#ifndef MACRO_PREDEF /* Default callout timeout */ @@ -53,6 +54,8 @@ static int msgcond[] = { [ACL_WARN] = BIT(OK) }; +#endif + /* ACL condition and modifier codes - keep in step with the table that follows. down. */ @@ -338,6 +341,24 @@ static condition_def conditions[] = { }; +#ifdef MACRO_PREDEF +# include "macro_predef.h" +void +features_acl(void) +{ +for (condition_def * c = conditions; c < conditions + nelem(conditions); c++) + { + uschar buf[64], * p, * s; + int n = sprintf(CS buf, "_ACL_%s_", c->is_modifier ? "MOD" : "COND"); + for (p = buf + n, s = c->name; *s; s++) *p++ = toupper(*s); + *p = '\0'; + builtin_macro_create(buf); + } +} +#endif + + +#ifndef MACRO_PREDEF /* Return values from decode_control(); used as index so keep in step with the controls_list table that follows! */ @@ -4694,6 +4715,7 @@ if (is_tainted(value)) putc('-', f); fprintf(f, "-acl%c %s %d\n%s\n", name[0], name+1, Ustrlen(value), value); } +#endif /* !MACRO_PREDEF */ /* vi: aw ai sw=2 */ /* End of acl.c */ diff --git a/src/src/macro_predef.c b/src/src/macro_predef.c index 5340c5af8..757b37563 100644 --- a/src/src/macro_predef.c +++ b/src/src/macro_predef.c @@ -279,11 +279,12 @@ due to conflicts with other common macros. */ # endif #endif +features_acl(); +features_crypto(); + #ifdef WITH_CONTENT_SCAN features_malware(); #endif - -features_crypto(); } static void diff --git a/src/src/macro_predef.h b/src/src/macro_predef.h index 4bc98e0df..3c988a380 100644 --- a/src/src/macro_predef.h +++ b/src/src/macro_predef.h @@ -12,6 +12,7 @@ extern void builtin_macro_create(const uschar *); extern void builtin_macro_create_var(const uschar *, const uschar *); extern void options_from_list(optionlist *, unsigned, const uschar *, uschar *); +extern void features_acl(void); extern void features_malware(void); extern void features_crypto(void); extern void options_main(void); -- 2.30.2