git://git.exim.org
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
General tidying
[exim.git]
/
src
/
src
/
receive.c
diff --git
a/src/src/receive.c
b/src/src/receive.c
index 072fee9f1f27aaf4fe50541e1ee17e94d3f5ba69..34aa5d91e228b096121c34660d570e1099a69e56 100644
(file)
--- a/
src/src/receive.c
+++ b/
src/src/receive.c
@@
-2,7
+2,7
@@
* Exim - an Internet mail transport agent *
*************************************************/
* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) University of Cambridge 1995 - 201
2
*/
+/* Copyright (c) University of Cambridge 1995 - 201
4
*/
/* See the file NOTICE for conditions of use and distribution. */
/* Code for receiving a message and setting up spool files. */
/* See the file NOTICE for conditions of use and distribution. */
/* Code for receiving a message and setting up spool files. */
@@
-519,7
+519,7
@@
Arguments:
Returns: nothing
*/
Returns: nothing
*/
-#if
def EXPERIMENTAL
_PRDR
+#if
ndef DISABLE
_PRDR
static void
smtp_user_msg(uschar *code, uschar *user_msg)
{
static void
smtp_user_msg(uschar *code, uschar *user_msg)
{
@@
-984,11
+984,24
@@
Returns: nothing
*/
static void
*/
static void
-add_acl_headers(uschar *acl_name)
+add_acl_headers(
int where,
uschar *acl_name)
{
header_line *h, *next;
header_line *last_received = NULL;
{
header_line *h, *next;
header_line *last_received = NULL;
+switch(where)
+ {
+ case ACL_WHERE_DKIM:
+ case ACL_WHERE_MIME:
+ case ACL_WHERE_DATA:
+ if (cutthrough_fd >= 0 && (acl_removed_headers || acl_added_headers))
+ {
+ log_write(0, LOG_MAIN|LOG_PANIC, "Header modification in data ACLs"
+ " will not take effect on cutthrough deliveries");
+ return;
+ }
+ }
+
if (acl_removed_headers != NULL)
{
DEBUG(D_receive|D_acl) debug_printf(">>Headers removed by %s ACL:\n", acl_name);
if (acl_removed_headers != NULL)
{
DEBUG(D_receive|D_acl) debug_printf(">>Headers removed by %s ACL:\n", acl_name);
@@
-1264,7
+1277,7
@@
if (rc == OK)
}
END_MIME_ACL:
}
END_MIME_ACL:
-add_acl_headers(US"MIME");
+add_acl_headers(
ACL_WHERE_MIME,
US"MIME");
if (rc == DISCARD)
{
recipients_count = 0;
if (rc == DISCARD)
{
recipients_count = 0;
@@
-1454,7
+1467,7
@@
BOOL resents_exist = FALSE;
uschar *resent_prefix = US"";
uschar *blackholed_by = NULL;
uschar *blackhole_log_msg = US"";
uschar *resent_prefix = US"";
uschar *blackholed_by = NULL;
uschar *blackhole_log_msg = US"";
-enum {NOT_TRIED, TMP_REJ, PERM_REJ, ACCEPTED} cutthrough_done;
+enum {NOT_TRIED, TMP_REJ, PERM_REJ, ACCEPTED} cutthrough_done
= NOT_TRIED
;
flock_t lock_data;
error_block *bad_addresses = NULL;
flock_t lock_data;
error_block *bad_addresses = NULL;
@@
-2826,7
+2839,7
@@
if (cutthrough_fd >= 0)
goto TIDYUP; /* Skip to end of function */
}
received_header_gen();
goto TIDYUP; /* Skip to end of function */
}
received_header_gen();
- add_acl_headers(US"MAIL or RCPT");
+ add_acl_headers(
ACL_WHERE_RCPT,
US"MAIL or RCPT");
(void) cutthrough_headers_send();
}
(void) cutthrough_headers_send();
}
@@
-3118,7
+3131,7
@@
if (received_header->text == NULL) /* Non-cutthrough case */
/* If an ACL from any RCPT commands set up any warning headers to add, do so
now, before running the DATA ACL. */
/* If an ACL from any RCPT commands set up any warning headers to add, do so
now, before running the DATA ACL. */
- add_acl_headers(US"MAIL or RCPT");
+ add_acl_headers(
ACL_WHERE_RCPT,
US"MAIL or RCPT");
}
else
message_body_size = (fstat(data_fd, &statbuf) == 0)?
}
else
message_body_size = (fstat(data_fd, &statbuf) == 0)?
@@
-3231,7
+3244,7
@@
else
break;
}
}
break;
}
}
- add_acl_headers(US"DKIM");
+ add_acl_headers(
ACL_WHERE_DKIM,
US"DKIM");
if (rc == DISCARD)
{
recipients_count = 0;
if (rc == DISCARD)
{
recipients_count = 0;
@@
-3264,8
+3277,8
@@
else
dmarc_up = dmarc_store_data(from_header);
#endif /* EXPERIMENTAL_DMARC */
dmarc_up = dmarc_store_data(from_header);
#endif /* EXPERIMENTAL_DMARC */
-#if
def EXPERIMENTAL
_PRDR
- if (prdr_requested && recipients_count > 1 && acl_smtp_data_prdr
!= NULL
)
+#if
ndef DISABLE
_PRDR
+ if (prdr_requested && recipients_count > 1 && acl_smtp_data_prdr)
{
unsigned int c;
int all_pass = OK;
{
unsigned int c;
int all_pass = OK;
@@
-3333,7
+3346,7
@@
else
}
else
prdr_requested = FALSE;
}
else
prdr_requested = FALSE;
-#endif /*
EXPERIMENTAL
_PRDR */
+#endif /*
!DISABLE
_PRDR */
/* Check the recipients count again, as the MIME ACL might have changed
them. */
/* Check the recipients count again, as the MIME ACL might have changed
them. */
@@
-3341,7
+3354,7
@@
else
if (acl_smtp_data != NULL && recipients_count > 0)
{
rc = acl_check(ACL_WHERE_DATA, NULL, acl_smtp_data, &user_msg, &log_msg);
if (acl_smtp_data != NULL && recipients_count > 0)
{
rc = acl_check(ACL_WHERE_DATA, NULL, acl_smtp_data, &user_msg, &log_msg);
- add_acl_headers(US"DATA");
+ add_acl_headers(
ACL_WHERE_DATA,
US"DATA");
if (rc == DISCARD)
{
recipients_count = 0;
if (rc == DISCARD)
{
recipients_count = 0;
@@
-3424,7
+3437,7
@@
else
/* Does not return */
}
}
/* Does not return */
}
}
- add_acl_headers(US"non-SMTP");
+ add_acl_headers(
ACL_WHERE_NOTSMTP,
US"non-SMTP");
}
}
}
}
@@
-3726,21
+3739,20
@@
if (message_reference != NULL)
s = add_host_info_for_log(s, &size, &sptr);
#ifdef SUPPORT_TLS
s = add_host_info_for_log(s, &size, &sptr);
#ifdef SUPPORT_TLS
-if (
(log_extra_selector & LX_tls_cipher) != 0 && tls_in.cipher != NULL
)
+if (
log_extra_selector & LX_tls_cipher && tls_in.cipher
)
s = string_append(s, &size, &sptr, 2, US" X=", tls_in.cipher);
s = string_append(s, &size, &sptr, 2, US" X=", tls_in.cipher);
-if ((log_extra_selector & LX_tls_certificate_verified) != 0 &&
- tls_in.cipher != NULL)
+if (log_extra_selector & LX_tls_certificate_verified && tls_in.cipher)
s = string_append(s, &size, &sptr, 2, US" CV=",
tls_in.certificate_verified? "yes":"no");
s = string_append(s, &size, &sptr, 2, US" CV=",
tls_in.certificate_verified? "yes":"no");
-if (
(log_extra_selector & LX_tls_peerdn) != 0 && tls_in.peerdn != NULL
)
+if (
log_extra_selector & LX_tls_peerdn && tls_in.peerdn
)
s = string_append(s, &size, &sptr, 3, US" DN=\"",
string_printing(tls_in.peerdn), US"\"");
s = string_append(s, &size, &sptr, 3, US" DN=\"",
string_printing(tls_in.peerdn), US"\"");
-if (
(log_extra_selector & LX_tls_sni) != 0 && tls_in.sni != NULL
)
+if (
log_extra_selector & LX_tls_sni && tls_in.sni
)
s = string_append(s, &size, &sptr, 3, US" SNI=\"",
string_printing(tls_in.sni), US"\"");
#endif
s = string_append(s, &size, &sptr, 3, US" SNI=\"",
string_printing(tls_in.sni), US"\"");
#endif
-if (sender_host_authenticated
!= NULL
)
+if (sender_host_authenticated)
{
s = string_append(s, &size, &sptr, 2, US" A=", sender_host_authenticated);
if (authenticated_id != NULL)
{
s = string_append(s, &size, &sptr, 2, US" A=", sender_host_authenticated);
if (authenticated_id != NULL)
@@
-3751,11
+3763,16
@@
if (sender_host_authenticated != NULL)
}
}
}
}
-#if
def EXPERIMENTAL
_PRDR
+#if
ndef DISABLE
_PRDR
if (prdr_requested)
s = string_append(s, &size, &sptr, 1, US" PRDR");
#endif
if (prdr_requested)
s = string_append(s, &size, &sptr, 1, US" PRDR");
#endif
+#ifdef EXPERIMENTAL_PROXY
+if (proxy_session && log_extra_selector & LX_proxy)
+ s = string_append(s, &size, &sptr, 2, US" PRX=", proxy_host_address);
+#endif
+
sprintf(CS big_buffer, "%d", msg_size);
s = string_append(s, &size, &sptr, 2, US" S=", big_buffer);
sprintf(CS big_buffer, "%d", msg_size);
s = string_append(s, &size, &sptr, 2, US" S=", big_buffer);
@@
-3949,7
+3966,6
@@
for this message. */
XXX We do not handle queue-only, freezing, or blackholes.
*/
XXX We do not handle queue-only, freezing, or blackholes.
*/
-cutthrough_done = NOT_TRIED;
if(cutthrough_fd >= 0)
{
uschar * msg= cutthrough_finaldot(); /* Ask the target system to accept the messsage */
if(cutthrough_fd >= 0)
{
uschar * msg= cutthrough_finaldot(); /* Ask the target system to accept the messsage */
@@
-3972,11
+3988,11
@@
if(cutthrough_fd >= 0)
}
}
}
}
-if(smtp_reply == NULL
-#ifdef EXPERIMENTAL_PRDR
- || prdr_requested
+#ifndef DISABLE_PRDR
+if(!smtp_reply || prdr_requested)
+#else
+if(!smtp_reply)
#endif
#endif
- )
{
log_write(0, LOG_MAIN |
(((log_extra_selector & LX_received_recipients) != 0)? LOG_RECIPIENTS : 0) |
{
log_write(0, LOG_MAIN |
(((log_extra_selector & LX_received_recipients) != 0)? LOG_RECIPIENTS : 0) |