Fix to EXPN not working under TLS. Fixes bug #744
[exim.git] / src / src / macros.h
index 7b317e42d3fc25200adc19fdaf9cc7622e438bfd..aa4acd1c848726145e089ebbad51e39ff3347857 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/macros.h,v 1.30 2007/01/15 15:59:22 ph10 Exp $ */
+/* $Cambridge: exim/src/src/macros.h,v 1.37 2008/09/29 11:41:07 nm4 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -15,6 +15,12 @@ a string as a text string. This is sometimes useful for debugging output. */
 #define mac_expanded_string(s) mac_string(s)
 
 
+/* When running in the test harness, the load average is fudged. */
+
+#define OS_GETLOADAVG() \
+  (running_in_test_harness? (test_harness_load_avg += 10) : os_getloadavg())
+
+
 /* The address_item structure has a word full of 1-bit flags. These macros
 manipulate them. */
 
@@ -97,6 +103,10 @@ don't make the file descriptors two-way. */
 #define DEBUG(x)      if ((debug_selector & (x)) != 0)
 #define HDEBUG(x)     if (host_checking || (debug_selector & (x)) != 0)
 
+/* The default From: text for DSNs */
+
+#define DEFAULT_DSN_FROM "Mail Delivery System <Mailer-Daemon@$qualify_domain>"
+
 /* The size of the vector for saving/restoring address expansion pointers while
 verifying. This has to be explicit because it is referenced in more than one
 source module. */
@@ -378,21 +388,22 @@ set all the bits in a multi-word selector. */
 #define LX_incoming_interface          0x80000020
 #define LX_incoming_port               0x80000040
 #define LX_outgoing_port               0x80000080
-#define LX_queue_time                  0x80000100
-#define LX_queue_time_overall          0x80000200
-#define LX_received_sender             0x80000400
-#define LX_received_recipients         0x80000800
-#define LX_rejected_header             0x80001000
-#define LX_return_path_on_delivery     0x80002000
-#define LX_sender_on_delivery          0x80004000
-#define LX_sender_verify_fail          0x80008000
-#define LX_smtp_confirmation           0x80010000
-#define LX_smtp_no_mail                0x80020000
-#define LX_subject                     0x80040000
-#define LX_tls_certificate_verified    0x80080000
-#define LX_tls_cipher                  0x80100000
-#define LX_tls_peerdn                  0x80200000
-#define LX_unknown_in_list             0x80400000
+#define LX_pid                         0x80000100
+#define LX_queue_time                  0x80000200
+#define LX_queue_time_overall          0x80000400
+#define LX_received_sender             0x80000800
+#define LX_received_recipients         0x80001000
+#define LX_rejected_header             0x80002000
+#define LX_return_path_on_delivery     0x80004000
+#define LX_sender_on_delivery          0x80008000
+#define LX_sender_verify_fail          0x80010000
+#define LX_smtp_confirmation           0x80020000
+#define LX_smtp_no_mail                0x80040000
+#define LX_subject                     0x80080000
+#define LX_tls_certificate_verified    0x80100000
+#define LX_tls_cipher                  0x80200000
+#define LX_tls_peerdn                  0x80400000
+#define LX_unknown_in_list             0x80800000
 
 #define L_default     (L_connection_reject        | \
                        L_delay_delivery           | \
@@ -727,7 +738,10 @@ 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_BODY, MSG_SHOW_HEADER, MSG_SHOW_LOG, MSG_LOAD };
+       MSG_SHOW_COPY, MSG_LOAD,
+       /* 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 };
 
 /* Returns from the spool_read_header() function */
 
@@ -749,13 +763,14 @@ enum {
 #define topt_no_body            0x040  /* Omit body */
 #define topt_escape_headers     0x080  /* Apply escape check to headers */
 
-/* Codes for the host_find_failed option. */
+/* Codes for the host_find_failed and host_all_ignored options. */
 
 #define hff_freeze   0
 #define hff_defer    1
 #define hff_pass     2
 #define hff_decline  3
 #define hff_fail     4
+#define hff_ignore   5
 
 /* Router information flags */
 
@@ -794,6 +809,7 @@ enum { ACL_WHERE_RCPT,       /* Some controls are for RCPT only */
        ACL_WHERE_HELO,
        ACL_WHERE_MAILAUTH,
        ACL_WHERE_NOTSMTP_START,
+       ACL_WHERE_NOTQUIT,
        ACL_WHERE_QUIT,
        ACL_WHERE_STARTTLS,
        ACL_WHERE_VRFY
@@ -824,4 +840,19 @@ explicit port number. */
 
 enum { FILTER_UNSET, FILTER_FORWARD, FILTER_EXIM, FILTER_SIEVE };
 
+/* C99 defines va_copy() for copying a varargs ap so that it can be reused,
+since on some platforms multiple iterations of va_start()/va_end() are not
+supported.  But va_copy() is itself not so portable.  Hack around it.
+See portability notes at: http://unixpapa.com/incnote/variadic.html */
+
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+/* va_copy exists for us or the system is broken and we need OS hacks */
+#elif defined(va_copy)
+/* trust it; hope that va_copy is always a macro when defined */
+#elif !defined(va_copy) && defined(__va_copy)
+#define va_copy(dest, src)  __va_copy(dest, src)
+#else
+#define va_copy(dest, src) do { memcpy(dest, src, sizeof(va_list) } while (0)
+#endif
+
 /* End of macros.h */