SPDX: Mass-update to GPL-2.0-or-later
[exim.git] / src / src / macros.h
index 62b6290eb7b06cc5d93d8433b696c7d91fca69c3..243c1e5a0dd4f5a863d21d4e3547a65d95346bc5 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 */
 
@@ -154,7 +151,9 @@ enough to hold all the headers from a normal kind of message. */
 
 /* The initial size of a big buffer for use in various places. It gets put
 into big_buffer_size and in some circumstances increased. It should be at least
-as long as the maximum path length. */
+as long as the maximum path length PLUS room for string additions.
+Let's go with "at least twice as large as maximum path length".
+*/
 
 #ifdef AUTH_HEIMDAL_GSSAPI
                /* RFC 4121 section 5.2, SHOULD support 64K input buffers */
@@ -163,10 +162,12 @@ as long as the maximum path length. */
 # define __BIG_BUFFER_SIZE 16384
 #endif
 
-#if defined PATH_MAX && PATH_MAX > __BIG_BUFFER_SIZE
-# define BIG_BUFFER_SIZE PATH_MAX
-#elif defined MAXPATHLEN && MAXPATHLEN > __BIG_BUFFER_SIZE
-# define BIG_BUFFER_SIZE MAXPATHLEN
+#ifndef PATH_MAX
+/* exim.h will have ensured this exists before including us. */
+# error headers confusion, PATH_MAX missing in macros.h
+#endif
+#if (PATH_MAX*2) > __BIG_BUFFER_SIZE
+# define BIG_BUFFER_SIZE (PATH_MAX*2)
 #else
 # define BIG_BUFFER_SIZE __BIG_BUFFER_SIZE
 #endif
@@ -180,21 +181,16 @@ written on the spool, it gets read into big_buffer. */
 
 #define LOCAL_SCAN_MAX_RETURN (BIG_BUFFER_SIZE - 24)
 
-/* A limit to the length of an address. RFC 2821 limits the local part to 64
-and the domain to 255, so this should be adequate, taking into account quotings
-etc. */
-
-#define ADDRESS_MAXLENGTH 512
-
 /* The length of the base names of spool files, which consist of an internal
 message id with a trailing "-H" or "-D" added. */
 
 #define SPOOL_NAME_LENGTH (MESSAGE_ID_LENGTH+2)
 
 /* The maximum number of message ids to store in a waiting database
-record. */
+record, and the max number of continuation records allowed. */
 
 #define WAIT_NAME_MAX 50
+#define WAIT_CONT_MAX 1000
 
 /* Fixed option values for all PCRE functions */
 
@@ -203,8 +199,7 @@ record. */
 
 /* Macros for trivial functions */
 
-#define mac_ismsgid(s) \
-  (pcre_exec(regex_ismsgid,NULL,CS s,Ustrlen(s),0,PCRE_EOPT,NULL,0) >= 0)
+#define mac_ismsgid(s) (regex_match(regex_ismsgid, (s), -1, NULL))
 
 
 /* Options for dns_next_rr */
@@ -429,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
@@ -479,6 +481,7 @@ enum logbit {
   Li_protocol_detail,
   Li_proxy,
   Li_queue_time,
+  Li_queue_time_exclusive,
   Li_queue_time_overall,
   Li_receive_time,
   Li_received_sender,
@@ -865,18 +868,19 @@ enum {
 
 /* Options for transport_write_message */
 
-#define topt_add_return_path    0x001
-#define topt_add_delivery_date  0x002
-#define topt_add_envelope_to    0x004
-#define topt_use_crlf           0x008  /* Terminate lines with CRLF */
-#define topt_end_dot            0x010  /* Send terminating dot line */
-#define topt_no_headers         0x020  /* Omit headers */
-#define topt_no_body            0x040  /* Omit body */
-#define topt_escape_headers     0x080  /* Apply escape check to headers */
-#define topt_use_bdat          0x100  /* prepend chunks with RFC3030 BDAT header */
-#define topt_output_string     0x200  /* create string rather than write to fd */
-#define topt_continuation      0x400  /* do not reset buffer */
-#define topt_not_socket                0x800  /* cannot do socket-only syscalls */
+#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 */
 
 /* Options for smtp_write_command */
 
@@ -1049,9 +1053,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
@@ -1072,8 +1077,8 @@ should not be one active. */
 
 #define AUTHS_REGEX US"\\n250[\\s\\-]AUTH\\s+([\\-\\w \\t]+)(?:\\n|$)"
 
-#define EARLY_PIPE_FEATURE_NAME "X_PIPE_CONNECT"
-#define EARLY_PIPE_FEATURE_LEN  14
+#define EARLY_PIPE_FEATURE_NAME "PIPECONNECT"
+#define EARLY_PIPE_FEATURE_LEN  11
 
 
 /* Flags for auth_client_item() */
@@ -1107,7 +1112,17 @@ should not be one active. */
 
 
 #define NOTIFIER_SOCKET_NAME   "exim_daemon_notify"
-#define NOTIFY_MSG_QRUN                1       /* Notify message types */
+/* Notify message types */
+#define NOTIFY_MSG_QRUN                1
 #define NOTIFY_QUEUE_SIZE_REQ  2
+#define NOTIFY_REGEX           3
+
+/* 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 */
 
 /* End of macros.h */