Builtin macros for ACL conditions & modifiers
authorJeremy Harris <jgh146exb@wizmail.org>
Wed, 4 Aug 2021 13:11:49 +0000 (14:11 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Wed, 4 Aug 2021 13:11:49 +0000 (14:11 +0100)
src/OS/Makefile-Base
src/src/acl.c
src/src/macro_predef.c
src/src/macro_predef.h

index bc5fbc42c6d1bc65667cf713b4481d67eb4d2cf8..dc5238a637f30506e8286aee1f1a0df8b663c420 100644 (file)
@@ -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
index f47259ca08b6c5269f230d632af7afadd570db9e..242425d1e47975063685043de71128a39f4cdee9 100644 (file)
@@ -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 */
index 5340c5af86d17994a22364a7ffe26d7a5dbdfe1e..757b375630b9a8125dc8006ad18d915d8849b9a0 100644 (file)
@@ -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
index 4bc98e0df3ae9d49563bc4d2b19a37c0cb07df6f..3c988a380ca80562164c861502c22631ab00d0ec 100644 (file)
@@ -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);