Add predefined macros for expansions
authorJeremy Harris <jgh146exb@wizmail.org>
Tue, 29 Nov 2022 15:55:05 +0000 (15:55 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Tue, 29 Nov 2022 16:03:48 +0000 (16:03 +0000)
doc/doc-txt/NewStuff
src/OS/Makefile-Base
src/src/expand.c
src/src/macro_predef.c
src/src/macro_predef.h

index d9a9f6cdaa48a2714fb1c6a01d3871ce0b59d116..4a912268b32f1bf09ab7e379e99de65cd4555628 100644 (file)
@@ -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
 ------------
 
index 4e1f61a266d8ba70f50f14e4cb730fdd4d4d0f55..a290b90b034c302200487ad31ffe90510cb49e23 100644 (file)
@@ -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
index 657cf3cb926bc5b91771266b50ff4591d09e61ec..6def3c102a40be4ca82f0385bc0823051b264e5c 100644 (file)
 
 #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 */
index 618c914dc88718c1dbabd0c67b7724cdbdcf0efd..0053cb2453b4699135a15863646360ace0fcd111 100644 (file)
@@ -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);
index 8b7b375c6391f9a17253798897803f4e2bb3d2db..94f68dfa3db4946fbb4d4c4afa7987f77e9aa531 100644 (file)
@@ -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);