ARC: fix crash in signing
[users/jgh/exim.git] / src / src / macros.h
index 185ea6aff5c5b632e39e4275ac8045432cf21da4..76913d64ed37c8f62f95e581dd224ad650172232 100644 (file)
@@ -84,7 +84,7 @@ as unsigned. */
 /* When built with TLS support, the act of flushing SMTP output becomes
 a no-op once an SSL session is in progress. */
 
-#ifdef SUPPORT_TLS
+#ifndef DISABLE_TLS
 #define mac_smtp_fflush() if (tls_in.active.sock < 0) fflush(smtp_out);
 #else
 #define mac_smtp_fflush() fflush(smtp_out);
@@ -110,13 +110,6 @@ don't make the file descriptors two-way. */
 #define DEBUG(x)      if (debug_selector & (x))
 #define HDEBUG(x)     if (host_checking || (debug_selector & (x)))
 
-#define PTR_CHK(ptr) \
-do { \
-if ((void *)ptr > (void *)store_get(0)) \
-  debug_printf("BUG: ptr '%s' beyond arena at %s:%d\n", \
-               mac_expanded_string(ptr), __FUNCTION__, __LINE__); \
-} while(0)
-
 /* The default From: text for DSNs */
 
 #define DEFAULT_DSN_FROM "Mail Delivery System <Mailer-Daemon@$qualify_domain>"
@@ -245,7 +238,7 @@ enum {
   ERRMESS_TOOMANYRECIP,     /* Too many recipients */
   ERRMESS_LOCAL_SCAN,       /* Rejected by local scan */
   ERRMESS_LOCAL_ACL         /* Rejected by non-SMTP ACL */
-#ifdef EXPERIMENTAL_DMARC
+#ifdef SUPPORT_DMARC
  ,ERRMESS_DMARC_FORENSIC    /* DMARC Forensic Report */
 #endif
 };
@@ -278,7 +271,9 @@ and some additional values are used only by non-driver functions.
 
 OK, FAIL, DEFER, ERROR, and FAIL_FORCED are also declared in local_scan.h for
 use in the local_scan() function and in ${dlfunc loaded functions. Do not
-change them unilaterally. */
+change them unilaterally.
+
+Use rc_names[] for debug strings. */
 
 #define  OK            0    /* Successful match */
 #define  DEFER         1    /* Defer - some problem */
@@ -337,11 +332,11 @@ platforms, but this ensures bit vectors always work the same way. */
 
 /* This macro is for single-word bit vectors: the debug selector,
 and the first word of the log selector. */
-#define BIT(n) (1 << (n))
+#define BIT(n) (1UL << (n))
 
 /* And these are for multi-word vectors. */
-#define BITWORD(n) (     (n) / BITWORDSIZE)
-#define BITMASK(n) (1 << (n) % BITWORDSIZE)
+#define BITWORD(n) (      (n) / BITWORDSIZE)
+#define BITMASK(n) (1U << (n) % BITWORDSIZE)
 
 #define BIT_CLEAR(s,z,n) ((s)[BITWORD(n)] &= ~BITMASK(n))
 #define BIT_SET(s,z,n)   ((s)[BITWORD(n)] |=  BITMASK(n))
@@ -368,7 +363,7 @@ Exim's code assumes in a number of places that the debug_selector is one
 word, and this is exposed in the local_scan ABI. The D_v and D_local_scan bit
 masks are part of the local_scan API so are #defined in local_scan.h */
 
-#define DEBUG_BIT(name) Di_##name = IOTA(Di_iota), D_##name = BIT(Di_##name)
+#define DEBUG_BIT(name) Di_##name = IOTA(Di_iota), D_##name = (int)BIT(Di_##name)
 
 enum {
   Di_all        = -1,
@@ -376,12 +371,12 @@ enum {
   Di_local_scan = 1,
 
   Di_iota = IOTA_INIT(2),
-  DEBUG_BIT(acl),
+  DEBUG_BIT(acl),              /* 2 */
   DEBUG_BIT(auth),
   DEBUG_BIT(deliver),
   DEBUG_BIT(dns),
   DEBUG_BIT(dnsbl),
-  DEBUG_BIT(exec),
+  DEBUG_BIT(exec),             /* 7 */
   DEBUG_BIT(expand),
   DEBUG_BIT(filter),
   DEBUG_BIT(hints_lookup),
@@ -389,7 +384,7 @@ enum {
   DEBUG_BIT(ident),
   DEBUG_BIT(interface),
   DEBUG_BIT(lists),
-  DEBUG_BIT(load),
+  DEBUG_BIT(load),             /* 15 */
   DEBUG_BIT(lookup),
   DEBUG_BIT(memory),
   DEBUG_BIT(noutf8),
@@ -397,7 +392,7 @@ enum {
   DEBUG_BIT(process_info),
   DEBUG_BIT(queue_run),
   DEBUG_BIT(receive),
-  DEBUG_BIT(resolver),
+  DEBUG_BIT(resolver),         /* 23 */
   DEBUG_BIT(retry),
   DEBUG_BIT(rewrite),
   DEBUG_BIT(route),
@@ -405,7 +400,7 @@ enum {
   DEBUG_BIT(tls),
   DEBUG_BIT(transport),
   DEBUG_BIT(uid),
-  DEBUG_BIT(verify),
+  DEBUG_BIT(verify),           /* 31 */
 };
 
 /* Multi-bit debug masks */
@@ -433,11 +428,12 @@ enum {
 /* 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
-declarations. The Li_all value is recognized specially by decode_bits(). */
+declarations. The Li_all value is recognized specially by decode_bits().
+Add also to log_options[] when creating new ones. */
 
 #define LOG_BIT(name) Li_##name = IOTA(Li_iota), L_##name = BIT(Li_##name)
 
-enum {
+enum logbit {
   Li_all = -1,
 
   Li_iota = IOTA_INIT(0),
@@ -470,6 +466,8 @@ enum {
   Li_incoming_interface,
   Li_incoming_port,
   Li_millisec,
+  Li_msg_id,
+  Li_msg_id_created,
   Li_outgoing_interface,
   Li_outgoing_port,
   Li_pid,
@@ -491,6 +489,7 @@ enum {
   Li_tls_certificate_verified,
   Li_tls_cipher,
   Li_tls_peerdn,
+  Li_tls_resumption,
   Li_tls_sni,
   Li_unknown_in_list,
 
@@ -555,9 +554,7 @@ table exim_errstrings[] in log.c */
 #ifdef SUPPORT_I18N
 # define ERRNO_UTF8_FWD      (-49)   /* target not supporting SMTPUTF8 */
 #endif
-#if defined(SUPPORT_TLS) && defined(EXPERIMENTAL_REQUIRETLS)
-# define ERRNO_REQUIRETLS    (-50)   /* REQUIRETLS session not started */
-#endif
+                               /* -50 free for re-use */
 
 /* These must be last, so all retry deferments can easily be identified */
 
@@ -848,7 +845,7 @@ enum {
 
 enum { MSG_DELIVER, MSG_FREEZE, MSG_REMOVE, MSG_THAW, MSG_ADD_RECIPIENT,
        MSG_MARK_ALL_DELIVERED, MSG_MARK_DELIVERED, MSG_EDIT_SENDER,
-       MSG_SHOW_COPY, MSG_LOAD,
+       MSG_SHOW_COPY, MSG_LOAD, MSG_SETQUEUE,
        /* These ones must be last: a test for >= MSG_SHOW_BODY is used
        to test for actions that list individual spool files. */
        MSG_SHOW_BODY, MSG_SHOW_HEADER, MSG_SHOW_LOG };
@@ -1025,12 +1022,7 @@ enum { FILTER_UNSET, FILTER_FORWARD, FILTER_EXIM, FILTER_SIEVE };
 #define OPTION_PIPE            BIT(5)
 #define OPTION_SIZE            BIT(6)
 #define OPTION_CHUNKING                BIT(7)
-#define OPTION_REQUIRETLS      BIT(8)
-#define OPTION_EARLY_PIPE      BIT(9)
-
-/* Codes for tls_requiretls requests (usually by sender) */
-
-#define REQUIRETLS_MSG         BIT(0)  /* REQUIRETLS onward use */
+#define OPTION_EARLY_PIPE      BIT(8)
 
 /* Argument for *_getc */
 
@@ -1038,10 +1030,11 @@ enum { FILTER_UNSET, FILTER_FORWARD, FILTER_EXIM, FILTER_SIEVE };
 
 /* UTF-8 chars for line-drawing */
 
-#define UTF8_DOWN_RIGHT                "\xE2\x94\x8c"
+#define UTF8_DOWN_RIGHT                "\xE2\x95\xAD"
+#define UTF8_VERT              "\xE2\x94\x82"
 #define UTF8_HORIZ             "\xE2\x94\x80"
 #define UTF8_VERT_RIGHT                "\xE2\x94\x9C"
-#define UTF8_UP_RIGHT          "\xE2\x94\x94"
+#define UTF8_UP_RIGHT          "\xE2\x95\xB0"
 #define UTF8_VERT_2DASH                "\xE2\x95\x8E"
 
 
@@ -1080,5 +1073,27 @@ should not be one active. */
 #define AUTH_ITEM_IGN64        BIT(2)
 
 
+/* Flags for tls_{in,out}_resumption */
+#define RESUME_SUPPORTED       BIT(0)
+#define RESUME_CLIENT_REQUESTED        BIT(1)
+#define RESUME_CLIENT_SUGGESTED        BIT(2)
+#define RESUME_SERVER_TICKET   BIT(3)
+#define RESUME_USED            BIT(4)
+
+#define RESUME_DECODE_STRING \
+         US"not requested or offered : 0x02 :client requested, no server ticket" \
+    ": 0x04 : 0x05 : 0x06 :client offered session, no server action" \
+    ": 0x08 :no client request: 0x0A :client requested new ticket, server provided" \
+    ": 0x0C :client offered session, not used: 0x0E :client offered session, server only provided new ticket" \
+    ": 0x10 :session resumed unasked: 0x12 :session resumed unasked" \
+    ": 0x14 : 0x15 : 0x16 :session resumed" \
+    ": 0x18 :session resumed unasked: 0x1A :session resumed unasked" \
+    ": 0x1C :session resumed: 0x1E :session resumed, also new ticket"
+
+/* Flags for string_vformat */
+#define SVFMT_EXTEND           BIT(0)
+#define SVFMT_REBUFFER         BIT(1)
+#define SVFMT_TAINT_NOCHK      BIT(2)
+
 
 /* End of macros.h */