transport and to the smtp transport.
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.192 2005/08/02 09:24:45 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.193 2005/08/02 11:22:23 ph10 Exp $
Change log file for Exim from version 4.21
-------------------------------------------
Change log file for Exim from version 4.21
-------------------------------------------
PH/10 Named domain lists were not working if used in a queue_smtp_domains
setting.
PH/10 Named domain lists were not working if used in a queue_smtp_domains
setting.
+PH/11 Added support for the IGNOREQUOTA extension to LMTP, both to the lmtp
+ transport and to the smtp transport in LMTP mode.
+
Exim version 4.52
-----------------
Exim version 4.52
-----------------
-$Cambridge: exim/doc/doc-txt/NewStuff,v 1.59 2005/08/01 15:01:12 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/NewStuff,v 1.60 2005/08/02 11:22:23 ph10 Exp $
New Features in Exim
--------------------
New Features in Exim
--------------------
PH/03 The use of forbid_filter_existstest now also locks out the use of the
${stat: expansion item.
PH/03 The use of forbid_filter_existstest now also locks out the use of the
${stat: expansion item.
+PH/04 The IGNOREQUOTA extension to the LMTP protocol is now available in both
+ the lmtp transport and the smtp transport running in LMTP mode. In the
+ lmtp transport there is a new Boolean option called ignore_quota, and in
+ the smtp transport there is a new Boolean option called
+ lmtp_ignore_quota. If either of these options is set TRUE, the string
+ "IGNOREQUOTA" is added to RCPT commands when using the LMTP protocol,
+ provided that the server has advertised support for IGNOREQUOTA in its
+ response to the LHLO command.
+
Exim version 4.52
-----------------
Exim version 4.52
-----------------
-$Cambridge: exim/src/ACKNOWLEDGMENTS,v 1.29 2005/08/01 13:20:28 ph10 Exp $
+$Cambridge: exim/src/ACKNOWLEDGMENTS,v 1.30 2005/08/02 11:22:23 ph10 Exp $
Stephan Schulz Patch for $host_data caching error
Tony Sheen Log files with datestamped names and auto rollover
Martin Sluka Patch for exigrep to include non-message lines
Stephan Schulz Patch for $host_data caching error
Tony Sheen Log files with datestamped names and auto rollover
Martin Sluka Patch for exigrep to include non-message lines
+Adam Stephens Suggested patch for IGNOREQUOTA in LMTP
Russell Stuart Diagnosis of obscure batch multiple delivery bug
Tamas Tevesz Patch for crypt16() support
Johan Thelmen Support for the F-Secure virus scanner
Russell Stuart Diagnosis of obscure batch multiple delivery bug
Tamas Tevesz Patch for crypt16() support
Johan Thelmen Support for the F-Secure virus scanner
-/* $Cambridge: exim/src/src/deliver.c,v 1.21 2005/06/28 10:23:35 ph10 Exp $ */
+/* $Cambridge: exim/src/src/deliver.c,v 1.22 2005/08/02 11:22:24 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
/*************************************************
* Exim - an Internet mail transport agent *
handle fallback transports are figured out, this section can be put into a loop
for handling fallbacks, though the uid switching will have to be revised. */
handle fallback transports are figured out, this section can be put into a loop
for handling fallbacks, though the uid switching will have to be revised. */
+/* Precompile a regex that is used to recognize a parameter in response
+to an LHLO command, if is isn't already compiled. This may be used on both
+local and remote LMTP deliveries. */
+
+if (regex_IGNOREQUOTA == NULL) regex_IGNOREQUOTA =
+ regex_must_compile(US"\\n250[\\s\\-]IGNOREQUOTA(\\s|\\n|$)", FALSE, TRUE);
+
+/* Handle local deliveries */
+
if (addr_local != NULL)
{
DEBUG(D_deliver|D_transport)
if (addr_local != NULL)
{
DEBUG(D_deliver|D_transport)
-/* $Cambridge: exim/src/src/globals.c,v 1.31 2005/08/01 14:00:35 ph10 Exp $ */
+/* $Cambridge: exim/src/src/globals.c,v 1.32 2005/08/02 11:22:24 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
/*************************************************
* Exim - an Internet mail transport agent *
const pcre *regex_AUTH = NULL;
const pcre *regex_check_dns_names = NULL;
const pcre *regex_From = NULL;
const pcre *regex_AUTH = NULL;
const pcre *regex_check_dns_names = NULL;
const pcre *regex_From = NULL;
+const pcre *regex_IGNOREQUOTA = NULL;
const pcre *regex_PIPELINING = NULL;
const pcre *regex_SIZE = NULL;
const pcre *regex_ismsgid = NULL;
const pcre *regex_PIPELINING = NULL;
const pcre *regex_SIZE = NULL;
const pcre *regex_ismsgid = NULL;
-/* $Cambridge: exim/src/src/globals.h,v 1.22 2005/06/21 14:14:55 ph10 Exp $ */
+/* $Cambridge: exim/src/src/globals.h,v 1.23 2005/08/02 11:22:24 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
/*************************************************
* Exim - an Internet mail transport agent *
extern const pcre *regex_AUTH; /* For recognizing AUTH settings */
extern const pcre *regex_check_dns_names; /* For DNS name checking */
extern const pcre *regex_From; /* For recognizing "From_" lines */
extern const pcre *regex_AUTH; /* For recognizing AUTH settings */
extern const pcre *regex_check_dns_names; /* For DNS name checking */
extern const pcre *regex_From; /* For recognizing "From_" lines */
+extern const pcre *regex_IGNOREQUOTA; /* For recognizing IGNOREQUOTA (LMTP) */
extern const pcre *regex_PIPELINING; /* For recognizing PIPELINING */
extern const pcre *regex_SIZE; /* For recognizing SIZE settings */
extern const pcre *regex_ismsgid; /* Compiled r.e. for message it */
extern const pcre *regex_PIPELINING; /* For recognizing PIPELINING */
extern const pcre *regex_SIZE; /* For recognizing SIZE settings */
extern const pcre *regex_ismsgid; /* Compiled r.e. for message it */
-/* $Cambridge: exim/src/src/transports/lmtp.c,v 1.5 2005/06/27 14:29:44 ph10 Exp $ */
+/* $Cambridge: exim/src/src/transports/lmtp.c,v 1.6 2005/08/02 11:22:24 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
/*************************************************
* Exim - an Internet mail transport agent *
(void *)offsetof(transport_instance, batch_max) },
{ "command", opt_stringptr,
(void *)offsetof(lmtp_transport_options_block, cmd) },
(void *)offsetof(transport_instance, batch_max) },
{ "command", opt_stringptr,
(void *)offsetof(lmtp_transport_options_block, cmd) },
+ { "ignore_quota", opt_bool,
+ (void *)offsetof(lmtp_transport_options_block, ignore_quota) },
{ "socket", opt_stringptr,
(void *)offsetof(lmtp_transport_options_block, skt) },
{ "timeout", opt_time,
{ "socket", opt_stringptr,
(void *)offsetof(lmtp_transport_options_block, skt) },
{ "timeout", opt_time,
NULL, /* cmd */
NULL, /* skt */
5*60, /* timeout */
NULL, /* cmd */
NULL, /* skt */
5*60, /* timeout */
+ 0, /* options */
+ FALSE /* ignore_quota */
BOOL send_data;
BOOL yield = FALSE;
address_item *addr;
BOOL send_data;
BOOL yield = FALSE;
address_item *addr;
+uschar *igquotstr = US"";
uschar *sockname = NULL;
uschar **argv;
uschar buffer[256];
uschar *sockname = NULL;
uschar **argv;
uschar buffer[256];
if (!lmtp_read_response(out, buffer, sizeof(buffer), '2',
timeout)) goto RESPONSE_FAILED;
if (!lmtp_read_response(out, buffer, sizeof(buffer), '2',
timeout)) goto RESPONSE_FAILED;
+/* If the ignore_quota option is set, note whether the server supports the
+IGNOREQUOTA option, and if so, set an appropriate addition for RCPT. */
+
+if (ob->ignore_quota)
+ igquotstr = (pcre_exec(regex_IGNOREQUOTA, NULL, CS buffer,
+ Ustrlen(CS buffer), 0, PCRE_EOPT, NULL, 0) >= 0)? US" IGNOREQUOTA" : US"";
+
/* Now the envelope sender */
if (!lmtp_write_command(fd_in, "MAIL FROM:<%s>\r\n", return_path))
/* Now the envelope sender */
if (!lmtp_write_command(fd_in, "MAIL FROM:<%s>\r\n", return_path))
send_data = FALSE;
for (addr = addrlist; addr != NULL; addr = addr->next)
{
send_data = FALSE;
for (addr = addrlist; addr != NULL; addr = addr->next)
{
- if (!lmtp_write_command(fd_in, "RCPT TO:<%s>\r\n",
- transport_rcpt_address(addr, tblock->rcpt_include_affixes)))
+ if (!lmtp_write_command(fd_in, "RCPT TO:<%s>%s\r\n",
+ transport_rcpt_address(addr, tblock->rcpt_include_affixes), igquotstr))
goto WRITE_FAILED;
if (lmtp_read_response(out, buffer, sizeof(buffer), '2', timeout))
{
goto WRITE_FAILED;
if (lmtp_read_response(out, buffer, sizeof(buffer), '2', timeout))
{
-/* $Cambridge: exim/src/src/transports/lmtp.h,v 1.2 2005/01/04 10:00:45 ph10 Exp $ */
+/* $Cambridge: exim/src/src/transports/lmtp.h,v 1.3 2005/08/02 11:22:24 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
/*************************************************
* Exim - an Internet mail transport agent *
uschar *skt;
int timeout;
int options;
uschar *skt;
int timeout;
int options;
} lmtp_transport_options_block;
/* Data for reading the private options. */
} lmtp_transport_options_block;
/* Data for reading the private options. */
-/* $Cambridge: exim/src/src/transports/smtp.c,v 1.14 2005/08/02 09:24:45 ph10 Exp $ */
+/* $Cambridge: exim/src/src/transports/smtp.c,v 1.15 2005/08/02 11:22:24 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
/*************************************************
* Exim - an Internet mail transport agent *
(void *)offsetof(smtp_transport_options_block, interface) },
{ "keepalive", opt_bool,
(void *)offsetof(smtp_transport_options_block, keepalive) },
(void *)offsetof(smtp_transport_options_block, interface) },
{ "keepalive", opt_bool,
(void *)offsetof(smtp_transport_options_block, keepalive) },
+ { "lmtp_ignore_quota", opt_bool,
+ (void *)offsetof(smtp_transport_options_block, lmtp_ignore_quota) },
{ "max_rcpt", opt_int | opt_public,
(void *)offsetof(transport_instance, max_addresses) },
{ "multi_domain", opt_bool | opt_public,
{ "max_rcpt", opt_int | opt_public,
(void *)offsetof(transport_instance, max_addresses) },
{ "multi_domain", opt_bool | opt_public,
FALSE, /* hosts_override */
FALSE, /* hosts_randomize */
TRUE, /* keepalive */
FALSE, /* hosts_override */
FALSE, /* hosts_randomize */
TRUE, /* keepalive */
+ FALSE, /* lmtp_ignore_quota */
TRUE /* retry_include_ip_address */
#ifdef SUPPORT_TLS
,NULL, /* tls_certificate */
TRUE /* retry_include_ip_address */
#ifdef SUPPORT_TLS
,NULL, /* tls_certificate */
smtp_inblock inblock;
smtp_outblock outblock;
int max_rcpt = tblock->max_addresses;
smtp_inblock inblock;
smtp_outblock outblock;
int max_rcpt = tblock->max_addresses;
+uschar *igquotstr = US"";
uschar *local_authenticated_sender = authenticated_sender;
uschar *helo_data;
uschar *message = NULL;
uschar *local_authenticated_sender = authenticated_sender;
uschar *helo_data;
uschar *message = NULL;
ob->command_timeout)) goto RESPONSE_FAILED;
}
ob->command_timeout)) goto RESPONSE_FAILED;
}
+ /* Set IGNOREQUOTA if the response to LHLO specifies support and the
+ lmtp_ignore_quota option was set. */
+
+ igquotstr = (lmtp && ob->lmtp_ignore_quota &&
+ pcre_exec(regex_IGNOREQUOTA, NULL, CS buffer, Ustrlen(CS buffer), 0,
+ PCRE_EOPT, NULL, 0) >= 0)? US" IGNOREQUOTA" : US"";
+
/* Set tls_offered if the response to EHLO specifies support for STARTTLS. */
#ifdef SUPPORT_TLS
/* Set tls_offered if the response to EHLO specifies support for STARTTLS. */
#ifdef SUPPORT_TLS
int require_auth;
uschar *fail_reason = US"server did not advertise AUTH support";
int require_auth;
uschar *fail_reason = US"server did not advertise AUTH support";
+ /* Set for IGNOREQUOTA if the response to LHLO specifies support and the
+ lmtp_ignore_quota option was set. */
+
+ igquotstr = (lmtp && ob->lmtp_ignore_quota &&
+ pcre_exec(regex_IGNOREQUOTA, NULL, CS buffer, Ustrlen(CS buffer), 0,
+ PCRE_EOPT, NULL, 0) >= 0)? US" IGNOREQUOTA" : US"";
+
/* If the response to EHLO specified support for the SIZE parameter, note
this, provided size_addition is non-negative. */
/* If the response to EHLO specified support for the SIZE parameter, note
this, provided size_addition is non-negative. */
yield as OK, because this error can often mean that there is a problem with
just one address, so we don't want to delay the host. */
yield as OK, because this error can often mean that there is a problem with
just one address, so we don't want to delay the host. */
- count = smtp_write_command(&outblock, no_flush, "RCPT TO:<%s>\r\n",
- transport_rcpt_address(addr, tblock->rcpt_include_affixes));
+ count = smtp_write_command(&outblock, no_flush, "RCPT TO:<%s>%s\r\n",
+ transport_rcpt_address(addr, tblock->rcpt_include_affixes), igquotstr);
if (count < 0) goto SEND_FAILED;
if (count > 0)
{
if (count < 0) goto SEND_FAILED;
if (count > 0)
{
-/* $Cambridge: exim/src/src/transports/smtp.h,v 1.5 2005/03/08 15:32:02 tom Exp $ */
+/* $Cambridge: exim/src/src/transports/smtp.h,v 1.6 2005/08/02 11:22:24 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
/*************************************************
* Exim - an Internet mail transport agent *
BOOL hosts_override;
BOOL hosts_randomize;
BOOL keepalive;
BOOL hosts_override;
BOOL hosts_randomize;
BOOL keepalive;
+ BOOL lmtp_ignore_quota;
BOOL retry_include_ip_address;
#ifdef SUPPORT_TLS
uschar *tls_certificate;
BOOL retry_include_ip_address;
#ifdef SUPPORT_TLS
uschar *tls_certificate;