Experimental_XCLIENT. Bug 2702
[exim.git] / src / src / macros.h
index 4263bc444af7ae40d5c903f7394e11fa07d579ad..c55276332f09c6ba44cd27c0490f94ad94498a81 100644 (file)
@@ -2,9 +2,10 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
+/* Copyright (c) The Exim Maintainers 2020 - 2022 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
-/* Copyright (c) The Exim Maintainers 2020 */
 /* See the file NOTICE for conditions of use and distribution. */
+/* SPDX-License-Identifier: GPL-2.0-or-later */
 
 
 /* These two macros make it possible to obtain the result of macro-expanding
@@ -79,11 +80,6 @@ as unsigned. */
   ((uschar)(c) > 127 && print_topbitchars))
 
 
-/* Convenience for testing strings */
-
-#define streqic(Foo, Bar) (strcmpic(Foo, Bar) == 0)
-
-
 /* When built with TLS support, the act of flushing SMTP output becomes
 a no-op once an SSL session is in progress. */
 
@@ -110,8 +106,9 @@ don't make the file descriptors two-way. */
 
 /* Debugging control */
 
+#define LOG_NAME_SIZE 256
 #define DEBUG(x)      if (debug_selector & (x))
-#define HDEBUG(x)     if (host_checking || (debug_selector & (x)))
+#define HDEBUG(x)     if (host_checking || debug_selector & (x))
 
 /* The default From: text for DSNs */
 
@@ -427,6 +424,13 @@ enum {
                                          D_timestamp   | \
                                          D_resolver))
 
+/* Bits for debug triggers */
+
+enum {
+  DTi_panictrigger,
+  DTi_pretrigger,
+};
+
 /* Options bits for logging. Those that have values < BITWORDSIZE can be used
 in calls to log_write(). The others are put into later words in log_selector
 and are only ever tested independently, so they do not need bit mask
@@ -490,9 +494,6 @@ enum logbit {
   Li_smtp_mailauth,
   Li_smtp_no_mail,
   Li_subject,
-#ifdef ALLOW_INSECURE_TAINTED_DATA
-  Li_tainted,
-#endif
   Li_tls_certificate_verified,
   Li_tls_cipher,
   Li_tls_peerdn,
@@ -816,14 +817,16 @@ local_scan.h */
 #define DEBUG_FROM_CONFIG       0x0001
 
 /* SMTP command identifiers for the smtp_connection_had field that records the
-most recent SMTP commands. Must be kept in step with the list of names in
-smtp_in.c that is used for creating the smtp_no_mail logging action. SCH_NONE
-is "empty". */
+most recent SMTP commands. SCH_NONE is "empty". */
 
 enum { SCH_NONE, SCH_AUTH, SCH_DATA, SCH_BDAT,
        SCH_EHLO, SCH_ETRN, SCH_EXPN, SCH_HELO,
        SCH_HELP, SCH_MAIL, SCH_NOOP, SCH_QUIT, SCH_RCPT, SCH_RSET, SCH_STARTTLS,
-       SCH_VRFY };
+       SCH_VRFY,
+#ifdef EXPERIMENTAL_XCLIENT
+       SCH_XCLIENT,
+#endif
+       };
 
 /* Returns from host_find_by{name,dns}() */
 
@@ -867,19 +870,20 @@ enum {
 
 /* Options for transport_write_message */
 
-#define topt_add_return_path    0x0001
-#define topt_add_delivery_date  0x0002
-#define topt_add_envelope_to    0x0004
-#define topt_escape_headers     0x0008 /* Apply escape check to headers */
-#define topt_use_crlf           0x0010 /* Terminate lines with CRLF */
-#define topt_no_headers         0x0020 /* Omit headers */
-#define topt_no_body            0x0040 /* Omit body */
-#define topt_end_dot            0x0080 /* Send terminating dot line */
-#define topt_no_flush          0x0100  /* more data expected after message (eg QUIT) */
-#define topt_use_bdat          0x0200  /* prepend chunks with RFC3030 BDAT header */
-#define topt_output_string     0x0400  /* create string rather than write to fd */
-#define topt_continuation      0x0800  /* do not reset buffer */
-#define topt_not_socket                0x1000  /* cannot do socket-only syscalls */
+#define topt_add_return_path    BIT(0)
+#define topt_add_delivery_date  BIT(1)
+#define topt_add_envelope_to    BIT(2)
+#define topt_escape_headers     BIT(3) /* Apply escape check to headers */
+#define topt_truncate_headers   BIT(4) /* Truncate header lines at 998 chars */
+#define topt_use_crlf           BIT(5) /* Terminate lines with CRLF */
+#define topt_no_headers         BIT(6) /* Omit headers */
+#define topt_no_body            BIT(7) /* Omit body */
+#define topt_end_dot            BIT(8) /* Send terminating dot line */
+#define topt_no_flush          BIT(9)  /* more data expected after message (eg QUIT) */
+#define topt_use_bdat          BIT(10) /* prepend chunks with RFC3030 BDAT header */
+#define topt_output_string     BIT(11) /* create string rather than write to fd */
+#define topt_continuation      BIT(12) /* do not reset buffer */
+#define topt_not_socket                BIT(13) /* cannot do socket-only syscalls */
 
 /* Options for smtp_write_command */
 
@@ -1052,9 +1056,10 @@ enum { FILTER_UNSET, FILTER_FORWARD, FILTER_EXIM, FILTER_SIEVE };
 
 
 /* Options on tls_close */
-#define TLS_NO_SHUTDOWN                0
-#define TLS_SHUTDOWN_NOWAIT    1
-#define TLS_SHUTDOWN_WAIT      2
+#define TLS_NO_SHUTDOWN                0       /* Just forget the context */
+#define TLS_SHUTDOWN_NOWAIT    1       /* Send alert; do not wait */
+#define TLS_SHUTDOWN_WAIT      2       /* Send alert & wait for peer's alert */
+#define TLS_SHUTDOWN_WONLY     3       /* only wait for peer's alert */
 
 
 #ifdef COMPILE_UTILITY
@@ -1075,8 +1080,8 @@ should not be one active. */
 
 #define AUTHS_REGEX US"\\n250[\\s\\-]AUTH\\s+([\\-\\w \\t]+)(?:\\n|$)"
 
-#define EARLY_PIPE_FEATURE_NAME "PIPE_CONNECT"
-#define EARLY_PIPE_FEATURE_LEN  12
+#define EARLY_PIPE_FEATURE_NAME "PIPECONNECT"
+#define EARLY_PIPE_FEATURE_LEN  11
 
 
 /* Flags for auth_client_item() */
@@ -1110,7 +1115,39 @@ should not be one active. */
 
 
 #define NOTIFIER_SOCKET_NAME   "exim_daemon_notify"
-#define NOTIFY_MSG_QRUN                1       /* Notify message types */
-#define NOTIFY_QUEUE_SIZE_REQ  2
+/* Notify message types */
+#define NOTIFY_MSG_QRUN                1       /* 2stage qrun fast-ramp trigger */
+#define NOTIFY_QUEUE_SIZE_REQ  2       /* obtain current queue count */
+#define NOTIFY_REGEX           3       /* an RE for caching */
+
+/* Flags for match_check_string() */
+typedef unsigned mcs_flags;
+#define MCS_NOFLAGS            0
+#define MCS_PARTIAL            BIT(0)  /* permit partial- search types */
+#define MCS_CASELESS           BIT(1)  /* caseless matching where possible */
+#define MCS_AT_SPECIAL         BIT(2)  /* recognize @, @[], etc. */
+#define MCS_CACHEABLE          BIT(3)  /* no dynamic expansions used for pattern */
+
+/* Flags for open() */
+#ifdef O_CLOEXEC
+# define EXIM_CLOEXEC O_CLOEXEC
+#else
+# define EXIM_CLOEXEC 0
+#endif
+#ifdef O_NOFOLLOW
+# define EXIM_NOFOLLOW O_NOFOLLOW
+#else
+# define EXIM_NOFOLLOW 0
+#endif
+
+/* A big number for (effectively) unlimited envelope addresses */
+#define UNLIMITED_ADDRS                999999
+
+/* Flags for queue_list() */
+#define QL_BASIC               0
+#define QL_UNDELIVERED_ONLY    1
+#define QL_PLUS_GENERATED      2
+#define QL_MSGID_ONLY          3
+#define QL_UNSORTED            8
 
 /* End of macros.h */