* 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
((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. */
/* 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 */
/* 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)
+#define SPOOL_NAME_LENGTH_OLD (MESSAGE_ID_LENGTH_OLD + 2)
+#define SPOOL_NAME_LENGTH (MESSAGE_ID_LENGTH + 2)
/* The maximum number of message ids to store in a waiting database
record, and the max number of continuation records allowed. */
/* Macros for trivial functions */
-#define mac_ismsgid(s) \
- (pcre_exec(regex_ismsgid,NULL,CS s,Ustrlen(s),0,PCRE_EOPT,NULL,0) >= 0)
+#define xstr(x) #x
+#define str(x) xstr(x) /* stringize, expanding macros in arg first */
+#define mac_ismsgid(s) (regex_match(regex_ismsgid, (s), -1, NULL))
/* Options for dns_next_rr */
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
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,
#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}() */
/* 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 */
/* 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
#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() */
#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 */