# for you by the OS-specific configuration. If Exim compiles without any
# problems, you probably do not have to worry about the DBM library. If you
# do want or need to change it, you should first read the discussion in the
-# file doc/dbm.discuss.txt, which also contains instructions for testing Exim's
-# interface to the DBM library.
+# file doc/doc-txt/dbm.discuss.txt, which also contains instructions for testing
+# Exim's interface to the DBM library.
# In Local/Makefiles blank lines and lines starting with # are ignored. It is
# also permitted to use the # character to add a comment to a setting, for
#if defined(USE_TDB)
+# if defined(USE_DB) || defined(USE_GDBM)
+# error USE_TDB conflict with alternate definition
+# endif
+
/* ************************* tdb interface ************************ */
/*XXX https://manpages.org/tdb/3 mentions concurrent writes.
Could we lose the file lock? */
#elif defined USE_DB
+# if defined(USE_TDB) || defined(USE_GDBM)
+# error USE_DB conflict with alternate definition
+# endif
+
# include <db.h>
/* 1.x did no locking
#elif defined USE_GDBM
/*XXX TODO: exim's locfile not needed */
+# if defined(USE_TDB) || defined(USE_DB)
+# error USE_GDBM conflict with alternate definition
+# endif
+
# include <gdbm.h>
/* Basic DB type */
exim_datum_free(EXIM_DATUM * d)
{ free(d->dptr); }
-/* size limit */
+/* size limit. GDBM is int-max limited, but we want to be less silly */
# define EXIM_DB_RLIMIT 150
/* If none of USE_DB, USG_GDBM, or USE_TDB are set, the default is the NDBM
-interface */
+interface (which seems to be a wrapper for GDBM) */
/********************* ndbm interface definitions **********************/
# define EXIM_DB_RLIMIT 150
-#endif /* USE_GDBM */
+#endif /* !USE_GDBM */
? US string_printing(rti->message)
: US"unknown error";
message_length = Ustrlen(message);
- if (message_length > EXIM_DB_RLIMIT) message_length = EXIM_DB_RLIMIT;
+ if (message_length > EXIM_DB_RLIMIT)
+ {
+ DEBUG(D_retry)
+ debug_printf_indent("truncating message from %u to %u bytes\n",
+ message_length, EXIM_DB_RLIMIT);
+ message_length = EXIM_DB_RLIMIT;
+ }
/* Read a retry record from the database or construct a new one.
Ignore an old one if it is too old since it was last updated. */
&& ob->create_file == create_belowhome)
if (is_tainted(path))
{
- DEBUG(D_transport) debug_printf("de-tainting path '%s'\n", path);
+ DEBUG(D_transport) debug_printf("below-home: de-tainting path '%s'\n", path);
path = string_copy_taint(path, GET_UNTAINTED);
}
if (is_tainted(path))
if (ob->create_file == create_belowhome)
{
- DEBUG(D_transport) debug_printf("de-tainting path '%s'\n", path);
+ DEBUG(D_transport) debug_printf("below-home: de-tainting path '%s'\n", path);
path = string_copy_taint(path, GET_UNTAINTED);
}
else
# gnutls version variances
next if /^Error in the pull function./;
+ # Retry DB record gets truncated when TESTDIR is a long string
+ s/T:.*\(MTA-imposed quota exceeded while writing to\K.*$/ <elided>)/;
+
# optional IDN2 variant conversions. Accept either IDN1 or IDN2
s/conversion strasse.de/conversion xn--strae-oqa.de/;
s/conversion: german.xn--strae-oqa.de/conversion: german.straße.de/;
# lookup dbmjz
+# NB: the reference DB file is a Berkeley DB;
+# builds for other hints-DB interface will fail
#
exim -be
${lookup{testid:test.example.invalid:userPassword}dbmjz{DIR/aux-fixed/TESTNUM.testsasldb}{$value}fail}
# lookup dbmnz
+# NB: the reference DB file is a Berkeley DB;
+# builds for other hints-DB interface will fail
#
exim -be '[${lookup{test}dbmnz{DIR/aux-fixed/TESTNUM.emptydbmnzlookup}}]'
****
message_suffix=\n
maildir_use_size_file=no
locking by lockfile fcntl
-de-tainting path 'TESTSUITE/test-mail/userx'
+below-home: de-tainting path 'TESTSUITE/test-mail/userx'
lock name: TESTSUITE/test-mail/userx.lock
hitch name: TESTSUITE/test-mail/userx.lock.test.ex.dddddddd.pppppppp
lock file created
message_suffix=\n
maildir_use_size_file=no
locking by lockfile fcntl
-de-tainting path 'TESTSUITE/test-mail/2'
+below-home: de-tainting path 'TESTSUITE/test-mail/2'
lock name: TESTSUITE/test-mail/2.lock
hitch name: TESTSUITE/test-mail/2.lock.test.ex.dddddddd.pppppppp
lock file created
message_suffix=\n
maildir_use_size_file=no
locking by lockfile fcntl
-de-tainting path 'TESTSUITE/test-mail/2'
+below-home: de-tainting path 'TESTSUITE/test-mail/2'
lock name: TESTSUITE/test-mail/2.lock
hitch name: TESTSUITE/test-mail/2.lock.test.ex.dddddddd.pppppppp
lock file created
message_suffix=\n
maildir_use_size_file=no
locking by lockfile fcntl
-de-tainting path 'TESTSUITE/test-mail/userx'
+below-home: de-tainting path 'TESTSUITE/test-mail/userx'
lock name: TESTSUITE/test-mail/userx.lock
hitch name: TESTSUITE/test-mail/userx.lock.test.ex.dddddddd.pppppppp
lock file created
message_suffix=\n
maildir_use_size_file=no
locking by lockfile fcntl
-de-tainting path 'TESTSUITE/test-mail/userx'
+below-home: de-tainting path 'TESTSUITE/test-mail/userx'
lock name: TESTSUITE/test-mail/userx.lock
hitch name: TESTSUITE/test-mail/userx.lock.test.ex.dddddddd.pppppppp
lock file created
message_suffix=\n
maildir_use_size_file=no
locking by lockfile fcntl
-de-tainting path 'TESTSUITE/test-mail/userx'
+below-home: de-tainting path 'TESTSUITE/test-mail/userx'
lock name: TESTSUITE/test-mail/userx.lock
hitch name: TESTSUITE/test-mail/userx.lock.test.ex.dddddddd.pppppppp
lock file created
message_suffix=\n
maildir_use_size_file=no
locking by lockfile fcntl
-de-tainting path 'TESTSUITE/test-mail/sender'
+below-home: de-tainting path 'TESTSUITE/test-mail/sender'
lock name: TESTSUITE/test-mail/sender.lock
hitch name: TESTSUITE/test-mail/sender.lock.test.ex.dddddddd.pppppppp
lock file created
message_suffix=\n
maildir_use_size_file=no
locking by lockfile fcntl
-de-tainting path 'TESTSUITE/test-mail/userx'
+below-home: de-tainting path 'TESTSUITE/test-mail/userx'
lock name: TESTSUITE/test-mail/userx.lock
hitch name: TESTSUITE/test-mail/userx.lock.test.ex.dddddddd.pppppppp
lock file created
message_suffix=\n
maildir_use_size_file=no
locking by lockfile fcntl
-de-tainting path 'TESTSUITE/test-mail/userx'
+below-home: de-tainting path 'TESTSUITE/test-mail/userx'
lock name: TESTSUITE/test-mail/userx.lock
hitch name: TESTSUITE/test-mail/userx.lock.test.ex.dddddddd.pppppppp
lock file created
message_prefix=null
message_suffix=null
maildir_use_size_file=yes
-de-tainting path 'TESTSUITE/test-mail/nofile'
+below-home: de-tainting path 'TESTSUITE/test-mail/nofile'
ensuring maildir directories exist in TESTSUITE/test-mail/nofile
created directory TESTSUITE/test-mail/nofile
created directory TESTSUITE/test-mail/nofile/tmp
message_prefix=null
message_suffix=null
maildir_use_size_file=yes
-de-tainting path 'TESTSUITE/test-mail/userx'
+below-home: de-tainting path 'TESTSUITE/test-mail/userx'
ensuring maildir directories exist in TESTSUITE/test-mail/userx
created directory TESTSUITE/test-mail/userx/tmp
created directory TESTSUITE/test-mail/userx/new
message_prefix=null
message_suffix=null
maildir_use_size_file=yes
-de-tainting path 'TESTSUITE/test-mail/userx'
+below-home: de-tainting path 'TESTSUITE/test-mail/userx'
ensuring maildir directories exist in TESTSUITE/test-mail/userx
compiling RE '^(?:cur|new|\..*)$'
using regex for maildir directory selection: ^(?:cur|new|\..*)$
message_prefix=null
message_suffix=null
maildir_use_size_file=yes
-de-tainting path 'TESTSUITE/test-mail/userx'
+below-home: de-tainting path 'TESTSUITE/test-mail/userx'
ensuring maildir directories exist in TESTSUITE/test-mail/userx
compiling RE '^(?:cur|new|\..*)$'
using regex for maildir directory selection: ^(?:cur|new|\..*)$
message_prefix=null
message_suffix=null
maildir_use_size_file=yes
-de-tainting path 'TESTSUITE/test-mail/userx'
+below-home: de-tainting path 'TESTSUITE/test-mail/userx'
ensuring maildir directories exist in TESTSUITE/test-mail/userx
created directory TESTSUITE/test-mail/userx
created directory TESTSUITE/test-mail/userx/tmp
message_prefix=null
message_suffix=null
maildir_use_size_file=no
-de-tainting path 'TESTSUITE/test-mail/userx'
+below-home: de-tainting path 'TESTSUITE/test-mail/userx'
ensuring maildir directories exist in TESTSUITE/test-mail/userx
created directory TESTSUITE/test-mail/userx
created directory TESTSUITE/test-mail/userx/tmp
message_prefix=null
message_suffix=null
maildir_use_size_file=no
-de-tainting path 'TESTSUITE/test-mail/userx'
+below-home: de-tainting path 'TESTSUITE/test-mail/userx'
ensuring maildir directories exist in TESTSUITE/test-mail/userx
quota checks on directory TESTSUITE/test-mail/userx
MUNGED: the check_dir_size lines have been sorted to ensure consistency
+++++++++++++++++++++++++++
- T:userx@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/userx)
+ T:userx@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to <elided>)
first failed = time last try = time2 next try = time2 + 600
+++++++++++++++++++++++++++
- T:test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/notuser)
+ T:test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to <elided>)
first failed = time last try = time2 next try = time2 + 1200
- T:userx@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/userx)
+ T:userx@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to <elided>)
first failed = time last try = time2 next try = time2 + 600
Message 10HmaX-000000005vi-0000 has been removed
Message 10HmbA-000000005vi-0000 has been removed
+++++++++++++++++++++++++++
- T:a@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/a)
+ T:a@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to <elided>)
first failed = time last try = time2 next try = time2 + 20
-rw------- 1 CALLER CALLER 0 May 10 2002 TESTSUITE/test-mail/a
+++++++++++++++++++++++++++
- T:a@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/a)
+ T:a@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to <elided>)
first failed = time last try = time2 next try = time2 + 0 *
- T:CALLER@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/CALLER)
+ T:CALLER@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to <elided>)
first failed = time last try = time2 next try = time2 + 20
+++++++++++++++++++++++++++
- T:a@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/a)
+ T:a@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to <elided>)
first failed = time last try = time2 next try = time2 + 0 *
- T:CALLER@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/CALLER)
+ T:CALLER@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to <elided>)
first failed = time last try = time2 next try = time2 + 20