Integrated SPF Best Guess. Fixes: bug #521
[exim.git] / src / src / macros.h
index 1deab7ad80469f1f367b2e202b031f45621a1337..161a6a181399ddf9b2fd81baf5c28b666236201d 100644 (file)
@@ -1,10 +1,10 @@
-/* $Cambridge: exim/src/src/macros.h,v 1.22 2006/02/07 11:19:00 ph10 Exp $ */
+/* $Cambridge: exim/src/src/macros.h,v 1.36 2007/08/22 10:10:23 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) University of Cambridge 1995 - 2006 */
+/* Copyright (c) University of Cambridge 1995 - 2007 */
 /* See the file NOTICE for conditions of use and distribution. */
 
 
@@ -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. */
@@ -127,6 +137,10 @@ enough to hold all the headers from a normal kind of message. */
 
 #define LOG_BUFFER_SIZE 8192
 
+/* The size of the circular buffer that remembers recent SMTP commands */
+
+#define SMTP_HBUFF_SIZE 20
+
 /* 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. */
@@ -374,19 +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_smtp_confirmation           0x80008000
-#define LX_subject                     0x80010000
-#define LX_tls_certificate_verified    0x80020000
-#define LX_tls_cipher                  0x80040000
-#define LX_tls_peerdn                  0x80080000
-#define LX_unknown_in_list             0x80100000
+#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           | \
@@ -401,6 +418,7 @@ set all the bits in a multi-word selector. */
 
 #define LX_default   ((LX_acl_warn_skipped        | \
                        LX_rejected_header         | \
+                       LX_sender_verify_fail      | \
                        LX_tls_cipher) & 0x7fffffff)
 
 /* Private error numbers for delivery failures, set negative so as not
@@ -450,6 +468,8 @@ to conflict with system errno values. */
 #define ERRNO_AUTHFAIL       (-42)   /* When required by client */
 #define ERRNO_CONNECTTIMEOUT (-43)   /* Used internally in smtp transport */
 #define ERRNO_RCPT4XX        (-44)   /* RCPT gave 4xx error */
+#define ERRNO_MAIL4XX        (-45)   /* MAIL gave 4xx error */
+#define ERRNO_DATA4XX        (-46)   /* DATA gave 4xx error */
 
 /* These must be last, so all retry deferments can easily be identified */
 
@@ -504,6 +524,7 @@ router, which were chosen to represent the standard situation for users'
 #define RDO_REWRITE      0x00020000  /* Rewrite generated addresses */
 #define RDO_EXIM_FILTER  0x00040000  /* Forbid Exim filters */
 #define RDO_SIEVE_FILTER 0x00080000  /* Forbid Sieve filters */
+#define RDO_PREPEND_HOME 0x00100000  /* Prepend $home to relative paths in Exim filter save commands */
 
 /* This is the set that apply to expansions in filters */
 
@@ -517,7 +538,7 @@ automated, but I haven't bothered. Keep this list in step with the above! */
 enum { RDON_BLACKHOLE, RDON_DEFER, RDON_EACCES, RDON_ENOTDIR, RDON_EXISTS,
   RDON_FAIL, RDON_FILTER, RDON_FREEZE, RDON_INCLUDE, RDON_LOG, RDON_LOOKUP,
   RDON_PERL, RDON_READFILE, RDON_READSOCK, RDON_RUN, RDON_DLFUNC, RDON_REALLOG,
-  RDON_REWRITE, RDON_EXIM_FILTER, RDON_SIEVE_FILTER };
+  RDON_REWRITE, RDON_EXIM_FILTER, RDON_SIEVE_FILTER, RDON_PREPEND_HOME };
 
 /* Results of filter or forward file processing. Some are only from a filter;
 some are only from a forward file. */
@@ -621,7 +642,8 @@ enum { v_none, v_sender, v_recipient, v_expn };
 
 #define ccache_unknown         0       /* test hasn't been done */
 #define ccache_accept          1
-#define ccache_reject          2
+#define ccache_reject          2       /* All rejections except */
+#define ccache_reject_mfnull   3       /* MAIL FROM:<> was rejected */
 
 /* Options for lookup functions */
 
@@ -685,6 +707,15 @@ local_scan.h */
 #define LOG_CONFIG_FOR  (256+128) /* Add " for" instead of ":\n" */
 #define LOG_CONFIG_IN   (512+128) /* Add " in line x[ of file y]" */
 
+/* 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". */
+
+enum { SCH_NONE, SCH_AUTH, SCH_DATA, SCH_EHLO, SCH_ETRN, SCH_EXPN, SCH_HELO,
+       SCH_HELP, SCH_MAIL, SCH_NOOP, SCH_QUIT, SCH_RCPT, SCH_RSET, SCH_STARTTLS,
+       SCH_VRFY };
+
 /* Returns from host_find_by{name,dns}() */
 
 enum {
@@ -707,6 +738,9 @@ 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,
+       /* 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 */
@@ -729,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 */
 
@@ -773,6 +808,8 @@ enum { ACL_WHERE_RCPT,       /* Some controls are for RCPT only */
        ACL_WHERE_EXPN,
        ACL_WHERE_HELO,
        ACL_WHERE_MAILAUTH,
+       ACL_WHERE_NOTSMTP_START,
+       ACL_WHERE_NOTQUIT,
        ACL_WHERE_QUIT,
        ACL_WHERE_STARTTLS,
        ACL_WHERE_VRFY