X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/447d236c3a15a89d18789de568ae974677f7aaf4..7cd171b76e5bd3cb825c2a8720bc1fe4ad9b37e0:/src/src/structs.h diff --git a/src/src/structs.h b/src/src/structs.h index 645dfc25c..ea23cb6ad 100644 --- a/src/src/structs.h +++ b/src/src/structs.h @@ -1,10 +1,8 @@ -/* $Cambridge: exim/src/src/structs.h,v 1.5 2005/04/28 13:06:32 ph10 Exp $ */ - /************************************************* * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2005 */ +/* Copyright (c) University of Cambridge 1995 - 2014 */ /* See the file NOTICE for conditions of use and distribution. */ @@ -57,17 +55,19 @@ 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 */ - uschar *address; /* IP address in text form */ + const uschar *name; /* Host name */ + const uschar *address; /* IP address in text form */ int port; /* port value in host order (if SRV lookup) */ int mx; /* MX value if found via MX records */ int sort_key; /* MX*1000 plus random "fraction" */ 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; /* ) */ @@ -145,6 +148,7 @@ typedef struct transport_instance { uschar *home_dir; /* ) Used only for local transports */ uschar *current_dir; /* ) */ /**************************************/ + uschar *expand_multi_domain; /* ) */ BOOL multi_domain; /* ) */ BOOL overrides_hosts; /* ) Used only for remote transports */ int max_addresses; /* ) */ @@ -184,6 +188,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_EVENT + uschar *event_action; /* String to expand on notable events */ +#endif } transport_instance; @@ -211,6 +218,11 @@ typedef struct transport_info { +typedef struct { + uschar *request; + uschar *require; +} dnssec_domains; + /* Structure for holding information about the configured routers. */ typedef struct router_instance { @@ -279,6 +291,7 @@ typedef struct router_instance { BOOL verify_sender; /* Use this router when verifying a sender */ BOOL uid_set; /* Flag to indicate uid is set */ BOOL unseen; /* If TRUE carry on, even after success */ + BOOL dsn_lasthop; /* If TRUE, this router is a DSN endpoint */ int self_code; /* Encoded version of "self" */ uid_t uid; /* Fixed uid value */ @@ -288,6 +301,8 @@ typedef struct router_instance { transport_instance *transport; /* Transport block (when found) */ struct router_instance *pass_router; /* Actual router for passed address */ struct router_instance *redirect_router; /* Actual router for generated address */ + + dnssec_domains dnssec; } router_instance; @@ -307,7 +322,7 @@ typedef struct router_info { router_instance *, struct address_item *, struct passwd *, - BOOL, + int, struct address_item **, struct address_item **, struct address_item **, @@ -320,34 +335,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 @@ -360,10 +348,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 */ @@ -392,6 +383,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; @@ -469,6 +462,15 @@ 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 + #ifdef EXPERIMENTAL_INTERNATIONAL + BOOL utf8_msg:1; /* requires SMTPUTF8 processing */ + BOOL utf8_downcvt:1; /* mandatory downconvert on delivery */ + BOOL utf8_downcvt_maybe:1; /* optional downconvert on delivery */ + #endif } address_item_propagated; /* Bits for the flags field below */ @@ -499,6 +501,17 @@ typedef struct address_item_propagated { #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 */ +#ifndef DISABLE_PRDR +# define af_prdr_used 0x08000000 /* delivery used SMTP PRDR */ +#endif +#define af_force_command 0x10000000 /* force_command in pipe transport */ +#ifdef EXPERIMENTAL_DANE +# define af_dane_verified 0x20000000 /* TLS cert verify done with DANE */ +#endif +#ifdef EXPERIMENTAL_INTERNATIONAL +# define af_utf8_downcvt 0x40000000 /* downconvert was done for delivery */ +#endif /* These flags must be propagated when a child is created */ @@ -532,7 +545,7 @@ typedef struct address_item { uschar *local_part; /* points to cc or lc version */ uschar *prefix; /* stripped prefix of local part */ uschar *suffix; /* stripped suffix of local part */ - uschar *domain; /* working domain (lower cased) */ + const uschar *domain; /* working domain (lower cased) */ uschar *address_retry_key; /* retry key including full address */ uschar *domain_retry_key; /* retry key for domain only */ @@ -550,9 +563,20 @@ 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 */ + + uschar *dsn_orcpt; /* DSN orcpt value */ + int dsn_flags; /* DSN flags */ + int dsn_aware; /* DSN aware flag */ + uid_t uid; /* uid for transporting */ gid_t gid; /* gid for transporting */ @@ -572,7 +596,7 @@ typedef struct address_item { /* ( also */ /* ( contains verify rc in sender verify cache */ short int transport_return; /* result of delivery attempt */ - address_item_propagated p; /* fields that are propagated to children */ + address_item_propagated prop; /* fields that are propagated to children */ } address_item; /* The table of header names consists of items of this type */ @@ -588,7 +612,7 @@ typedef struct { typedef struct error_block { struct error_block *next; - uschar *text1; + const uschar *text1; uschar *text2; } error_block; @@ -741,9 +765,9 @@ typedef struct redirect_block { /* Structure for passing arguments to check_host() */ typedef struct check_host_block { - uschar *host_name; - uschar *host_address; - uschar *host_ipv4; + const uschar *host_name; + const uschar *host_address; + const uschar *host_ipv4; BOOL negative; } check_host_block; @@ -759,7 +783,7 @@ typedef struct namedlist_cacheblock { /* Structure for holding data for an entry in a named list */ typedef struct namedlist_block { - uschar *string; /* the list string */ + const uschar *string; /* the list string */ namedlist_cacheblock *cache_data; /* cached domain_data or localpart_data */ int number; /* the number of the list for caching */ } namedlist_block; @@ -772,7 +796,7 @@ typedef struct acl_condition_block { int type; union { BOOL negated; - int varnumber; + uschar *varname; } u; } acl_condition_block; @@ -782,4 +806,7 @@ typedef struct acl_block { int verb; } acl_block; +/* smtp transport calc outbound_ip */ +typedef BOOL (*oicf) (uschar *message_id, void *data); + /* End of structs.h */