# HG changeset patch # User Heiko Schlittermann (I24) # Date 1301666908 -7200 # Node ID cacfba0189d063c12b8d304032f941b51b6bfaaa # Parent b0076c5c7eecc320a1bdedae13adcf765cd3e2e4 implemented /no_check for quota = and quota_file_count = transport options diff -r b0076c5c7eec -r cacfba0189d0 build.Makefile --- a/build.Makefile Tue Mar 08 11:11:21 2011 +0100 +++ b/build.Makefile Fri Apr 01 16:08:28 2011 +0200 @@ -1,9 +1,9 @@ # HG changeset patch -# Parent 5c737d4329e1327fbc2aa16a5227d5ae5bc7ee03 +# Parent 000bec5641ad0bb85fec4120a5a609ea15b6fdd6 -diff -r 5c737d4329e1 Makefile ---- a/Makefile Fri Feb 18 18:22:42 2011 +0100 -+++ b/Makefile Fri Feb 18 21:40:42 2011 +0100 +diff -r 000bec5641ad Makefile +--- a/Makefile Fri Apr 01 14:06:49 2011 +0200 ++++ b/Makefile Fri Apr 01 14:06:50 2011 +0200 @@ -68,7 +68,8 @@ # The installation commands are kept in a separate script, which expects # to be run from inside the build directory. @@ -14,9 +14,9 @@ build=$(build) $(SHELL) ../scripts/exim_install $(INSTALL_ARG) # Tidy-up targets -diff -r 5c737d4329e1 OS/Makefile-Base ---- a/OS/Makefile-Base Fri Feb 18 18:22:42 2011 +0100 -+++ b/OS/Makefile-Base Fri Feb 18 21:40:42 2011 +0100 +diff -r 000bec5641ad OS/Makefile-Base +--- a/OS/Makefile-Base Fri Apr 01 14:06:49 2011 +0200 ++++ b/OS/Makefile-Base Fri Apr 01 14:06:50 2011 +0200 @@ -640,43 +640,43 @@ # The lookups library. diff -r b0076c5c7eec -r cacfba0189d0 dbg.maildirsize --- a/dbg.maildirsize Tue Mar 08 11:11:21 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,264 +0,0 @@ -# HG changeset patch -# Parent 74c82038542f0fe3e9d80b15ecffc5e2598ef52a - -diff -r 74c82038542f src/exim.c ---- a/src/exim.c Sat Feb 19 13:30:33 2011 +0100 -+++ b/src/exim.c Sat Feb 19 13:38:06 2011 +0100 -@@ -2206,7 +2206,9 @@ - else - { - unsigned int selector = D_default; -+ unsigned int extra_selector = 0; - debug_selector = 0; -+ debug_extra_selector = 0; - debug_file = NULL; - if (*argrest == 'd') - { -@@ -2214,9 +2216,10 @@ - argrest++; - } - if (*argrest != 0) -- decode_bits(&selector, NULL, D_memory, 0, argrest, debug_options, -+ decode_bits(&selector, &extra_selector, D_memory, 0, argrest, debug_options, - debug_options_count, US"debug", 0); - debug_selector = selector; -+ debug_extra_selector = extra_selector; - } - break; - -@@ -3184,7 +3187,7 @@ - child processes. It should, of course, be 2 for stderr. Also, force the daemon - to run in the foreground. */ - --if (debug_selector != 0) -+if (debug_selector|debug_extra_selector != 0) - { - debug_file = stderr; - debug_fd = fileno(debug_file); -diff -r 74c82038542f src/globals.c ---- a/src/globals.c Sat Feb 19 13:30:33 2011 +0100 -+++ b/src/globals.c Sat Feb 19 13:38:06 2011 +0100 -@@ -449,6 +449,7 @@ - { US"load", D_load }, - { US"local_scan", D_local_scan }, - { US"lookup", D_lookup }, -+ { US"maildirsize", DX_maildirsize }, - { US"memory", D_memory }, - { US"pid", D_pid }, - { US"process_info", D_process_info }, -@@ -466,6 +467,7 @@ - }; - int debug_options_count = sizeof(debug_options)/sizeof(bit_table); - unsigned int debug_selector = 0; -+unsigned int debug_extra_selector = 0; - int delay_warning[DELAY_WARNING_SIZE] = { DELAY_WARNING_SIZE, 1, 24*60*60 }; - uschar *delay_warning_condition= - US"${if or {" -diff -r 74c82038542f src/local_scan.h ---- a/src/local_scan.h Sat Feb 19 13:30:33 2011 +0100 -+++ b/src/local_scan.h Sat Feb 19 13:38:06 2011 +0100 -@@ -139,6 +139,7 @@ - /* Global variables that are documented as visible in the function. */ - - extern unsigned int debug_selector; /* Debugging bits */ -+extern unsigned int debug_extra_selector; /* Debugging bits */ - - extern int body_linecount; /* Line count in body */ - extern int body_zerocount; /* Binary zero count in body */ -diff -r 74c82038542f src/log.c ---- a/src/log.c Sat Feb 19 13:30:33 2011 +0100 -+++ b/src/log.c Sat Feb 19 13:38:06 2011 +0100 -@@ -1303,7 +1303,7 @@ - debug_selector = D_default; - if (opts) - { -- decode_bits(&debug_selector, NULL, D_memory, 0, opts, -+ decode_bits(&debug_selector, &debug_extra_selector, D_memory, 0, opts, - debug_options, debug_options_count, US"debug", DEBUG_FROM_CONFIG); - } - -diff -r 74c82038542f src/macros.h ---- a/src/macros.h Sat Feb 19 13:30:33 2011 +0100 -+++ b/src/macros.h Sat Feb 19 13:38:06 2011 +0100 -@@ -100,7 +100,9 @@ - - /* Debugging control */ - --#define DEBUG(x) if ((debug_selector & (x)) != 0) -+//#define DEBUG(x) if (((debug_selector & (x)) || (debug_extra_selector & (x))) != 0) -+#define DEBUG(x) if(x & 0x80000000 ? (debug_extra_selector & ((x) & 0x0fffffff)) : -+ - #define HDEBUG(x) if (host_checking || (debug_selector & (x)) != 0) - - /* The default From: text for DSNs */ -@@ -327,6 +329,8 @@ - #define D_uid 0x20000000 - #define D_verify 0x40000000 - -+#define DX_maildirsize 0x80000001 -+ - /* The D_all value must always have all bits set, as it is recognized specially - by the function that decodes debug and log selectors. This is to enable it to - set all the bits in a multi-word selector. Debug doesn't use this yet, but we -diff -r 74c82038542f src/transports/tf_maildir.c ---- a/src/transports/tf_maildir.c Sat Feb 19 13:30:33 2011 +0100 -+++ b/src/transports/tf_maildir.c Sat Feb 19 13:38:06 2011 +0100 -@@ -215,7 +215,7 @@ - len = Ustrlen(buffer); - (void)lseek(fd, 0, SEEK_END); - (void)write(fd, buffer, len); --DEBUG(D_transport) -+DEBUG(D_transport|DX_maildirsize) - debug_printf("added '%.*s' to maildirsize file\n", len-1, buffer); - } - -@@ -292,7 +292,7 @@ - - if (Ustat(buffer, &statbuf) < 0) - { -- DEBUG(D_transport) -+ DEBUG(D_transport|DX_maildirsize) - debug_printf("maildir_compute_size: stat error %d for %s: %s\n", errno, - buffer, strerror(errno)); - continue; -@@ -300,7 +300,7 @@ - - if ((statbuf.st_mode & S_IFMT) != S_IFDIR) - { -- DEBUG(D_transport) -+ DEBUG(D_transport|DX_maildirsize) - debug_printf("skipping %s/%s: not a directory\n", path, name); - continue; - } -@@ -327,7 +327,7 @@ - } - - closedir(dir); --DEBUG(D_transport) -+DEBUG(D_transport|DX_maildirsize) - { - if (timestamp_only) - debug_printf("maildir_compute_size (timestamp_only): %ld\n", -@@ -391,7 +391,7 @@ - - filename = string_sprintf("%s/maildirsize", path); - --DEBUG(D_transport) debug_printf("looking for maildirsize in %s\n", path); -+DEBUG(D_transport|DX_maildirsize) debug_printf("looking for maildirsize in %s\n", path); - fd = Uopen(filename, O_CREAT|O_RDWR|O_APPEND, ob->mode ? ob->mode : 0600); - if (fd < 0) return -1; - -@@ -420,7 +420,7 @@ - count = read(fd, buffer, sizeof(buffer)); - if (count >= sizeof(buffer)) - { -- DEBUG(D_transport) -+ DEBUG(D_transport|DX_maildirsize) - debug_printf("maildirsize file too big (%d): recalculating\n", count); - goto RECALCULATE; - } -@@ -428,7 +428,7 @@ - - /* Read the quota parameters from the first line of the data. */ - --DEBUG(D_transport) -+DEBUG(D_transport|DX_maildirsize) - debug_printf("reading quota parameters from maildirsize data\n"); - - for (;;) -@@ -443,7 +443,7 @@ - else if (*endptr == 'C') cached_quota_filecount = (int)n; - if (!isalpha(*endptr++)) - { -- DEBUG(D_transport) -+ DEBUG(D_transport|DX_maildirsize) - debug_printf("quota parameter number not followed by letter in " - "\"%.*s\": recalculating maildirsize\n", (int)(endptr - buffer), - buffer); -@@ -452,7 +452,7 @@ - if (*endptr == '\n' || *endptr == 0) break; - if (*endptr++ != ',') - { -- DEBUG(D_transport) -+ DEBUG(D_transport|DX_maildirsize) - debug_printf("quota parameter not followed by comma in " - "\"%.*s\": recalculating maildirsize\n", (int)(endptr - buffer), - buffer); -@@ -466,7 +466,7 @@ - if (cached_quota != ob->quota_value || - cached_quota_filecount != ob->quota_filecount_value) - { -- DEBUG(D_transport) -+ DEBUG(D_transport|DX_maildirsize) - debug_printf("cached quota is out of date: recalculating\n" - " quota=" OFF_T_FMT " cached_quota=" OFF_T_FMT " filecount_quota=%d " - "cached_quota_filecount=%d\n", ob->quota_value, -@@ -477,7 +477,7 @@ - /* Quota values agree; parse the rest of the data to get the sizes. At this - stage, *endptr points either to 0 or to '\n'. */ - --DEBUG(D_transport) -+DEBUG(D_transport|DX_maildirsize) - debug_printf("computing maildir size from maildirsize data\n"); - - while (*endptr++ == '\n') -@@ -502,7 +502,7 @@ - { - if (size < 0 || filecount < 0) - { -- DEBUG(D_transport) debug_printf("negative value in maildirsize " -+ DEBUG(D_transport|DX_maildirsize) debug_printf("negative value in maildirsize " - "(size=" OFF_T_FMT " count=%d): recalculating\n", size, filecount); - goto RECALCULATE; - } -@@ -517,7 +517,7 @@ - struct stat statbuf; - if (linecount > 1) - { -- DEBUG(D_transport) debug_printf("over quota and maildirsize has " -+ DEBUG(D_transport|DX_maildirsize) debug_printf("over quota and maildirsize has " - "more than 1 entry: recalculating\n"); - goto RECALCULATE; - } -@@ -526,7 +526,7 @@ - - if (time(NULL) - statbuf.st_mtime > 15*60) - { -- DEBUG(D_transport) debug_printf("over quota and maildirsize is older " -+ DEBUG(D_transport|DX_maildirsize) debug_printf("over quota and maildirsize is older " - "than 15 minutes: recalculating\n"); - goto RECALCULATE; - } -@@ -543,7 +543,7 @@ - uschar *tempname; - struct timeval tv; - -- DEBUG(D_transport) -+ DEBUG(D_transport|DX_maildirsize) - { - uschar *p = endptr; - while (p > buffer && p[-1] != '\n') p--; -@@ -587,12 +587,12 @@ - /* If any of the directories have been modified since the last timestamp we - saw, we have to junk this maildirsize file. */ - -- DEBUG(D_transport) debug_printf("checking subdirectory timestamps\n"); -+ DEBUG(D_transport|DX_maildirsize) debug_printf("checking subdirectory timestamps\n"); - new_latest = 0; - (void)maildir_compute_size(path, NULL, &new_latest , NULL, dir_regex, TRUE); - if (new_latest > old_latest) - { -- DEBUG(D_transport) debug_printf("abandoning maildirsize because of " -+ DEBUG(D_transport|DX_maildirsize) debug_printf("abandoning maildirsize because of " - "a later subdirectory modification\n"); - (void)Uunlink(filename); - (void)close(fd); -@@ -604,7 +604,7 @@ - lock.l_type = F_UNLCK; - if (fd > 0) fcntl(fd, F_SETLKW, &lock); - --DEBUG(D_transport) debug_printf("returning maildir size=" OFF_T_FMT -+DEBUG(D_transport|DX_maildirsize) debug_printf("returning maildir size=" OFF_T_FMT - " filecount=%d\n", size, filecount); - *returned_size = size; - *returned_filecount = filecount; diff -r b0076c5c7eec -r cacfba0189d0 doc.maildir_tag --- a/doc.maildir_tag Tue Mar 08 11:11:21 2011 +0100 +++ b/doc.maildir_tag Fri Apr 01 16:08:28 2011 +0200 @@ -1,9 +1,9 @@ # HG changeset patch -# Parent 4acd755ecda3351741f615164fd0e3c972d9578f +# Parent 2d381cd1efafa5ef9eeafb57be6b6b170ba3dd78 -diff --git a/doc/spec.txt b/doc/spec.txt ---- a/doc/spec.txt -+++ b/doc/spec.txt +diff -r 2d381cd1efaf doc/spec.txt +--- a/doc/spec.txt Fri Apr 01 12:04:37 2011 +0200 ++++ b/doc/spec.txt Fri Apr 01 14:06:49 2011 +0200 @@ -18409,6 +18409,8 @@ file name (even though maildir_tag puts it there) because maildir MUAs sometimes add other information onto the ends of message file names. diff -r b0076c5c7eec -r cacfba0189d0 series --- a/series Tue Mar 08 11:11:21 2011 +0100 +++ b/series Fri Apr 01 16:08:28 2011 +0200 @@ -4,5 +4,4 @@ src.maildir_use_size_file #+4.74 src.fixed_ensure_maildirsize #+4.74 src.lock_maildirsize #+4.74 -dbg.maildirsize #+test src.quota-ignore #+test diff -r b0076c5c7eec -r cacfba0189d0 src.bail-out-on-BOM --- a/src.bail-out-on-BOM Tue Mar 08 11:11:21 2011 +0100 +++ b/src.bail-out-on-BOM Fri Apr 01 16:08:28 2011 +0200 @@ -1,9 +1,9 @@ # HG changeset patch -# Parent fbf873801b0238076818528063f142b791a9b0cb +# Parent 7913ffa1e4db075588a06853221ab36e9d186006 -diff -r fbf873801b02 src/readconf.c ---- a/src/readconf.c Sun Feb 13 12:15:23 2011 +0100 -+++ b/src/readconf.c Sun Feb 13 14:05:44 2011 +0100 +diff -r 7913ffa1e4db src/readconf.c +--- a/src/readconf.c Fri Apr 01 14:06:50 2011 +0200 ++++ b/src/readconf.c Fri Apr 01 14:06:50 2011 +0200 @@ -2906,6 +2906,11 @@ while ((s = get_config_line()) != NULL) diff -r b0076c5c7eec -r cacfba0189d0 src.fixed_ensure_maildirsize --- a/src.fixed_ensure_maildirsize Tue Mar 08 11:11:21 2011 +0100 +++ b/src.fixed_ensure_maildirsize Fri Apr 01 16:08:28 2011 +0200 @@ -1,9 +1,9 @@ # HG changeset patch -# Parent e46329bd93b89ef7f880988f37d6ad1b7fbe11c3 +# Parent ecfe290806fda71edb54f4280f4e831e8c2cec7a -diff -r e46329bd93b8 src/transports/tf_maildir.c ---- a/src/transports/tf_maildir.c Thu Feb 24 17:19:04 2011 +0100 -+++ b/src/transports/tf_maildir.c Thu Feb 24 20:12:03 2011 +0100 +diff -r ecfe290806fd src/transports/tf_maildir.c +--- a/src/transports/tf_maildir.c Fri Apr 01 14:06:51 2011 +0200 ++++ b/src/transports/tf_maildir.c Fri Apr 01 14:06:51 2011 +0200 @@ -584,7 +584,7 @@ "a later subdirectory modification\n"); (void)Uunlink(filename); diff -r b0076c5c7eec -r cacfba0189d0 src.lock_maildirsize --- a/src.lock_maildirsize Tue Mar 08 11:11:21 2011 +0100 +++ b/src.lock_maildirsize Fri Apr 01 16:08:28 2011 +0200 @@ -1,9 +1,9 @@ # HG changeset patch -# Parent 64ab3b6277037986519edb924069a75ba339de2a +# Parent 3cbad740cf65b90cb75768c7784ac22a8ee7622d -diff -r 64ab3b627703 src/transports/appendfile.c ---- a/src/transports/appendfile.c Thu Feb 24 20:29:56 2011 +0100 -+++ b/src/transports/appendfile.c Sun Feb 27 21:51:22 2011 +0100 +diff -r 3cbad740cf65 src/transports/appendfile.c +--- a/src/transports/appendfile.c Fri Apr 01 14:06:51 2011 +0200 ++++ b/src/transports/appendfile.c Fri Apr 01 14:06:51 2011 +0200 @@ -13,6 +13,7 @@ #ifdef SUPPORT_MAILDIR @@ -127,9 +127,9 @@ #ifdef SUPPORT_MBX if (mbx_lockfd >= 0) -diff -r 64ab3b627703 src/transports/appendfile.h ---- a/src/transports/appendfile.h Thu Feb 24 20:29:56 2011 +0100 -+++ b/src/transports/appendfile.h Sun Feb 27 21:51:22 2011 +0100 +diff -r 3cbad740cf65 src/transports/appendfile.h +--- a/src/transports/appendfile.h Fri Apr 01 14:06:51 2011 +0200 ++++ b/src/transports/appendfile.h Fri Apr 01 14:06:51 2011 +0200 @@ -95,5 +95,8 @@ /* Function that is shared with tf_maildir.c */ @@ -139,9 +139,9 @@ + /* End of transports/appendfile.h */ -diff -r 64ab3b627703 src/transports/tf_maildir.c ---- a/src/transports/tf_maildir.c Thu Feb 24 20:29:56 2011 +0100 -+++ b/src/transports/tf_maildir.c Sun Feb 27 21:51:22 2011 +0100 +diff -r 3cbad740cf65 src/transports/tf_maildir.c +--- a/src/transports/tf_maildir.c Fri Apr 01 14:06:51 2011 +0200 ++++ b/src/transports/tf_maildir.c Fri Apr 01 14:06:51 2011 +0200 @@ -367,13 +367,16 @@ Returns: >=0 a file descriptor for an open maildirsize file @@ -248,9 +248,9 @@ DEBUG(D_transport) debug_printf("returning maildir size=" OFF_T_FMT " filecount=%d\n", size, filecount); *returned_size = size; -diff -r 64ab3b627703 src/transports/tf_maildir.h ---- a/src/transports/tf_maildir.h Thu Feb 24 20:29:56 2011 +0100 -+++ b/src/transports/tf_maildir.h Sun Feb 27 21:51:22 2011 +0100 +diff -r 3cbad740cf65 src/transports/tf_maildir.h +--- a/src/transports/tf_maildir.h Fri Apr 01 14:06:51 2011 +0200 ++++ b/src/transports/tf_maildir.h Fri Apr 01 14:06:51 2011 +0200 @@ -16,7 +16,7 @@ uschar *); extern int maildir_ensure_sizefile(uschar *, diff -r b0076c5c7eec -r cacfba0189d0 src.maildir_use_size_file --- a/src.maildir_use_size_file Tue Mar 08 11:11:21 2011 +0100 +++ b/src.maildir_use_size_file Fri Apr 01 16:08:28 2011 +0200 @@ -1,9 +1,9 @@ # HG changeset patch -# Parent 3feef89a1d78d3e67eef48fb1c3bd9949e919166 +# Parent 552ee33e550b77bb1567594e9e816087a79f0c7e -diff -r 3feef89a1d78 doc/spec.txt ---- a/doc/spec.txt Sat Feb 12 14:34:41 2011 +0100 -+++ b/doc/spec.txt Sat Feb 12 14:44:47 2011 +0100 +diff -r 552ee33e550b doc/spec.txt +--- a/doc/spec.txt Fri Apr 01 14:06:50 2011 +0200 ++++ b/doc/spec.txt Fri Apr 01 14:06:51 2011 +0200 @@ -18179,11 +18179,12 @@ This option applies only to deliveries in maildir format, and is described in section 26.5 below. @@ -22,9 +22,9 @@ maildirsize file in a maildir if one does not exist, taking the quota from the quota option of the transport. If quota is unset, the value is zero. See maildir_quota_directory_regex above and section 26.5 below for further details. -diff -r 3feef89a1d78 src/transports/appendfile.c ---- a/src/transports/appendfile.c Sat Feb 12 14:34:41 2011 +0100 -+++ b/src/transports/appendfile.c Sat Feb 12 14:44:47 2011 +0100 +diff -r 552ee33e550b src/transports/appendfile.c +--- a/src/transports/appendfile.c Fri Apr 01 14:06:50 2011 +0200 ++++ b/src/transports/appendfile.c Fri Apr 01 14:06:51 2011 +0200 @@ -38,6 +38,10 @@ opt_public flag. */ @@ -64,9 +64,9 @@ /* Loop for quota, quota_filecount, quota_warn_threshold, mailbox_size, mailbox_filecount */ -diff -r 3feef89a1d78 src/transports/appendfile.h ---- a/src/transports/appendfile.h Sat Feb 12 14:34:41 2011 +0100 -+++ b/src/transports/appendfile.h Sat Feb 12 14:44:47 2011 +0100 +diff -r 552ee33e550b src/transports/appendfile.h +--- a/src/transports/appendfile.h Fri Apr 01 14:06:50 2011 +0200 ++++ b/src/transports/appendfile.h Fri Apr 01 14:06:51 2011 +0200 @@ -23,6 +23,7 @@ uschar *quota_warn_threshold; uschar *mailbox_size_string; diff -r b0076c5c7eec -r cacfba0189d0 src.quota-ignore --- a/src.quota-ignore Tue Mar 08 11:11:21 2011 +0100 +++ b/src.quota-ignore Fri Apr 01 16:08:28 2011 +0200 @@ -1,19 +1,33 @@ # HG changeset patch -# Parent 717fd3d2296015e18687e4b3ecb259f7ded5e15f +# Parent 525ee4a1a637802b655f286de8cd9c737025ed37 -diff -r 717fd3d22960 src/transports/appendfile.c ---- a/src/transports/appendfile.c Sun Feb 13 14:05:44 2011 +0100 -+++ b/src/transports/appendfile.c Tue Feb 15 11:18:53 2011 +0100 -@@ -31,6 +31,8 @@ - #define THRESHOLD_CHECK (ob->quota_warn_threshold_value > 0 && \ - (!ob->quota_warn_threshold_is_percent || ob->quota_value > 0)) +diff -r 525ee4a1a637 doc/spec.txt +--- a/doc/spec.txt Fri Apr 01 14:06:59 2011 +0200 ++++ b/doc/spec.txt Fri Apr 01 16:08:04 2011 +0200 +@@ -18340,6 +18340,9 @@ + large file support (Linux and FreeBSD have this), mailboxes larger than 2G can + be handled. + ++If there is "/no_check" appended, then all processing is done as usual, but the ++over quota condition is not checked. ++ + Note: A value of zero is interpreted as "no quota". -+#define QUOTA_CHECK (ob->quota_value > 0 && !ob->quota_no_check) -+ + The expansion happens while Exim is running as root, before it changes uid for +@@ -18378,6 +18381,9 @@ + failure causes delivery to be deferred. A value of zero is interpreted as "no + quota". - /* Options specific to the appendfile transport. They must be in alphabetic - order (note that "_" comes before the lower case letters). Some of them are -@@ -236,7 +238,9 @@ ++if there is "/no_check" appended, then all processing is done as usual, but ++the over quota condition is not checked. ++ + +--------------------------------------------------------------+ + |quota_is_inclusive|Use: appendfile|Type: boolean|Default: true| + +--------------------------------------------------------------+ +diff -r 525ee4a1a637 src/transports/appendfile.c +--- a/src/transports/appendfile.c Fri Apr 01 14:06:59 2011 +0200 ++++ b/src/transports/appendfile.c Fri Apr 01 16:08:04 2011 +0200 +@@ -237,7 +237,9 @@ FALSE, /* mailstore_format */ FALSE, /* mbx_format */ FALSE, /* quota_warn_threshold_is_percent */ @@ -23,16 +37,16 @@ + FALSE /* quota_filecount_no_check */ }; + void hs12_lock(int fd, int type, const char* msg) +@@ -312,6 +314,7 @@ + for (i = 0; i < 5; i++) + { + double d; ++ int no_check = 0; + uschar *which = NULL; -@@ -270,6 +274,7 @@ - (appendfile_transport_options_block *)(tblock->options_block); - uschar *q = ob->quota; - double default_value = 0.0; -+int no_check = 0; - int i; - - addrlist = addrlist; /* Keep picky compilers happy */ -@@ -323,6 +328,15 @@ + if (q == NULL) d = default_value; else +@@ -348,12 +351,21 @@ rest++; } @@ -42,13 +56,20 @@ + if (i < 2 && Ustrstr(rest, "/no_check") == rest) + { + no_check = 1; -+ rest += strlen("/no_check"); ++ rest += sizeof("/no_check") - 1; + } + while (isspace(*rest)) rest++; if (*rest != 0) -@@ -340,12 +354,14 @@ + { + *errmsg = string_sprintf("Malformed value \"%s\" (expansion of \"%s\") " +- "in %s transport", s, q, tblock->name); ++ "in %s transport [%s]", s, q, tblock->name); + return FAIL; + } + } +@@ -365,12 +377,14 @@ case 0: if (d >= 2.0*1024.0*1024.0*1024.0 && sizeof(off_t) <= 4) which = US"quota"; ob->quota_value = (off_t)d; @@ -63,7 +84,7 @@ q = ob->quota_warn_threshold; break; -@@ -1382,10 +1398,12 @@ +@@ -1406,10 +1420,12 @@ DEBUG(D_transport) { debug_printf("appendfile: mode=%o notify_comsat=%d quota=" OFF_T_FMT @@ -72,22 +93,41 @@ " %s=%s format=%s\n message_prefix=%s\n message_suffix=%s\n " "maildir_use_size_file=%s\n", mode, ob->notify_comsat, ob->quota_value, -+ ob->quota_no_check? " (no_check)" : "" ++ ob->quota_no_check? " (no_check)" : "", ob->quota_warn_threshold_value, ob->quota_warn_threshold_is_percent? "%" : "", isdirectory? "directory" : "file", -@@ -2274,7 +2292,7 @@ - create the file. When maildir support is not compiled, - ob->maildir_use_size_file is always FALSE. */ - -- if (ob->quota_value > 0 || THRESHOLD_CHECK || ob->maildir_use_size_file) -+ if (QUOTA_CHECK || THRESHOLD_CHECK || ob->maildir_use_size_file) +@@ -2771,15 +2787,23 @@ + debug_printf(" file count quota = %d count = %d\n", + ob->quota_filecount_value, mailbox_filecount); + } +- if (mailbox_size + (ob->quota_is_inclusive? message_size:0) > ob->quota_value) ++ DEBUG(D_transport) { ++ if (ob->quota_no_check) ++ debug_printf("not checking quota (/no_check seen)\n"); ++ if (ob->quota_filecount_no_check) ++ debug_printf("not checking quota filecount (/no_check seen)\n"); ++ } ++ if (!ob->quota_no_check ++ && mailbox_size + (ob->quota_is_inclusive? message_size:0) > ob->quota_value) { - const uschar *error; - int offset; -diff -r 717fd3d22960 src/transports/appendfile.h ---- a/src/transports/appendfile.h Sun Feb 13 14:05:44 2011 +0100 -+++ b/src/transports/appendfile.h Tue Feb 15 11:18:53 2011 +0100 + DEBUG(D_transport) debug_printf("mailbox quota exceeded\n"); + yield = DEFER; + errno = ERRNO_EXIMQUOTA; + } +- else if (ob->quota_filecount_value > 0 && +- mailbox_filecount + (ob->quota_is_inclusive ? 1:0) > +- ob->quota_filecount_value) ++ else if (!ob->quota_filecount_no_check ++ && ob->quota_filecount_value > 0 ++ && mailbox_filecount + (ob->quota_is_inclusive ? 1:0) > ++ ob->quota_filecount_value) + { + DEBUG(D_transport) debug_printf("mailbox file count quota exceeded\n"); + yield = DEFER; +diff -r 525ee4a1a637 src/transports/appendfile.h +--- a/src/transports/appendfile.h Fri Apr 01 14:06:59 2011 +0200 ++++ b/src/transports/appendfile.h Fri Apr 01 16:08:04 2011 +0200 @@ -72,6 +72,8 @@ BOOL mbx_format; BOOL quota_warn_threshold_is_percent;