From fc37f2acaaa440c5265dc01fd693d8f5406f5cf9 Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Tue, 29 Nov 2022 15:55:05 +0000 Subject: [PATCH] Add predefined macros for expansions --- doc/doc-txt/NewStuff | 4 +++ src/OS/Makefile-Base | 7 ++-- src/src/expand.c | 77 +++++++++++++++++++++++++++++++++++++++++- src/src/macro_predef.c | 1 + src/src/macro_predef.h | 1 + 5 files changed, 87 insertions(+), 3 deletions(-) diff --git a/doc/doc-txt/NewStuff b/doc/doc-txt/NewStuff index d9a9f6cda..4a912268b 100644 --- a/doc/doc-txt/NewStuff +++ b/doc/doc-txt/NewStuff @@ -13,6 +13,10 @@ Version 4.97 2. An event on a failing SMTP AUTH, for both client and server operations. + 3. Variable $sender_helo_verified with the result of an ACL "verify = helo". + + 4. Predefined macros for expansion items, operators, conditions and variables. + Version 4.96 ------------ diff --git a/src/OS/Makefile-Base b/src/OS/Makefile-Base index 4e1f61a26..a290b90b0 100644 --- a/src/OS/Makefile-Base +++ b/src/OS/Makefile-Base @@ -111,8 +111,8 @@ MACRO_HSRC = macro_predef.h os.h globals.h config.h macros.h \ routers/redirect.h OBJ_MACRO = macro_predef.o \ - macro-globals.o macro-readconf.o macro-route.o macro-transport.o macro-drtables.o \ - macro-acl.o macro-tls.o \ + macro-globals.o macro-readconf.o macro-expand.o macro-route.o \ + macro-transport.o macro-drtables.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 \ @@ -131,6 +131,9 @@ macro-globals.o : globals.c macro-readconf.o : readconf.c @echo "$(CC) -DMACRO_PREDEF readconf.c" $(FE)$(CC) -c $(CFLAGS) -DMACRO_PREDEF $(INCLUDE) -o $@ readconf.c +macro-expand.o : expand.c + @echo "$(CC) -DMACRO_PREDEF expand.c" + $(FE)$(CC) -c $(CFLAGS) -DMACRO_PREDEF $(INCLUDE) -o $@ expand.c macro-route.o : route.c @echo "$(CC) -DMACRO_PREDEF route.c" $(FE)$(CC) -c $(CFLAGS) -DMACRO_PREDEF $(INCLUDE) -o $@ route.c diff --git a/src/src/expand.c b/src/src/expand.c index 657cf3cb9..6def3c102 100644 --- a/src/src/expand.c +++ b/src/src/expand.c @@ -13,6 +13,10 @@ #include "exim.h" +#ifdef MACRO_PREDEF +# include "macro_predef.h" +#endif + typedef unsigned esi_flags; #define ESI_NOFLAGS 0 #define ESI_BRACE_ENDS BIT(0) /* expansion should stop at } */ @@ -831,6 +835,76 @@ static var_entry var_table[] = { }; static int var_table_size = nelem(var_table); + +#ifdef MACRO_PREDEF + +/* dummies */ +uschar * fn_arc_domains(void) {return NULL;} +uschar * fn_hdrs_added(void) {return NULL;} +uschar * fn_queue_size(void) {return NULL;} +uschar * fn_recipients(void) {return NULL;} +uschar * sender_helo_verified_boolstr(void) {return NULL;} +uschar * smtp_cmd_hist(void) {return NULL;} + + + +static void +expansion_items(void) +{ +uschar buf[64]; +for (int i = 0; i < nelem(item_table); i++) + { + spf(buf, sizeof(buf), CUS"_EXP_ITEM_%T", item_table[i]); + builtin_macro_create(buf); + } +} +static void +expansion_operators(void) +{ +uschar buf[64]; +for (int i = 0; i < nelem(op_table_underscore); i++) + { + spf(buf, sizeof(buf), CUS"_EXP_OP_%T", op_table_underscore[i]); + builtin_macro_create(buf); + } +for (int i = 0; i < nelem(op_table_main); i++) + { + spf(buf, sizeof(buf), CUS"_EXP_OP_%T", op_table_main[i]); + builtin_macro_create(buf); + } +} +static void +expansion_conditions(void) +{ +uschar buf[64]; +for (int i = 0; i < nelem(cond_table); i++) + { + spf(buf, sizeof(buf), CUS"_EXP_COND_%T", cond_table[i]); + builtin_macro_create(buf); + } +} +static void +expansion_variables(void) +{ +uschar buf[64]; +for (int i = 0; i < nelem(var_table); i++) + { + spf(buf, sizeof(buf), CUS"_EXP_VAR_%T", var_table[i].name); + builtin_macro_create(buf); + } +} + +void +expansions(void) +{ +expansion_items(); +expansion_operators(); +expansion_conditions(); +expansion_variables(); +} + +#else /*!MACRO_PREDEF*/ + static uschar var_buffer[256]; static BOOL malformed_header; @@ -8861,8 +8935,9 @@ search_tidyup(); return 0; } -#endif +#endif /*STAND_ALONE*/ +#endif /*!MACRO_PREDEF*/ /* vi: aw ai sw=2 */ /* End of expand.c */ diff --git a/src/src/macro_predef.c b/src/src/macro_predef.c index 618c914dc..0053cb245 100644 --- a/src/src/macro_predef.c +++ b/src/src/macro_predef.c @@ -338,6 +338,7 @@ printf("#include \"exim.h\"\n"); features(); exp_features(); options(); +expansions(); params(); printf("macro_item * macros = &p%d;\n", mp_index-1); diff --git a/src/src/macro_predef.h b/src/src/macro_predef.h index 8b7b375c6..94f68dfa3 100644 --- a/src/src/macro_predef.h +++ b/src/src/macro_predef.h @@ -22,6 +22,7 @@ extern void options_routers(void); extern void options_transports(void); extern void options_auths(void); extern void options_logging(void); +extern void expansions(void); extern void params_dkim(void); #ifndef DISABLE_TLS extern void options_tls(void); -- 2.30.2