Merge branch 'master' of ssh://git.exim.org/home/git/exim
[exim.git] / src / src / structs.h
index 45358276650de5a6febb68c2bc776340d83df466..989653e30c60494691aa4618ea9f456b7d4bb9a8 100644 (file)
@@ -1,10 +1,8 @@
-/* $Cambridge: exim/src/src/structs.h,v 1.1 2004/10/07 10:39:01 ph10 Exp $ */
-
 /*************************************************
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) University of Cambridge 1995 - 2004 */
+/* Copyright (c) University of Cambridge 1995 - 2014 */
 /* See the file NOTICE for conditions of use and distribution. */
 
 
@@ -57,6 +55,8 @@ typedef struct ugid_block {
 but also used when checking lists of hosts and when transporting. Looking up
 host addresses is done using this structure. */
 
+typedef enum {DS_UNK=-1, DS_NO, DS_YES} dnssec_status_t;
+
 typedef struct host_item {
   struct host_item *next;
   uschar *name;                   /* Host name */
@@ -67,7 +67,7 @@ typedef struct host_item {
   int     status;                 /* Usable, unusable, or unknown */
   int     why;                    /* Why host is unusable */
   int     last_try;               /* Time of last try if known */
-  BOOL    update_waiting;         /* Turned off if wait db not to be updated */
+  dnssec_status_t dnssec;
 } host_item;
 
 /* Chain of rewrite rules, read from the rewrite config, or parsed from the
@@ -89,6 +89,7 @@ typedef struct transport_feedback {
   uschar *port;
   uschar *protocol;
   uschar *hosts;
+  uschar *helo_data;
   BOOL   hosts_override;
   BOOL   hosts_randomize;
   BOOL   gethostbyname;
@@ -138,6 +139,8 @@ typedef struct transport_instance {
     struct transport_instance *,
     struct address_item *,
     struct transport_feedback *,  /* For passing back config data */
+    uid_t,                        /* The uid that will be used */
+    gid_t,                        /* The gid that will be used */
     uschar **);                   /* For an error message */
                                   /**************************************/
   int     batch_max;              /* )                                  */
@@ -184,6 +187,9 @@ typedef struct transport_instance {
   BOOL    log_fail_output;
   BOOL    log_defer_output;
   BOOL    retry_use_local_part;   /* Defaults true for local, false for remote */
+#ifdef EXPERIMENTAL_TPDA
+  uschar  *tpda_delivery_action;  /* String to expand on success */
+#endif
 } transport_instance;
 
 
@@ -221,6 +227,9 @@ typedef struct router_instance {
   uschar *driver_name;            /* Must be first */
 
   uschar *address_data;           /* Arbitrary data */
+#ifdef EXPERIMENTAL_BRIGHTMAIL
+  uschar *bmi_rule;               /* Brightmail AntiSpam rule checking */
+#endif
   uschar *cannot_route_message;   /* Used when routing fails */
   uschar *condition;              /* General condition */
   uschar *current_directory;      /* For use during delivery */
@@ -249,6 +258,11 @@ typedef struct router_instance {
   uschar *transport_name;         /* Transport name */
 
   BOOL    address_test;           /* Use this router when testing addresses */
+#ifdef EXPERIMENTAL_BRIGHTMAIL
+  BOOL    bmi_deliver_alternate;  /* TRUE => BMI said that message should be delivered to alternate location */
+  BOOL    bmi_deliver_default;    /* TRUE => BMI said that message should be delivered to default location */
+  BOOL    bmi_dont_deliver;       /* TRUE => BMI said that message should not be delivered at all */
+#endif
   BOOL    expn;                   /* Use this router when processing EXPN */
   BOOL    caseful_local_part;     /* TRUE => don't lowercase */
   BOOL    check_local_user;       /* TRUE => check local user */
@@ -299,7 +313,7 @@ typedef struct router_info {
     router_instance *,
     struct address_item *,
     struct passwd *,
-    BOOL,
+    int,
     struct address_item **,
     struct address_item **,
     struct address_item **,
@@ -312,34 +326,7 @@ typedef struct router_info {
 
 /* Structure for holding information about a lookup type. */
 
-typedef struct lookup_info {
-  uschar *name;                   /* e.g. "lsearch" */
-  int type;                       /* query/singlekey/abs-file */
-  void *(*open)(                  /* open function */
-    uschar *,                     /* file name for those that have one */
-    uschar **);                   /* for error message */
-  BOOL (*check)(                  /* file checking function */
-    void *,                       /* handle */
-    uschar *,                     /* file name */
-    int,                          /* modemask for file checking */
-    uid_t *,                      /* owners for file checking */
-    gid_t *,                      /* owngroups for file checking */
-    uschar **);                   /* for error messages */
-  int (*find)(                    /* find function */
-    void *,                       /* handle */
-    uschar *,                     /* file name or NULL */
-    uschar *,                     /* key or query */
-    int,                          /* length of key or query */
-    uschar **,                    /* for returning answer */
-    uschar **,                    /* for error message */
-    BOOL *);                      /* to request cache cleanup */
-  void (*close)(                  /* close function */
-    void *);                      /* handle */
-  void (*tidy)(void);             /* tidy function */
-  uschar *(*quote)(               /* quoting function */
-    uschar *,                     /* string to quote */
-    uschar *);                    /* additional data from quote name */
-} lookup_info;
+#include "lookupapi.h"
 
 
 /* Structure for holding information about the configured authentication
@@ -352,10 +339,13 @@ typedef struct auth_instance {
   void   *options_block;          /* Pointer to private options */
   uschar *driver_name;            /* Must be first */
   uschar *advertise_condition;    /* Are we going to advertise this?*/
+  uschar *client_condition;       /* Should the client try this? */
   uschar *public_name;            /* Advertised name */
-  uschar *set_id;                 /* String to set as authenticated id */
+  uschar *set_id;                 /* String to set when server as authenticated id */
+  uschar *set_client_id;          /* String to set when client as client_authenticated id */
   uschar *mail_auth_condition;    /* Condition for AUTH on MAIL command */
   uschar *server_debug_string;    /* Debugging output */
+  uschar *server_condition;       /* Authorization condition */
   BOOL    client;                 /* TRUE if client option(s) set */
   BOOL    server;                 /* TRUE if server options(s) set */
   BOOL    advertised;             /* Set TRUE when advertised */
@@ -384,6 +374,8 @@ typedef struct auth_info {
     int,                          /* command timeout */
     uschar *,                     /* buffer for reading response */
     int);                         /* sizeof buffer */
+  void (*version_report)(         /* diagnostic version reporting */
+    FILE *);                      /* I/O stream to print to */
 } auth_info;
 
 
@@ -461,6 +453,10 @@ typedef struct address_item_propagated {
   uschar *errors_address;         /* where to send errors (NULL => sender) */
   header_line *extra_headers;     /* additional headers */
   uschar *remove_headers;         /* list of those to remove */
+
+  #ifdef EXPERIMENTAL_SRS
+  uschar *srs_sender;             /* Change return path when delivering */
+  #endif
 } address_item_propagated;
 
 /* Bits for the flags field below */
@@ -490,6 +486,12 @@ typedef struct address_item_propagated {
 #define af_verify_callout      0x00400000 /* for cached sender verify: callout was specified */
 #define af_include_affixes     0x00800000 /* delivered with affixes in RCPT */
 #define af_cert_verified       0x01000000 /* delivered with verified TLS cert */
+#define af_pass_message        0x02000000 /* pass message in bounces */
+#define af_bad_reply           0x04000000 /* filter could not generate autoreply */
+#ifdef EXPERIMENTAL_PRDR
+# define af_prdr_used          0x08000000 /* delivery used SMTP PRDR */
+#endif
+#define af_force_command       0x10000000 /* force_command in pipe transport */
 
 /* These flags must be propagated when a child is created */
 
@@ -541,9 +543,16 @@ typedef struct address_item {
 
   #ifdef SUPPORT_TLS
   uschar *cipher;                 /* Cipher used for transport */
+  void   *ourcert;                /* Certificate offered to peer, binary */
+  void   *peercert;               /* Certificate from peer, binary */
   uschar *peerdn;                 /* DN of server's certificate */
+  int    ocsp;                   /* OCSP status of peer cert */
   #endif
 
+  uschar *authenticator;         /* auth driver name used by transport */
+  uschar *auth_id;               /* auth "login" name used by transport */
+  uschar *auth_sndr;             /* AUTH arg to SMTP MAIL, used by transport */
+
   uid_t   uid;                    /* uid for transporting */
   gid_t   gid;                    /* gid for transporting */
 
@@ -763,7 +772,7 @@ typedef struct acl_condition_block {
   int type;
   union {
     BOOL negated;
-    int varnumber;
+    uschar *varname;
   } u;
 } acl_condition_block;