Hintsdb: fix build config phase for sqlite master github/master
authorJeremy Harris <jgh146exb@wizmail.org>
Sun, 9 Jun 2024 15:08:38 +0000 (16:08 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Sun, 9 Jun 2024 15:08:38 +0000 (16:08 +0100)
262 files changed:
doc/doc-docbook/spec.xfpt
doc/doc-txt/ChangeLog
doc/doc-txt/NewStuff
doc/doc-txt/experimental-spec.txt
doc/doc-txt/id-wellknown.txt [new file with mode: 0644]
src/OS/Makefile-Base
src/OS/os.h-FreeBSD
src/OS/os.h-Linux
src/exim_monitor/em_globals.c
src/exim_monitor/em_hdr.h
src/exim_monitor/em_log.c
src/exim_monitor/em_queue.c
src/exim_monitor/em_version.c
src/scripts/MakeLinks
src/src/EDITME
src/src/acl.c
src/src/arc.c
src/src/auths/cram_md5.c
src/src/auths/dovecot.c
src/src/auths/external.c
src/src/auths/get_data.c
src/src/auths/get_no64_data.c
src/src/auths/plaintext.c
src/src/auths/spa.c
src/src/auths/tls.c
src/src/auths/xtextencode.c
src/src/buildconfig.c
src/src/config.h.defaults
src/src/daemon.c
src/src/dbfn.c
src/src/dbfunctions.h
src/src/deliver.c
src/src/directory.c
src/src/dkim.c
src/src/dkim_transport.c
src/src/dmarc.c
src/src/dns.c
src/src/exim.c
src/src/exim.h
src/src/exim_dbmbuild.c
src/src/exim_dbutil.c
src/src/exinext.src
src/src/expand.c
src/src/filter.c
src/src/filtertest.c
src/src/functions.h
src/src/globals.c
src/src/globals.h
src/src/hintsdb.h
src/src/hintsdb_structs.h
src/src/host.c
src/src/local_scan.h
src/src/log.c
src/src/lookups/dbmdb.c
src/src/lookups/dnsdb.c
src/src/lookups/dsearch.c
src/src/lookups/ldap.c
src/src/lookups/lsearch.c
src/src/lookups/oracle.c
src/src/lookups/redis.c
src/src/lookups/sqlite.c
src/src/macro_predef.c
src/src/macros.h
src/src/malware.c
src/src/match.c
src/src/moan.c
src/src/os.c
src/src/parse.c
src/src/pdkim/pdkim.c
src/src/proxy.c
src/src/queue.c
src/src/rda.c
src/src/readconf.c
src/src/regex.c
src/src/retry.c
src/src/rewrite.c
src/src/rfc2047.c
src/src/route.c
src/src/routers/accept.c
src/src/routers/dnslookup.c
src/src/routers/ipliteral.c
src/src/routers/iplookup.c
src/src/routers/manualroute.c
src/src/routers/queryprogram.c
src/src/routers/redirect.c
src/src/routers/rf_expand_data.c
src/src/routers/rf_functions.h
src/src/routers/rf_get_errors_address.c
src/src/routers/rf_get_transport.c
src/src/search.c
src/src/smtp_in.c
src/src/smtp_out.c
src/src/spf.c
src/src/spf.h
src/src/spool_in.c
src/src/spool_out.c
src/src/store.c
src/src/string.c
src/src/structs.h
src/src/tls-gnu.c
src/src/tls-openssl.c
src/src/tls.c
src/src/transport.c
src/src/transports/appendfile.c
src/src/transports/autoreply.c
src/src/transports/lmtp.c
src/src/transports/pipe.c
src/src/transports/queuefile.c
src/src/transports/smtp.c
src/src/transports/smtp.h
src/src/transports/smtp_socks.c
src/src/tree.c
src/src/verify.c
src/src/xclient.c
src/util/mailtest [new file with mode: 0755]
test/aux-fixed/2500.dir/..subdir/regfile [new file with mode: 0644]
test/aux-fixed/4040/acme-response [new file with mode: 0644]
test/aux-fixed/4040/sub/acme-response [new file with mode: 0644]
test/confs/0637 [new file with mode: 0644]
test/confs/4040 [new file with mode: 0644]
test/log/0637 [new file with mode: 0644]
test/log/4040 [new file with mode: 0644]
test/rejectlog/0637 [new file with mode: 0644]
test/rejectlog/4040 [new file with mode: 0644]
test/runtest
test/scripts/0000-Basic/0637 [new file with mode: 0644]
test/scripts/2500-dsearch/2500
test/scripts/4040-wellknown/4040 [new file with mode: 0644]
test/scripts/4040-wellknown/REQUIRES [new file with mode: 0644]
test/stderr/0002
test/stderr/0021
test/stderr/0022
test/stderr/0037
test/stderr/0044
test/stderr/0078
test/stderr/0084
test/stderr/0085
test/stderr/0092
test/stderr/0094
test/stderr/0117
test/stderr/0123
test/stderr/0143
test/stderr/0149
test/stderr/0161
test/stderr/0169
test/stderr/0183
test/stderr/0218
test/stderr/0249
test/stderr/0264
test/stderr/0275
test/stderr/0277
test/stderr/0278
test/stderr/0279
test/stderr/0283
test/stderr/0294
test/stderr/0297
test/stderr/0303
test/stderr/0315
test/stderr/0317
test/stderr/0332
test/stderr/0333
test/stderr/0357
test/stderr/0358
test/stderr/0360
test/stderr/0361
test/stderr/0362
test/stderr/0364
test/stderr/0368
test/stderr/0370
test/stderr/0371
test/stderr/0374
test/stderr/0375
test/stderr/0376
test/stderr/0377
test/stderr/0378
test/stderr/0379
test/stderr/0380
test/stderr/0381
test/stderr/0382
test/stderr/0386
test/stderr/0387
test/stderr/0388
test/stderr/0391
test/stderr/0393
test/stderr/0396
test/stderr/0398
test/stderr/0399
test/stderr/0402
test/stderr/0403
test/stderr/0404
test/stderr/0408
test/stderr/0414
test/stderr/0419
test/stderr/0426
test/stderr/0432
test/stderr/0433
test/stderr/0435
test/stderr/0437
test/stderr/0438
test/stderr/0450
test/stderr/0462
test/stderr/0463
test/stderr/0464
test/stderr/0465
test/stderr/0469
test/stderr/0471
test/stderr/0473
test/stderr/0476
test/stderr/0479
test/stderr/0483
test/stderr/0484
test/stderr/0487
test/stderr/0489
test/stderr/0499
test/stderr/0512
test/stderr/0514
test/stderr/0529
test/stderr/0543
test/stderr/0544
test/stderr/0545
test/stderr/0554
test/stderr/0563
test/stderr/0575
test/stderr/0578
test/stderr/0609
test/stderr/0620
test/stderr/0623
test/stderr/0628
test/stderr/0632
test/stderr/0909
test/stderr/1006
test/stderr/1007
test/stderr/1157
test/stderr/2035
test/stderr/2135
test/stderr/2200
test/stderr/2201
test/stderr/2202
test/stderr/2600
test/stderr/2610
test/stderr/2620
test/stderr/3000
test/stderr/3201
test/stderr/3210
test/stderr/3212
test/stderr/3400
test/stderr/4052
test/stderr/4510
test/stderr/4530
test/stderr/4802
test/stderr/4803
test/stderr/5000
test/stderr/5004
test/stderr/5005
test/stderr/5006
test/stderr/5008
test/stderr/5204
test/stderr/5410
test/stderr/5420
test/stdout/0637 [new file with mode: 0644]
test/stdout/2500
test/stdout/4040 [new file with mode: 0644]

index dbbed7cde45a2a96b8703db20c3f1612428fd9a9..202c2765954dbe6d5dfe4a3d5804131904569b3a 100644 (file)
@@ -1805,6 +1805,11 @@ suited to Exim's usage model.
 Yet another DBM library, called &'tdb'&, is available from
 &url(https://sourceforge.net/projects/tdb/files/). It has its own interface, and also
 operates on a single file.
+.next
+.new
+It is possible to use sqlite3 (&url(https://www.sqlite.org/index.html))
+for the DBM library.
+.wen
 .endlist
 
 .cindex "USE_DB"
@@ -1816,8 +1821,9 @@ USE_DB in an appropriate configuration file (typically
 .code
 USE_DB=yes
 .endd
-Similarly, for gdbm you set USE_GDBM, and for tdb you set USE_TDB. An
-error is diagnosed if you set more than one of these.
+Similarly, for gdbm you set USE_GDBM, for tdb you set USE_TDB,
+and for sqlite3 you set USE_SQLITE.
+An error is diagnosed if you set more than one of these.
 You can set USE_NDBM if needed to override an operating system default.
 
 At the lowest level, the build-time configuration sets none of these options,
@@ -1833,6 +1839,7 @@ in one of these lines:
 .code
 DBMLIB = -ldb
 DBMLIB = -ltdb
+DBMLIB = -lsqlite3
 DBMLIB = -lgdbm -lgdbm_compat
 .endd
 The last of those was for a Linux having GDBM provide emulated NDBM facilities.
@@ -3101,7 +3108,7 @@ options, as appropriate. The &%-bnq%& option (see below) provides a way of
 suppressing this for special cases.
 
 Policy checks on the contents of local messages can be enforced by means of
-the non-SMTP ACL. See chapter &<<CHAPACL>>& for details.
+the non-SMTP ACL. See section &<<SECnonSMTP>>& for details.
 
 .cindex "return code" "for &%-bm%&"
 The return code is zero if the message is successfully accepted. Otherwise, the
@@ -3377,7 +3384,7 @@ dots doubled), terminated by a line containing just a single dot. An error is
 provoked if the terminating dot is missing. A further message may then follow.
 
 As for other local message submissions, the contents of incoming batch SMTP
-messages can be checked using the non-SMTP ACL (see chapter &<<CHAPACL>>&).
+messages can be checked using the non-SMTP ACL (see section &<<SECnonSMTP>>&).
 Unqualified addresses are automatically qualified using &%qualify_domain%& and
 &%qualify_recipient%&, as appropriate, unless the &%-bnq%& option is used.
 
@@ -4715,7 +4722,7 @@ all selected messages, not just the first; frozen messages are included when
 
 The &%-R%& option makes it straightforward to initiate delivery of all messages
 to a given domain after a host has been down for some time. When the SMTP
-command ETRN is accepted by its ACL (see chapter &<<CHAPACL>>&), its default
+command ETRN is accepted by its ACL (see section &<<SECTETRN>>&), its default
 effect is to run Exim with the &%-R%& option, but it can be configured to run
 an arbitrary command instead.
 
@@ -6846,7 +6853,10 @@ by default, but has an option to omit them (see section &<<SECTdbmbuild>>&).
 .cindex "dsearch lookup type"
 The given file must be an absolute directory path; this is searched for an entry
 whose name is the key by calling the &[lstat()]& function.
-The key may not contain any forward slash characters.
+.new
+Unless the options (below) permit a path,
+.wen
+the key may not contain any forward slash characters.
 If &[lstat()]& succeeds then so does the lookup.
 .cindex "tainted data" "dsearch result"
 The result is regarded as untainted.
@@ -6855,7 +6865,7 @@ Options for the lookup can be given by appending them after the word "dsearch",
 separated by a comma.  Options, if present, are a comma-separated list having
 each element starting with a tag name and an equals.
 
-Two options are supported, for the return value and for filtering match
+Three options are supported, for the return value and for filtering match
 candidates.
 The "ret" option requests an alternate result value of
 the entire path for the entry. Example:
@@ -6863,6 +6873,7 @@ the entire path for the entry. Example:
 ${lookup {passwd} dsearch,ret=full {/etc}}
 .endd
 The default result is just the requested entry.
+
 The "filter" option requests that only directory entries of a given type
 are matched. The match value is one of "file", "dir" or "subdir" (the latter
 not matching "." or ".."). Example:
@@ -6872,6 +6883,14 @@ ${lookup {passwd} dsearch,filter=file {/etc}}
 The default matching is for any entry type, including directories
 and symlinks.
 
+The "key" option relaxes the restriction that only a simple path component can
+be searched for, to permit a sequence of path components. Example:
+.code
+${lookup {foo/bar} dsearch,key=path {/etc}}
+.endd
+If this option is used, a ".." component in the key is specifically disallowed.
+The default operation is that the key may only be a single path component.
+
 An example of how this
 lookup can be used to support virtual domains is given in section
 &<<SECTvirtualdomains>>&.
@@ -8202,6 +8221,11 @@ or delete command), the result of the lookup is the number of rows affected.
 anything (for example, setting a field to the value it already has), the result
 is zero because no rows are affected.
 
+.new
+To get an encryted connection, use a Mysql option file with the required
+parameters for the connection.
+.wen
+
 
 .subsection "Special PostgreSQL features" SECID74
 PostgreSQL lookups can also use Unix domain socket connections to the database.
@@ -11568,6 +11592,19 @@ literal question mark).
 .cindex "&%utf8_localpart_from_alabel%& expansion item"
 These convert EAI mail name components between UTF-8 and a-label forms.
 For information on internationalisation support see &<<SECTi18nMTA>>&.
+
+
+.new
+.vitem &*${xtextd:*&<&'string'&>&*}*&
+.cindex "text forcing in strings"
+.cindex "string" "xtext decoding"
+.cindex "xtext"
+.cindex "&%xtextd%& expansion item"
+This performs xtext decoding of the string (per RFC 3461 section 4).
+.wen
+
+
+
 .endlist
 
 
@@ -14819,6 +14856,7 @@ listed in more than one group.
 .row &%acl_smtp_rcpt%&               "ACL for RCPT"
 .row &%acl_smtp_starttls%&           "ACL for STARTTLS"
 .row &%acl_smtp_vrfy%&               "ACL for VRFY"
+.row &%acl_smtp_wellknown%&          "ACL for WELLKNOWN"
 .row &%av_scanner%&                  "specify virus scanner"
 .row &%check_rfc2047_length%&        "check length of RFC 2047 &""encoded &&&
                                       words""&"
@@ -14985,6 +15023,7 @@ See also the &'Policy controls'& section above.
 .row &%prdr_enable%&                 "advertise PRDR to all hosts"
 .row &%smtputf8_advertise_hosts%&    "advertise SMTPUTF8 to these hosts"
 .row &%tls_advertise_hosts%&         "advertise TLS to these hosts"
+.row &%wellknown_advertise_hosts%&   "advertise WELLKNOWN to these hosts"
 .endtable
 
 
@@ -15108,7 +15147,7 @@ log_selector = +8bitmime
 .cindex "&ACL;" "for non-SMTP messages"
 .cindex "non-SMTP messages" "ACLs for"
 This option defines the ACL that is run when a non-SMTP message has been
-read and is on the point of being accepted. See chapter &<<CHAPACL>>& for
+read and is on the point of being accepted. See section &<<SECnonSMTP>>& for
 further details.
 
 .option acl_not_smtp_mime main string&!! unset
@@ -15120,24 +15159,26 @@ SMTP messages.
 .cindex "&ACL;" "at start of non-SMTP message"
 .cindex "non-SMTP messages" "ACLs for"
 This option defines the ACL that is run before Exim starts reading a
-non-SMTP message. See chapter &<<CHAPACL>>& for further details.
+non-SMTP message. See section &<<SECnonSMTP>>& for further details.
 
 .option acl_smtp_auth main string&!! unset
 .cindex "&ACL;" "setting up for SMTP commands"
 .cindex "AUTH" "ACL for"
 This option defines the ACL that is run when an SMTP AUTH command is
-received. See chapter &<<CHAPACL>>& for further details.
+received.
+See chapter &<<CHAPACL>>& for general information on ACLs, and chapter
+&<<CHAPSMTPAUTH>>& for details of authentication.
 
 .option acl_smtp_connect main string&!! unset
 .cindex "&ACL;" "on SMTP connection"
 This option defines the ACL that is run when an SMTP connection is received.
-See chapter &<<CHAPACL>>& for further details.
+See section &<<SECconnectACL>>& for further details.
 
 .option acl_smtp_data main string&!! unset
 .cindex "DATA" "ACL for"
 This option defines the ACL that is run after an SMTP DATA command has been
 processed and the message itself has been received, but before the final
-acknowledgment is sent. See chapter &<<CHAPACL>>& for further details.
+acknowledgment is sent. See section &<<SECdataACLS>>& for further details.
 
 .option acl_smtp_data_prdr main string&!! accept
 .cindex "PRDR" "ACL for"
@@ -15148,7 +15189,7 @@ This option defines the ACL that,
 if the PRDR feature has been negotiated,
 is run for each recipient after an SMTP DATA command has been
 processed and the message itself has been received, but before the
-acknowledgment is sent. See chapter &<<CHAPACL>>& for further details.
+acknowledgment is sent. See section &<<SECTPRDRACL>>& for further details.
 
 .option acl_smtp_dkim main string&!! unset
 .cindex DKIM "ACL for"
@@ -15171,7 +15212,7 @@ received. See chapter &<<CHAPACL>>& for further details.
 .cindex "EHLO" "ACL for"
 .cindex "HELO" "ACL for"
 This option defines the ACL that is run when an SMTP EHLO or HELO
-command is received. See chapter &<<CHAPACL>>& for further details.
+command is received. See section &<<SECheloACL>>& for further details.
 
 
 .option acl_smtp_mail main string&!! unset
@@ -15182,7 +15223,8 @@ received. See chapter &<<CHAPACL>>& for further details.
 .option acl_smtp_mailauth main string&!! unset
 .cindex "AUTH" "on MAIL command"
 This option defines the ACL that is run when there is an AUTH parameter on
-a MAIL command. See chapter &<<CHAPACL>>& for details of ACLs, and chapter
+a MAIL command.
+See chapter &<<CHAPACL>>& for general information on ACLs, and chapter
 &<<CHAPSMTPAUTH>>& for details of authentication.
 
 .option acl_smtp_mime main string&!! unset
@@ -15195,7 +15237,7 @@ section &<<SECTscanmimepart>>& for details.
 .cindex "not-QUIT, ACL for"
 This option defines the ACL that is run when an SMTP session
 ends without a QUIT command being received.
-See chapter &<<CHAPACL>>& for further details.
+See section &<<SECTNOTQUITACL>>& for further details.
 
 .option acl_smtp_predata main string&!! unset
 This option defines the ACL that is run when an SMTP DATA command is
@@ -15210,7 +15252,7 @@ received. See chapter &<<CHAPACL>>& for further details.
 .option acl_smtp_rcpt main string&!! unset
 .cindex "RCPT" "ACL for"
 This option defines the ACL that is run when an SMTP RCPT command is
-received. See chapter &<<CHAPACL>>& for further details.
+received. See section &<<SECTQUITACL>>& for further details.
 
 .option acl_smtp_starttls main string&!! unset
 .cindex "STARTTLS, ACL for"
@@ -15222,6 +15264,13 @@ received. See chapter &<<CHAPACL>>& for further details.
 This option defines the ACL that is run when an SMTP VRFY command is
 received. See chapter &<<CHAPACL>>& for further details.
 
+.new
+.option acl_smtp_wellknown main string&!! unset
+.cindex "WELLKNOWN, ACL for"
+This option defines the ACL that is run when an SMTP WELLKNOWN command is
+received. See section &<<SECTWELLKNOWNACL>>& for further details.
+.wen
+
 .option add_environment main "string list" empty
 .cindex "environment" "set values"
 This option adds individual environment variables that the
@@ -16576,7 +16625,7 @@ If permitted, Exim as a servier will advertise in the EHLO response
 the limit for RCPT commands set by the &%recipients_max%& option (if it is set)
 and the limit for MAIL commands set by the &%smtp_accept_max_per_connection%&
 option.
-,wen
+.wen
 
 .option local_from_check main boolean true
 .cindex "&'Sender:'& header line" "disabling addition of"
@@ -18893,6 +18942,14 @@ absolute and untainted.
 See also &%bounce_message_file%&.
 
 
+.new
+.option wellknown_advertise_hosts main boolean unset
+.cindex WELLKNOWN advertisement
+.cindex "ESMTP extensions" WELLKNOWN
+This option enables the advertising of the SMTP WELLKNOWN extension.
+See also the &%acl_smtp_wellknown%& ACL (&<<SECTWELLKNOWNACL>>&).
+.wen
+
 .option write_rejectlog main boolean true
 .cindex "reject log" "disabling"
 If this option is set false, Exim no longer writes anything to the reject log.
@@ -30625,6 +30682,7 @@ options in the main part of the configuration. These options are:
 .cindex "RCPT" "ACL for"
 .cindex "STARTTLS, ACL for"
 .cindex "VRFY" "ACL for"
+.cindex "WELLKNOWN" "ACL for"
 .cindex "SMTP" "connection, ACL for"
 .cindex "non-SMTP messages" "ACLs for"
 .cindex "MIME content scanning" "ACL for"
@@ -30651,6 +30709,7 @@ options in the main part of the configuration. These options are:
 .irow &%acl_smtp_rcpt%&        "ACL for RCPT"
 .irow &%acl_smtp_starttls%&    "ACL for STARTTLS"
 .irow &%acl_smtp_vrfy%&        "ACL for VRFY"
+.irow &%acl_smtp_wellknown%&   "ACL for WELLKNOWN"
 .endtable
 
 For example, if you set
@@ -30666,7 +30725,7 @@ trying to deliver the message. It is therefore recommended that you do as much
 testing as possible at RCPT time.
 
 
-.subsection "The non-SMTP ACLs" SECID190
+.subsection "The non-SMTP ACLs" SECnonSMTP
 .cindex "non-SMTP messages" "ACLs for"
 The non-SMTP ACLs apply to all non-interactive incoming messages, that is, they
 apply to batched SMTP as well as to non-SMTP messages. (Batched SMTP is not
@@ -30700,7 +30759,7 @@ kind of rejection is treated as permanent, because there is no way of sending a
 temporary error for these kinds of message.
 
 
-.subsection "The SMTP connect ACL" SECID191
+.subsection "The SMTP connect ACL" SECconnectACL
 .cindex "SMTP" "connection, ACL for"
 .oindex &%smtp_banner%&
 The ACL test specified by &%acl_smtp_connect%& happens at the start of an SMTP
@@ -30715,7 +30774,7 @@ is accepted; if the ACL does not accept then the TCP connection is dropped witho
 any TLS startup attempt and without any SMTP response being transmitted.
 
 
-.subsection "The EHLO/HELO ACL" SECID192
+.subsection "The EHLO/HELO ACL" SECheloACL
 .cindex "EHLO" "ACL for"
 .cindex "HELO" "ACL for"
 The ACL test specified by &%acl_smtp_helo%& happens when the client issues an
@@ -30736,7 +30795,7 @@ affect the EHLO options that are listed on the second and subsequent lines of
 an EHLO response.
 
 
-.subsection "The DATA ACLs" SECID193
+.subsection "The DATA ACLs" SECdataACLS
 .cindex "DATA" "ACLs for"
 Two ACLs are associated with the DATA command, because it is two-stage
 command, with two responses being sent to the client.
@@ -30833,6 +30892,62 @@ This ACL is evaluated after &%acl_smtp_dkim%& but before &%acl_smtp_data%&.
 If the ACL is not defined, processing completes as if
 the feature was not requested by the client.
 
+.new
+.subsection "The SMTP WELLKNOWN ACL" SECTWELLKNOWNACL
+.cindex "WELLKNOWN" "ACL for"
+.oindex "&%acl_smtp_wellknown%&"
+The &%acl_smtp_wellknown%& ACL is available only when Exim is compiled
+with WELLKNOWN support enabled.
+
+The ACL determines the response to an SMTP WELLKNOWN command, using the normal
+accept/defer/deny verbs for the response code,
+and a new &"control=wellknown"& modifier.
+This modifier takes a single option, separated by a '/'
+character, which must be the name of a file containing the response
+cleartext.  The modifier is expanded before use in the usual way before
+it is used.  The configuration is responsible for picking a suitable file
+to return and, most importantly, not returning any unexpected file.
+The argument for the SMTP verb will be available in the &$smtp_command_argument$&
+variable and can be used for building the file path.
+If the file path given in the modifier is empty or inacessible, the control will
+fail.
+
+For example:
+.code
+ check_wellknown:
+  accept control = wellknown/\
+                   ${lookup {${xtextd:$smtp_command_argument}} \
+                       dsearch,key=path,filter=file,ret=full \
+                       {$spooldir/wellknown.d}}
+.endd
+File content will be encoded in &"xtext"& form, and line-wrapping
+for line-length limitation will be done before transmission.
+A response summary line will be prepended, with the (pre-encoding) file size.
+
+The above example uses the expansion operator ${xtextd:<coded-string>}
+which is needed to decode the xtext-encoded key from the SMTP verb.
+
+Under the util directory there is a "mailtest" utility which can be used
+to test/retrieve WELLKNOWN items. Syntax is
+.code
+  mailtest -h host.example.com -w security.txt
+.endd
+
+WELLKNOWN is a ESMTP extension providing access to extended
+information about the server.  It is modelled on the webserver
+facilities documented in RFC 8615 and can be used for a security.txt
+file and could be used for ACME handshaking (RFC 8555).
+
+Exim will advertise WELLKNOWN support in the EHLO response
+.oindex &%wellknown_advertise_hosts%&
+(conditional on a new option &%wellknown_advertise_hosts%&)
+and service WELLKNOWN smtp verbs having a single parameter
+giving a key for an item of "site-wide metadata".
+The verb and key are separated by whitespace,
+and the key is xtext-encoded (per RFC 3461 section 4).
+.wen
+
+
 .subsection "The QUIT ACL" SECTQUITACL
 .cindex "QUIT, ACL for"
 The ACL for the SMTP QUIT command is anomalous, in that the outcome of the ACL
@@ -31003,12 +31118,15 @@ For &%acl_not_smtp%&, &%acl_smtp_auth%&, &%acl_smtp_connect%&,
 &%acl_smtp_mime%&, &%acl_smtp_predata%&, and &%acl_smtp_starttls%&, the action
 when the ACL is not defined is &"accept"&.
 
-For the others (&%acl_smtp_etrn%&, &%acl_smtp_expn%&, &%acl_smtp_rcpt%&, and
-&%acl_smtp_vrfy%&), the action when the ACL is not defined is &"deny"&.
-This means that &%acl_smtp_rcpt%& must be defined in order to receive any
-messages over an SMTP connection. For an example, see the ACL in the default
-configuration file.
-
+For the others (&%acl_smtp_etrn%&, &%acl_smtp_expn%&, &%acl_smtp_rcpt%&,
+&%acl_smtp_vrfy%&
+.new
+and &%acl_smtp_wellknown%&),
+.wen
+the action when the ACL
+is not defined is &"deny"&.  This means that &%acl_smtp_rcpt%& must be
+defined in order to receive any messages over an SMTP connection.
+For an example, see the ACL in the default configuration file.
 
 
 
@@ -32113,6 +32231,13 @@ that are being submitted at the same time using &%-bs%& or &%-bS%&.
 This control enables conversion of UTF-8 in message envelope addresses
 to a-label form.
 For details see section &<<SECTi18nMTA>>&.
+
+.new
+.vitem &*control&~=&~wellknown*&
+This control sets up a response data file for a WELLKNOWN SMTP command.
+It may only be used in an ACL servicing that command.
+For details see section &<<SECTWELLKNOWNACL>>&.
+.wen
 .endlist vlist
 
 
index 98c7a9584097215265dd5fc4d05db2d8dea1816d..f154430f3d2481f823120fa17e3a6f9bfec2db80 100644 (file)
@@ -151,10 +151,16 @@ JH/29 Bug 3087: Fix SRS encode.  A zero-length quoted element in the local-part
 JH/30 Bug 3029: Avoid feeding Resent-From: to DMARC.
 
 JH/31 Bug 3027: For -bh / -bhc tests change to using the compressed form of
-      ipv6 addresses for the sender.  Previously the uncompressed form was
-      used, and if used in textual form this would result in behavior difference
+      ipv6 addresses for the sender.  Previously the uncompressed form was used,
+      and if used in textual form this would result in behavior difference
       versus non-bh.
 
+JH/32 Bug 3096: MAIL before HELO/EHLO, where required by hosts_require_helo, is
+      now classed as a protocol error and subject to smtp_max_synprot_errors.
+
+JH/33 Bug 2994: A subdir dsearch lookup should permit a directory name that starts
+      ".." and has following characters.
+
 
 Exim version 4.97
 -----------------
index 1781e05b17080eaa831862ecaa1aa1ca32a4fcde..778c3259e7c65c85be8510d41457e0ae7d5b5906 100644 (file)
@@ -22,6 +22,16 @@ Version 4.98
 
  6. A dns:fail event.
 
+ 7. The dsearch lookup supports search for a sub-path.
+
+ 8. Include mailtest utility for simple connection checking.
+
+ 9. Add SMTP WELLKNOWN extension.
+
+ 10. Sqlite3 can be used for the hints databases (vs. DBD, NDB, GBDM, TDB).
+     Add "USE_SQLITE = y" and "DBMLIB = -lsqlite3" in Local/Makefile, to override 
+     the settings done in the OS/Makefile-<platform> file.
+
 Version 4.97
 ------------
 
index aa3a278fd5ec9cbfa6c98e50b2a2d777bfebd21a..56ee10f828df594bc868fa2499572d8f03017bc0 100644 (file)
@@ -658,6 +658,9 @@ After a success:
   $proxy_external_address, $proxy_external_port have the proxy "outside" values
   $sender_host_address, $sender_host_port have the remot client values
 
+
+
+
 --------------------------------------------------------------
 End of file
 --------------------------------------------------------------
diff --git a/doc/doc-txt/id-wellknown.txt b/doc/doc-txt/id-wellknown.txt
new file mode 100644 (file)
index 0000000..79e7158
--- /dev/null
@@ -0,0 +1,145 @@
+Internet Draft
+
+Stream: Independent Submission
+Category:
+Date:           2024/05/26
+Author:         J.Harris
+Author:         B.Quatermass
+
+--
+
+    Mailmaint Working Group                                      J. Harris
+    Internet Draft                                               Independent
+    Category: Experimental                                       B. Quatermass
+                                                                 Independent
+                                                                  May 2024
+
+The WELLKNOWN SMTP Service Extension
+
+Abstract
+--------
+
+This document defines a WELLKNOWN extension for the Simple Mail Transfer Protocol
+(SMTP).  The extension provides the means for an SMTP server to inform a client
+of information relating to the server which is intended to be public.
+
+Status of this Memo
+-------------------
+
+This document is published for examination, experimental implementation, and
+evaluation.
+
+This document defines an Experimental Protocol for the Internet community.
+
+This is a contribution to the RFC Series, independently of any other RFC
+stream. The RFC Editor has chosen to publish this document at its discretion
+and makes no statement about its value for implementation or deployment.
+
+1. Introduction
+---------------
+
+The Simple Mail Transfer Protocol [SMTP] provides the ability to transfer email
+messages from a sending system to a recieving one.
+
+Senders may on occasion wish to discover additional information, not directly
+related to a specific email message, about the receiving system.  An example
+is a contact point for discussing problems in communications.
+
+The WELLKNOWN extension provides a means for delivering such information, by an
+SMTP server on request from an SMTP client.
+
+2. The WELLKNOWN SMTP Extension
+------------------------------
+
+The extension mechanism for SMTP is defined in Section 2.2 of the current SMTP
+specification [RFC5321a].
+
+The name of the extension is WELLKNOWN.  Servers implementing this extension
+advertise a WELLKNOWN as a keyword in the response to EHLO.  The keyword has no
+parameters.
+
+A new SMTP verb, "WELLKNOWN" is defined.
+
+3. The WELLNOWN verb
+--------------------
+
+The format for the WELLKNOWN verb is:
+
+        WELLKNOWN <request-key>
+
+The <request-key> parameter identifies the specific type of information being
+requested.  It is separated from the verb by whitespace, and is xtext-encoded
+per RFC 3461 Section 4 [RFC3461].
+
+After the client gives the WELLKNOWN command, the server responds with one of
+the 2xx, 4xx or 5xx response codes.
+
+A success response MUST be a 250 response code, and MUST be multi-line.
+
+The first line of a success response will be a response summary; the following
+lines are the information data requested, xtext-encoded [RFC3461].  The encoded
+information data MAY be split over multiple response lines.
+
+A response summary MAY be empty.  In this case the first line of the response
+will be only "250-".
+
+A response summary MAY contain a size parameter, giving the number of bytes
+of data.  This parameter is expressed as "SIZE=" followed by a decimal number.
+The size value does not include the xtext-encoding overheader, the "250-" or
+"250 " response code prefixing each line, nor the CR,LF bytes between lines.
+
+4. Example
+----------
+
+S: 220 ESMTP spoken here
+
+C: EHLO test
+
+S: 250-Hi there, mate
+S: 250-SIZE
+S: 250-LIMITS
+S: 250-8BITMIME
+S: 250-PIPELINING
+S: 250-WELLKNOWN
+S: 250 HELP
+
+C: WELLKNOWN security.txt
+
+S: 250-SIZE=285
+S: 250-Contact:+20mailto:security@example.com+0A
+S: 250-+0A
+S: 250-Canonical:+20https://www.example.com/.well-known/security.txt+0A
+S: 250-Canonical:+20mailserver://mx1.example.com/WELLKNOWN/security.txt+0A
+S: 250-Canonical:+20mailserver://mx2.example.com/WELLKNOWN/security.txt+0A
+S: 250-+0A
+S: 250-Preferred-Languages:+20en+0A
+S: 250-+0A
+S: 250-Expires:+202025-02-01T00:00:00.000Z+0A
+S: 250 +0A
+
+C: QUIT
+
+S: 221
+
+
+5. Use Cases
+------------
+
+5.1 security.txt
+---
+It is common for a website to provide public-access information via the HTTP
+protocol.  One such item, a "security.txt" file, is descibed in RFC 9116.
+
+The WELLKNOWN extension provides a method for publishing similar information
+for an SMTP host, without the need to operate an HTTP server.
+
+It is RECOMMENDED that the request-key for this usage be "security.txt".
+
+5.2 ACME handshake
+---
+ACME [RFC8555] provides for obtaining a certificate, needed for encrpted
+communications using TLS.  It defines handshake methods using the DNS and using
+HTTP, for verifying ownership of the domain being certified.
+
+The WELLKNOWN extension provides a method for operating a similar handshake,
+without the need to operate an HTTP server or manipulate the DNS.
index b3bb87c226eb8542fed52b6120ee180dda342220..afa2a7a2315918264a0b3edfd3308ac316eea53b 100644 (file)
@@ -5,7 +5,7 @@
 # optional, Local/* files at the front of this file, to create Makefile in the
 # build directory.
 #
-# Copyright (c) The Exim Maintainers 1995 - 2023
+# Copyright (c) The Exim Maintainers 1995 - 2024
 # SPDX-License-Identifier: GPL-2.0-or-later
 
 SHELL      = $(MAKE_SHELL)
index 11f8b1ae7ce824deb45ff74d308e64cc36bde666..57ea822655d880438997a12debf3913f78d39ac7 100644 (file)
@@ -1,6 +1,6 @@
 /* Exim: OS-specific C header file for FreeBSD */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
-/* Copyright (c) The Exim Maintainers 2020 - 2021 */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
 /* See the file NOTICE for conditions of use and distribution. */
 
index cebda33674bcbc5b0fe029669081ba5b6f1750f9..dcd9ec02d283d491485fcfba4ecc60b7859e6999 100644 (file)
@@ -1,6 +1,6 @@
 /* Exim: OS-specific C header file for Linux */
+/* Copyright (c) The Exim Maintainers 2021 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2020 */
-/* Copyright (c) The Exim Maintainers 2021 */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
 /* See the file NOTICE for conditions of use and distribution. */
 
index 3822746bae3f96f53c921825596dbe879b7c3af3..b23accc6585f5c8be0fc1497585f68209c2981e8 100644 (file)
@@ -2,8 +2,8 @@
 *                Exim Monitor                    *
 *************************************************/
 
+/* Copyright (c) The Exim Maintainers 2021 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
-/* Copyright (c) The Exim Maintainers 2021 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
 
index 074fef1d398f3bb7104ca04da19271ddc2a02d40..315c1d25043b1de372790e4f8515d28593a50ea0 100644 (file)
@@ -2,8 +2,8 @@
 *                 Exim Monitor                   *
 *************************************************/
 
+/* Copyright (c) The Exim Maintainers 2021 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2009 */
-/* Copyright (c) The Exim Maintainers 2021 - 2022 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
 
index 49f649d7e9b745192ad663aad23a19493e58b9e9..55dad0bae24b23d8e6ca3fd4b42017f7508afa1e 100644 (file)
@@ -2,8 +2,8 @@
 *                 Exim Monitor                   *
 *************************************************/
 
+/* Copyright (c) The Exim Maintainers 2021 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
-/* Copyright (c) The Exim Maintainters 2021 - 2022 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
 
index c7c61a652b44c28ab8210b9310ca35141d390e5b..892b4f8561daba6d8f2a9becb6e5eaaf7d21e0d9 100644 (file)
@@ -2,8 +2,8 @@
 *                 Exim Monitor                   *
 *************************************************/
 
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
 
index 432796bff0c21783ffb3b9a144cbebe6355f0ba3..066ccab56125d44cf0c6d0df70aa24cae979ff4a 100644 (file)
@@ -2,8 +2,8 @@
 *                  Exim Monitor                  *
 *************************************************/
 
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
-/* Copyright (c) The Exim Maintainers 2020 - 2021 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
 
index 03e0b412432a0689f3acbb6db1b509e093d600e5..ddb237980fa069e6679b24260d675396716394fe 100755 (executable)
@@ -3,7 +3,7 @@
 # Script to build links for all the exim source files from the system-
 # specific build directory. It should be run from within that directory.
 #
-# Copyright (c) The Exim Maintainers 1995 - 2023
+# Copyright (c) The Exim Maintainers 1995 - 2024
 # SPDX-License-Identifier: GPL-2.0-or-later
 
 test ! -d ../src && \
index 4a33677d5ca55fcbd8871cf277b179ad407702f1..ebfaf640a323e584d82f3183a820d4300651f73d 100644 (file)
@@ -1,7 +1,7 @@
 ##################################################
 #          The Exim mail transport agent         #
 ##################################################
-# Copyright (c) The Exim Maintainers 2022 - 2023
+# Copyright (c) The Exim Maintainers 2022 - 2024
 # SPDX-License-Identifier: GPL-2.0-or-later
 
 # This is the template for Exim's main build-time configuration file. It
@@ -47,7 +47,8 @@
 # compile the Exim monitor utility. Exim itself does not use X11.
 
 # Another area of variability between systems is the type and location of the
-# DBM library package. Exim has support for ndbm, gdbm, tdb, and Berkeley DB.
+# DBM library package. Exim has support for ndbm, gdbm, tdb, Berkeley DB and
+# sqlite3.
 # By default the code assumes ndbm; this often works with gdbm or DB, provided
 # they are correctly installed, via their compatibility interfaces. However,
 # Exim can also be configured to use the native calls for Berkeley DB (obsolete
@@ -591,6 +592,9 @@ DISABLE_MAL_MKS=yes
 # using only native facilities.
 # SUPPORT_SRS=yes
 
+# Uncomment the following to remove support for the ESMTP extension "WELLKNOWN"
+# DISABLE_WELLKNOWN=yes
+
 
 #------------------------------------------------------------------------------
 # Compiling Exim with experimental features. These are documented in
@@ -673,6 +677,10 @@ DISABLE_MAL_MKS=yes
 # USE_DB = yes
 # DBMLIB = -ldb
 
+# sqlite
+# USE_SQLITE = yes
+# DBMLIB = -lsqlite3
+
 
 #------------------------------------------------------------------------------
 # Although Exim is normally a setuid program, owned by root, it refuses to run
index 4e88fc1acd126dbf5b64168fa1d2e9da92263d78..0aa789dbf820ef9b5a8d7781e40daa5f92326838 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -57,9 +57,7 @@ static int msgcond[] = {
 
 #endif
 
-/* ACL condition and modifier codes - keep in step with the table that
-follows.
-down. */
+/* ACL condition and modifier codes */
 
 enum { ACLC_ACL,
        ACLC_ADD_HEADER,
@@ -119,7 +117,8 @@ enum { ACLC_ACL,
        ACLC_SPF_GUESS,
 #endif
        ACLC_UDPSEND,
-       ACLC_VERIFY };
+       ACLC_VERIFY,
+};
 
 /* ACL conditions/modifiers: "delay", "control", "continue", "endpass",
 "message", "log_message", "log_reject_target", "logwrite", "queue" and "set" are
@@ -149,7 +148,7 @@ static condition_def conditions[] = {
   [ACLC_ACL] =                 { US"acl",              FALSE, FALSE,   0 },
 
   [ACLC_ADD_HEADER] =          { US"add_header",       TRUE, TRUE,
-                                 (unsigned int)
+                                 (unsigned)
                                  ~(ACL_BIT_MAIL | ACL_BIT_RCPT |
                                    ACL_BIT_PREDATA | ACL_BIT_DATA |
 #ifndef DISABLE_PRDR
@@ -188,7 +187,7 @@ static condition_def conditions[] = {
 
 #ifdef EXPERIMENTAL_DCC
   [ACLC_DCC] =                 { US"dcc",              TRUE, FALSE,
-                                 (unsigned int)
+                                 (unsigned)
                                  ~(ACL_BIT_DATA |
 # ifndef DISABLE_PRDR
                                  ACL_BIT_PRDR |
@@ -204,7 +203,7 @@ static condition_def conditions[] = {
 #ifndef DISABLE_DKIM
   [ACLC_DKIM_SIGNER] =         { US"dkim_signers",     TRUE, FALSE, (unsigned int) ~ACL_BIT_DKIM },
   [ACLC_DKIM_STATUS] =         { US"dkim_status",      TRUE, FALSE,
-                                 (unsigned int)
+                                 (unsigned)
                                  ~(ACL_BIT_DKIM | ACL_BIT_DATA | ACL_BIT_MIME
 # ifndef DISABLE_PRDR
                                  | ACL_BIT_PRDR
@@ -221,7 +220,7 @@ static condition_def conditions[] = {
   [ACLC_DNSLISTS] =            { US"dnslists", TRUE, FALSE,    0 },
 
   [ACLC_DOMAINS] =             { US"domains",  FALSE, FALSE,
-                                 (unsigned int)
+                                 (unsigned)
                                  ~(ACL_BIT_RCPT | ACL_BIT_VRFY
 #ifndef DISABLE_PRDR
                                  |ACL_BIT_PRDR
@@ -239,7 +238,7 @@ static condition_def conditions[] = {
                                  ACL_BIT_NOTSMTP | ACL_BIT_NOTSMTP_START,
   },
   [ACLC_LOCAL_PARTS] =         { US"local_parts",      FALSE, FALSE,
-                                 (unsigned int)
+                                 (unsigned)
                                  ~(ACL_BIT_RCPT | ACL_BIT_VRFY
 #ifndef DISABLE_PRDR
                                  | ACL_BIT_PRDR
@@ -253,7 +252,7 @@ static condition_def conditions[] = {
 
 #ifdef WITH_CONTENT_SCAN
   [ACLC_MALWARE] =             { US"malware",  TRUE, FALSE,
-                                 (unsigned int)
+                                 (unsigned)
                                    ~(ACL_BIT_DATA |
 # ifndef DISABLE_PRDR
                                    ACL_BIT_PRDR |
@@ -280,7 +279,7 @@ static condition_def conditions[] = {
 
 #ifdef WITH_CONTENT_SCAN
   [ACLC_REGEX] =               { US"regex",            TRUE, FALSE,
-                                 (unsigned int)
+                                 (unsigned)
                                  ~(ACL_BIT_DATA |
 # ifndef DISABLE_PRDR
                                    ACL_BIT_PRDR |
@@ -291,7 +290,7 @@ static condition_def conditions[] = {
 
 #endif
   [ACLC_REMOVE_HEADER] =       { US"remove_header",    TRUE, TRUE,
-                                 (unsigned int)
+                                 (unsigned)
                                  ~(ACL_BIT_MAIL|ACL_BIT_RCPT |
                                    ACL_BIT_PREDATA | ACL_BIT_DATA |
 #ifndef DISABLE_PRDR
@@ -320,7 +319,7 @@ static condition_def conditions[] = {
 
 #ifdef WITH_CONTENT_SCAN
   [ACLC_SPAM] =                        { US"spam",             TRUE, FALSE,
-                                 (unsigned int) ~(ACL_BIT_DATA |
+                                 (unsigned) ~(ACL_BIT_DATA |
 # ifndef DISABLE_PRDR
                                  ACL_BIT_PRDR |
 # endif
@@ -370,8 +369,7 @@ for (condition_def * c = conditions; c < conditions + nelem(conditions); c++)
 
 #ifndef MACRO_PREDEF
 
-/* Return values from decode_control(); used as index so keep in step
-with the controls_list table that follows! */
+/* Return values from decode_control() */
 
 enum {
   CONTROL_AUTH_UNADVERTISED,
@@ -411,6 +409,9 @@ enum {
 #ifdef SUPPORT_I18N
   CONTROL_UTF8_DOWNCONVERT,
 #endif
+#ifndef DISABLE_WELLKNOWN
+  CONTROL_WELLKNOWN,
+#endif
 };
 
 
@@ -564,7 +565,12 @@ static control_def controls_list[] = {
 #ifdef SUPPORT_I18N
 [CONTROL_UTF8_DOWNCONVERT] =
   { US"utf8_downconvert",        TRUE, (unsigned) ~(ACL_BIT_RCPT | ACL_BIT_VRFY)
-  }
+  },
+#endif
+#ifndef DISABLE_WELLKNOWN
+[CONTROL_WELLKNOWN] =
+  { US"wellknown",               TRUE, (unsigned) ~ACL_BIT_WELLKNOWN
+  },
 #endif
 };
 
@@ -806,7 +812,7 @@ if (*s++ != '=')
   {
   *error = string_sprintf("\"=\" missing after ACL \"%s\" %s", name,
     conditions[cond->type].is_modifier ? US"modifier" : US"condition");
-  return FALSE;;
+  return FALSE;
   }
 Uskip_whitespace(&s);
 cond->arg = taint ? string_copy_taint(s, GET_TAINTED) : string_copy(s);
@@ -3122,6 +3128,80 @@ return DEFER;
 
 
 
+#ifndef DISABLE_WELLKNOWN
+/*************************************************
+*   The "wellknown" ACL modifier                 *
+*************************************************/
+
+/* Called by acl_check_condition() below.
+
+Retrieve the given file and encode content as xtext.
+Prefix with a summary line giving the length of plaintext.
+Leave a global pointer to the whole, for output by
+the smtp verb handler code (smtp_in.c).
+
+Arguments:
+  arg          the option string for wellknown=
+  log_msgptr   for error messages
+
+Returns:       OK/FAIL
+*/
+
+static int
+wellknown_process(const uschar * arg, uschar ** log_msgptr)
+{
+struct stat statbuf;
+FILE * rf;
+gstring * g;
+
+wellknown_response = NULL;
+if (f.no_multiline_responses) return FAIL;
+
+/* Check for file existence */
+
+if (!*arg) return FAIL;
+if (Ustat(arg, &statbuf) != 0)
+  { *log_msgptr = US"stat"; goto fail; }
+
+/*XXX perhaps refuse to serve a group- or world-writeable file? */
+
+if (!(rf = Ufopen(arg, "r")))
+  { *log_msgptr = US"open"; goto fail; }
+
+/* Set up summary line for output */
+
+g = string_fmt_append(NULL, "SIZE=%lu\n", (long) statbuf.st_size);
+
+#define LINE_LIM 75
+for (int n = 0, ch; (ch = fgetc(rf)) != EOF; )
+  {
+  /* Xtext-encode, adding output linebreaks for input linebreaks
+  or when the line gets long enough */
+
+  if (ch == '\n')
+    { g = string_fmt_append(g, "+%02X", ch); n = LINE_LIM; }
+  else if (ch < 33 || ch > 126 || ch == '+' || ch == '=')
+    { g = string_fmt_append(g, "+%02X", ch); n += 3; }
+  else
+    { g = string_fmt_append(g, "%c", ch); n++; }
+
+  if (n >= LINE_LIM)
+    { g = string_catn(g, US"\n", 1); n = 0; }
+  }
+#undef LINE_LIM
+
+gstring_release_unused(g);
+wellknown_response = string_from_gstring(g);
+return OK;
+
+fail:
+  *log_msgptr = string_sprintf("wellknown: failed to %s file \"%s\": %s",
+                 *log_msgptr, arg, strerror(errno));
+  return FAIL;
+}
+#endif
+
+
 /*************************************************
 *   Handle conditions/modifiers on an ACL item   *
 *************************************************/
@@ -3311,7 +3391,7 @@ for (; cb; cb = cb->next)
 
     case ACLC_CONTROL:
       {
-      const uschar *p = NULL;
+      const uschar * p = NULL;
       control_type = decode_control(arg, &p, where, log_msgptr);
 
       /* Check if this control makes sense at this time */
@@ -3323,6 +3403,7 @@ for (; cb; cb = cb->next)
        return ERROR;
        }
 
+      /*XXX ought to sort these, just for sanity */
       switch(control_type)
        {
        case CONTROL_AUTH_UNADVERTISED:
@@ -3668,8 +3749,13 @@ for (; cb; cb = cb->next)
            break;
            }
          return ERROR;
-#endif
+#endif /*I18N*/
 
+#ifndef DISABLE_WELLKNOWN
+       case CONTROL_WELLKNOWN:
+         rc = *p == '/' ? wellknown_process(p+1, log_msgptr) : FAIL;
+         break;
+#endif
        }
       break;
       }
index bd2fa3bae11033b6d796ff890c7e1289d38ae763..48f69a8cf8bce6432ad44268831d916ffaab1604 100644 (file)
@@ -2,8 +2,8 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 /* Experimental ARC support for Exim
+   Copyright (c) The Exim Maintainers 2021 - 2024
    Copyright (c) Jeremy Harris 2018 - 2020
-   Copyright (c) The Exim Maintainers 2021 - 2023
    License: GPL
    SPDX-License-Identifier: GPL-2.0-or-later
 */
index 5817be7c93667239d18f28112687e0a57e78d25a..6d31d4b1d21c1b174f0f78a3b92d909f893a37b8 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 7f437fa0dbc64e3cae4169925915b319990cd407..8b80f2c3f880d25f43b4265488722aaf9eae0735 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) The Exim Maintainers 2006 - 2023
+ * Copyright (c) The Exim Maintainers 2006 - 2024
  * Copyright (c) 2004 Andrey Panin <pazke@donpac.ru>
  * SPDX-License-Identifier: GPL-2.0-or-later
  *
index 6ae5833afcef274219b7c42b7fe0fcac977e5c19..a8e04310f9b90daa574720ee3d70c087c4f6d4e2 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2023 */
+/* Copyright (c) The Exim Maintainers 2023 - 2024 */
 /* Copyright (c) Jeremy Harris 2019-2020 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 0c9fb37fe8455b86d7e3e17dc2f7d0f878730710..4b79cbfa4240d11aeac393504c96bf5e58705a8e 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index ae11ae5dc7c8b241d3e0c2c944181237f5f1ddf9..3f9ac2f3c529ef41892575bf76561c205903bf7c 100644 (file)
@@ -2,6 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
+/* Copyright (c) The Exim Maintainers 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 8148960473dfa622ac5af597977f22fc2d536c39..7f59e4c7dddf5b0ea414347406f6725e39196bbf 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 51418c4ed1736af57a8e856166fc5410d3507d26..7ec3974e1dcacb124ff76b2ac6a9b097cbd339d1 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 005032f57dfa21e6eaf336294db71e793e8b734c..85b9a6722fc438c079b5453614baa8e4422784f1 100644 (file)
@@ -2,6 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
+/* Copyright (c) The Exim Maintainers 2024 */
 /* Copyright (c) Jeremy Harris 1995 - 2020 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 75be18161f6d1685803f51686f29116f8b98c000..04cd302deff69bde55ea4a8fd7fe6fb1d1da37e1 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2022 */
+/* Copyright (c) The Exim Maintainers 2022 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -40,3 +40,5 @@ return string_from_gstring(g);
 
 
 /* End of xtextencode.c */
+/* vi: aw ai sw=2
+*/
index 8f53671a0fb684fd95b4bbf1b1479b010cc3b5d4..bfd267929814f8990b4c47d4187b6ef42eef0169 100644 (file)
@@ -53,7 +53,7 @@ typedef struct {
   char *data;
 } save_item;
 
-static const char *db_opts[] = { "", "USE_DB", "USE_GDBM", "USE_TDB", "USE_NDBM" };
+static const char *db_opts[] = { "", "USE_DB", "USE_GDBM", "USE_TDB", "USE_NDBM", "USE_SQLITE" };
 
 static int have_ipv6 = 0;
 static int have_iconv = 0;
@@ -266,7 +266,7 @@ while (fgets(buffer, sizeof(buffer), base) != NULL)
         {
         if (use_which_db_in_local_makefile)
           {
-          printf("*** Only one of USE_DB, USE_GDBM, or USE_TDB should be "
+          printf("*** Only one of USE_DB, USE_GDBM, USE_SQLITE or USE_TDB should be "
             "defined in Local/Makefile\n");
           exit(1);
           }
index c08f1874d71f2b062491f75cefe745119e54690c..13b203e803ea358ae06d5b3d2f8b9ef674a2d32d 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2018 - 2023 */
+/* Copyright (c) The Exim Maintainers 2018 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 
@@ -59,6 +59,7 @@ Do not put spaces between # and the 'define'.
 #define DISABLE_QUEUE_RAMP
 #define DISABLE_TLS
 #define DISABLE_TLS_RESUME
+#define DISABLE_WELLKNOWN
 
 #define ENABLE_DISABLE_FSYNC
 
@@ -187,6 +188,7 @@ Do not put spaces between # and the 'define'.
 #define USE_OPENSSL
 #define USE_READLINE
 #define USE_TCP_WRAPPERS
+#define USE_SQLITE
 #define USE_TDB
 
 #define WHITELIST_D_MACROS
index 88114d648122193bcf11e465813a56737515a89c..2ef632065faa79ff5127b0411b255e84b4c98cd0 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -311,7 +311,7 @@ if (smtp_accept_max_per_host)
   /* For speed, interpret a decimal number inline here */
   else
     {
-    uschar *s = expanded;
+    uschar * s = expanded;
     while (isdigit(*s))
       max_for_this_host = max_for_this_host * 10 + *s++ - '0';
     if (*s)
@@ -320,9 +320,9 @@ if (smtp_accept_max_per_host)
     }
   }
 
-/* If we have fewer connections than max_for_this_host, we can skip the tedious
-per host_address checks. Note that at this stage smtp_accept_count contains the
-count of *other* connections, not including this one. */
+/* If we have fewer total connections than max_for_this_host, we can skip the
+tedious per host_address checks. Note that at this stage smtp_accept_count
+contains the count of *other* connections, not including this one. */
 
 if (max_for_this_host > 0 && smtp_accept_count >= max_for_this_host)
   {
@@ -920,7 +920,7 @@ while ((pid = waitpid(-1, &status, WNOHANG)) > 0)
         smtp_slots[i] = empty_smtp_slot;
         if (--smtp_accept_count < 0) smtp_accept_count = 0;
         DEBUG(D_any) debug_printf("%d SMTP accept process%s now running\n",
-          smtp_accept_count, (smtp_accept_count == 1)? "" : "es");
+          smtp_accept_count, smtp_accept_count == 1 ? "" : "es");
         break;
         }
     if (i < smtp_accept_max) continue;  /* Found an accepting process */
index 389d1518ed8a0249d6a3f0f75f8a78c941e64426..f1989d4136e74ed134dce041da90dda65378c708 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -20,7 +20,7 @@ with database files like $spooldirectory/db/<name> */
 different DBM files. This module does not contain code for reading DBM files
 for (e.g.) alias expansion. That is all contained within the general search
 functions. As Exim now has support for several DBM interfaces, all the relevant
-functions are called as macros.
+functions are called as inlinable functions from an included file.
 
 All the data in Exim's database is in the nature of *hints*. Therefore it
 doesn't matter if it gets destroyed by accident. These functions are not
@@ -35,7 +35,25 @@ means of locking on independent lock files. (Earlier attempts to lock on the
 DBM files themselves were never completely successful.) Since callers may in
 general want to do more than one read or write while holding the lock, there
 are separate open and close functions. However, the calling modules should
-arrange to hold the locks for the bare minimum of time. */
+arrange to hold the locks for the bare minimum of time.
+
+API:
+  dbfn_open
+  dbfn_close
+  dbfn_read_with_length
+  dbfn_read_enforce_length
+  dbfn_write
+  dbfn_delete
+  dbfn_scan                            unused; ifdeffout out
+
+Users:
+  ACL ratelimit & seen conditions
+  delivery retry handling
+  delivery serialization
+  TLS session resumption
+  peer capability cache
+  callout & quota cache
+*/
 
 
 
@@ -59,17 +77,14 @@ Returns:   NULL if the open failed, or the locking failed. After locking
 
            On success, dbblock is returned. This contains the dbm pointer and
            the fd of the locked lock file.
-
-There are some calls that use O_RDWR|O_CREAT for the flags. Having discovered
-this in December 2005, I'm not sure if this is correct or not, but for the
-moment I haven't changed them.
 */
 
 open_db *
-dbfn_open(uschar *name, int flags, open_db *dbblock, BOOL lof, BOOL panic)
+dbfn_open(const uschar * name, int flags, open_db * dbblock,
+  BOOL lof, BOOL panic)
 {
 int rc, save_errno;
-BOOL read_only = flags == O_RDONLY;
+BOOL read_only = flags & O_RDONLY;
 flock_t lock_data;
 uschar dirname[PATHLEN], filename[PATHLEN];
 
@@ -145,6 +160,7 @@ databases - often this is caused by non-matching db.h and the library. To make
 it easy to pin this down, there are now debug statements on either side of the
 open call. */
 
+flags &= O_RDONLY | O_RDWR;
 snprintf(CS filename, sizeof(filename), "%s/%s", dirname, name);
 
 priv_drop_temp(exim_uid, exim_gid);
@@ -182,7 +198,6 @@ DEBUG(D_hints_lookup)
   debug_printf_indent("opened hints database %s: flags=%s\n", filename,
     flags == O_RDONLY ? "O_RDONLY"
     : flags == O_RDWR ? "O_RDWR"
-    : flags == (O_RDWR|O_CREAT) ? "O_RDWR|O_CREAT"
     : "??");
 
 /* Pass back the block containing the opened database handle and the open fd
@@ -256,7 +271,11 @@ exim_datum_init(&result_datum);      /* to be cleared before use. */
 exim_datum_data_set(&key_datum, key_copy);
 exim_datum_size_set(&key_datum, klen);
 
-if (!exim_dbget(dbblock->dbptr, &key_datum, &result_datum)) return NULL;
+if (!exim_dbget(dbblock->dbptr, &key_datum, &result_datum))
+  {
+  DEBUG(D_hints_lookup) debug_printf_indent("dbfn_read: null return\n");
+  return NULL;
+  }
 
 /* Assume the data store could have been tainted.  Properly, we should
 store the taint status with the data. */
@@ -264,6 +283,7 @@ store the taint status with the data. */
 dlen = exim_datum_size_get(&result_datum);
 yield = store_get(dlen, GET_TAINTED);
 memcpy(yield, exim_datum_data_get(&result_datum), dlen);
+DEBUG(D_hints_lookup) debug_printf_indent("dbfn_read: size %u return\n", dlen);
 if (length) *length = dlen;
 
 exim_datum_free(&result_datum);    /* Some DBM libs require freeing */
@@ -326,7 +346,8 @@ uschar * key_copy = store_get(klen, key);
 memcpy(key_copy, key, klen);
 gptr->time_stamp = time(NULL);
 
-DEBUG(D_hints_lookup) debug_printf_indent("dbfn_write: key=%s\n", key);
+DEBUG(D_hints_lookup)
+  debug_printf_indent("dbfn_write: key=%s datalen %d\n", key, length);
 
 exim_datum_init(&key_datum);         /* Some DBM libraries require the datum */
 exim_datum_init(&value_datum);       /* to be cleared before use. */
@@ -369,6 +390,11 @@ return exim_dbdel(dbblock->dbptr, &key_datum);
 
 
 
+#ifdef notdef
+/* XXX This appears to be unused.  There's a separate implementation
+in dbutils.c for dumpdb and fixdb, using the same underlying support.
+*/
+
 /*************************************************
 *         Scan the keys of a database file       *
 *************************************************/
@@ -408,6 +434,7 @@ yield = exim_dbscan(dbblock->dbptr, &key_datum, &value_datum, start, *cursor)
 if (!yield) exim_dbdelete_cursor(*cursor);
 return yield;
 }
+#endif
 
 
 
index 1f0dec1f7f0c6703ba9d68bf9f848c3b8fb149c5..0b0bcab22839c2906f02c17f9a53ad2700ab1e1e 100644 (file)
@@ -14,7 +14,7 @@
 
 void     dbfn_close(open_db *);
 int      dbfn_delete(open_db *, const uschar *);
-open_db *dbfn_open(uschar *, int, open_db *, BOOL, BOOL);
+open_db *dbfn_open(const uschar *, int, open_db *, BOOL, BOOL);
 void    *dbfn_read_with_length(open_db *, const uschar *, int *);
 void    *dbfn_read_enforce_length(open_db *, const uschar *, size_t);
 uschar  *dbfn_scan(open_db *, BOOL, EXIM_CURSOR **);
index a8376e58cf10e09effaa2bcc6168e6ba9b2fde7f..767a75fdc66b0e7885fced1a00d4cb8812093ff7 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 94303db0bdc244c205f7a22bcb5c835c197ba579..876d097b51551ea8b3018b783dbea3a293fa0a1b 100644 (file)
@@ -36,7 +36,7 @@ Returns:    panic on failure if panic is set; otherwise return FALSE;
 */
 
 BOOL
-directory_make(const uschar *parent, const uschar *name,
+directory_make(const uschar * parent, const uschar * name,
                int mode, BOOL panic)
 {
 BOOL use_chown = parent == spool_directory && geteuid() == root_uid;
index 9e76c51a0226babfc9f66bd980cf6c63b3bb8bb1..e0b76c3b1ac289ae201f4d9117d71d1c3d6c3c84 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge, 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 8c8d9b41af58a2e48d6a4bfe1bbacf0a5814675c..63870c57f94572c8a769b46923c49a9ce9bdceb7 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2022 - 2023 */
+/* Copyright (c) The Exim Maintainers 2022 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index f684e08ea898f0a37c37bdfcf596a0f0444f8437..28fce06244f889c5c9518361ee884baaa1c875b5 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 /* DMARC support.
-   Copyright (c) The Exim Maintainers 2019 - 2023
+   Copyright (c) The Exim Maintainers 2019 - 2024
    Copyright (c) Todd Lyons <tlyons@exim.org> 2012 - 2014
    License: GPL */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 5a8c23d62b4234ad9b574d47c87269e4e0ad9b2e..538c0c0b44e244f23fc4a771c018a8ccb6de9a48 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -1135,6 +1135,7 @@ errstr = US"cname_loop";
 
 not_good:
   {
+#ifndef DISABLE_EVENTS
   const uschar * s = NULL;
   BOOL save_flag = f.search_find_defer;
   uschar * save_serr = search_error_message;
@@ -1167,6 +1168,7 @@ not_good:
   /*XXX what other state could an expansion in the eventhandler mess up? */
   search_error_message = save_serr;
   f.search_find_defer = save_flag;
+#endif /*EVENTS*/
   return rc;
   }
 }
index 040df2cd020aa2cd8b39a226b2ab6a2622e5aa4a..d9039ad0cf25da1b4003cec39a1457a93e629b68 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -997,32 +997,35 @@ if (s)
 static gstring *
 show_db_version(gstring * g)
 {
+g = string_cat(g, US"Hints DB:\n");
 #ifdef DB_VERSION_STRING
 DEBUG(D_any)
   {
-  g = string_fmt_append(g, "Library version: BDB: Compile: %s\n", DB_VERSION_STRING);
-  g = string_fmt_append(g, "                      Runtime: %s\n",
+  g = string_fmt_append(g, " Library version: BDB: Compile: %s\n", DB_VERSION_STRING);
+  g = string_fmt_append(g, "                       Runtime: %s\n",
     db_version(NULL, NULL, NULL));
   }
 else
-  g = string_fmt_append(g, "Berkeley DB: %s\n", DB_VERSION_STRING);
+  g = string_fmt_append(g, " Berkeley DB: %s\n", DB_VERSION_STRING);
 
 #elif defined(BTREEVERSION) && defined(HASHVERSION)
 # ifdef USE_DB
-  g = string_cat(g, US"Probably Berkeley DB version 1.8x (native mode)\n");
+  g = string_cat(g, US" Probably Berkeley DB version 1.8x (native mode)\n");
 # else
-  g = string_cat(g, US"Probably Berkeley DB version 1.8x (compatibility mode)\n");
+  g = string_cat(g, US" Probably Berkeley DB version 1.8x (compatibility mode)\n");
 # endif
 
 #elif defined(_DBM_RDONLY) || defined(dbm_dirfno)
-g = string_cat(g, US"Probably ndbm\n");
+g = string_cat(g, US" Probably ndbm\n");
+#elif defined(USE_SQLITE)
+g = string_cat(g, US" Using sqlite3\n");
 #elif defined(USE_TDB)
-g = string_cat(g, US"Using tdb\n");
+g = string_cat(g, US" Using tdb\n");
 #else
 # ifdef USE_GDBM
-  g = string_cat(g, US"Probably GDBM (native mode)\n");
+g = string_cat(g, US" Probably GDBM (native mode)\n");
 # else
-  g = string_cat(g, US"Probably GDBM (compatibility mode)\n");
+g = string_cat(g, US" Probably GDBM (compatibility mode)\n");
 # endif
 #endif
 return g;
@@ -1108,6 +1111,9 @@ g = string_cat(g, US"Support for:");
 #ifndef DISABLE_ESMTP_LIMITS
   g = string_cat(g, US" ESMTP_Limits");
 #endif
+#ifndef DISABLE_WELLKNOWN
+  g = string_cat(g, US" ESMTP_Wellknown");
+#endif
 #ifndef DISABLE_EVENT
   g = string_cat(g, US" Event");
 #endif
index 6baf1fbb494700d9d46799b276ade99297f09343..9bf5dcdfc1b46e242927193977916517f65bc991 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2021 - 2022 */
+/* Copyright (c) The Exim Maintainers 2021 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -524,6 +524,7 @@ config.h, mytypes.h, and store.h, so we don't need to mention them explicitly.
 #include "local_scan.h"
 #include "path_max.h"
 #include "macros.h"
+#include "blob.h"
 #include "hintsdb.h"
 #include "hintsdb_structs.h"
 #include "structs.h"
index bd24faa5b9d4e9e721fa35061e9d1bd3f5bfdc4c..d68333079f93a6a2a59b1306e20f4d080e20f4a6 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index c868832b1ad3b233f575f6d5416823c36ba2d243..c466ae380dc7bfdbab63741bfbbab8f849548329 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -287,28 +287,26 @@ Returns:   NULL if the open failed, or the locking failed.
 */
 
 open_db *
-dbfn_open(uschar *name, int flags, open_db *dbblock, BOOL lof, BOOL panic)
+dbfn_open(const uschar * name, int flags, open_db * dbblock,
+  BOOL lof, BOOL panic)
 {
 int rc;
 struct flock lock_data;
-BOOL read_only = flags == O_RDONLY;
+BOOL read_only = (flags & (O_WRONLY|O_RDWR)) == O_RDONLY;
 uschar * dirname, * filename;
 
 /* The first thing to do is to open a separate file on which to lock. This
 ensures that Exim has exclusive use of the database before it even tries to
-open it. If there is a database, there should be a lock file in existence. */
+open it. If there is a database, there should be a lock file in existence;
+if no lockfile we infer there is no database and error out.  We open the
+lockfile using the r/w mode requested for the DB, users lacking permission
+for the DB access mode will error out here. */
 
-#ifdef COMPILE_UTILITY
 if (  asprintf(CSS &dirname, "%s/db", spool_directory) < 0
    || asprintf(CSS &filename, "%s/%s.lockfile", dirname, name) < 0)
   return NULL;
-#else
-dirname = string_sprintf("%s/db", spool_directory);
-filename = string_sprintf("%s/%s.lockfile", dirname, name);
-#endif
 
-dbblock->lockfd = Uopen(filename, flags, 0);
-if (dbblock->lockfd < 0)
+if ((dbblock->lockfd = Uopen(filename, flags, 0)) < 0)
   {
   printf("** Failed to open database lock file %s: %s\n", filename,
     strerror(errno));
@@ -331,7 +329,7 @@ if (sigalrm_seen) errno = ETIMEDOUT;
 if (rc < 0)
   {
   printf("** Failed to get %s lock for %s: %s",
-    flags & O_WRONLY ? "write" : "read",
+    read_only ? "read" : "write",
     filename,
     errno == ETIMEDOUT ? "timed out" : strerror(errno));
   (void)close(dbblock->lockfd);
@@ -341,14 +339,11 @@ if (rc < 0)
 /* At this point we have an opened and locked separate lock file, that is,
 exclusive access to the database, so we can go ahead and open it. */
 
-#ifdef COMPILE_UTILITY
 if (asprintf(CSS &filename, "%s/%s", dirname, name) < 0) return NULL;
-#else
-filename = string_sprintf("%s/%s", dirname, name);
-#endif
-dbblock->dbptr = exim_dbopen(filename, dirname, flags, 0);
 
-if (!dbblock->dbptr)
+if (flags & O_RDWR) flags |= O_CREAT;
+
+if (!(dbblock->dbptr = exim_dbopen(filename, dirname, flags, 0)))
   {
   printf("** Failed to open DBM file %s for %s:\n   %s%s\n", filename,
     read_only? "reading" : "writing", strerror(errno),
@@ -520,7 +515,7 @@ Arguments:
   cursor   a pointer to a pointer to a cursor anchor, for those dbm libraries
            that use the notion of a cursor
 
-Returns:   the next record from the file, or
+Returns:   the next *key* (nul-terminated) from the file, or
            NULL if there are no more
 */
 
@@ -1427,3 +1422,5 @@ return 0;
 #endif  /* EXIM_TIDYDB */
 
 /* End of exim_dbutil.c */
+/* vi: aw ai sw=2
+*/
index 5724812c4c0870147e3ef0b04504f90baaf362b3..882db6873898c0161610f9742f0132de23fb6a67 100644 (file)
@@ -1,6 +1,6 @@
 #! /bin/sh
 
-# Copyright (c) The Exim Maintainers 2023
+# Copyright (c) The Exim Maintainers 2023 - 2024
 # Copyright (c) University of Cambridge, 1995 - 2007
 # See the file NOTICE for conditions of use and distribution.
 
index 1d121756da4db75df3a8e4f9b1873d11576d46ed..e7d0899090a220800ccff8031796cd3dfea030a3 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -259,7 +259,9 @@ static uschar *op_table_main[] = {
   US"strlen",
   US"substr",
   US"uc",
-  US"utf8clean" };
+  US"utf8clean",
+  US"xtextd",
+  };
 
 enum {
   EOP_ADDRESS =  nelem(op_table_underscore),
@@ -307,7 +309,9 @@ enum {
   EOP_STRLEN,
   EOP_SUBSTR,
   EOP_UC,
-  EOP_UTF8CLEAN };
+  EOP_UTF8CLEAN,
+  EOP_XTEXTD,
+  };
 
 
 /* Table of condition names, and corresponding switch numbers. The names must
@@ -7326,19 +7330,20 @@ NOT_ITEM: ;
 
       case EOP_LC:
        {
-       int count = 0;
-       uschar *t = sub - 1;
-       while (*(++t) != 0) { *t = tolower(*t); count++; }
-       yield = string_catn(yield, sub, count);
+       uschar * t = sub - 1;
+       while (*++t) *t = tolower(*t);
+       yield = string_catn(yield, sub, t-sub);
        break;
        }
+       {
+       uschar * s = sub;
+       }
 
       case EOP_UC:
        {
-       int count = 0;
-       uschar *t = sub - 1;
-       while (*(++t) != 0) { *t = toupper(*t); count++; }
-       yield = string_catn(yield, sub, count);
+       uschar * t = sub - 1;
+       while (*++t) *t = toupper(*t);
+       yield = string_catn(yield, sub, t-sub);
        break;
        }
 
@@ -7774,7 +7779,6 @@ NOT_ITEM: ;
            }
          else
            yield = string_cat(yield, sub);
-         break;
          }
 
        /* quote_lookuptype does lookup-specific quoting */
@@ -7806,526 +7810,533 @@ NOT_ITEM: ;
            }
 
          yield = string_cat(yield, sub);
-         break;
          }
+       break;
 
-       /* rx quote sticks in \ before any non-alphameric character so that
-       the insertion works in a regular expression. */
+      /* rx quote sticks in \ before any non-alphameric character so that
+      the insertion works in a regular expression. */
 
-       case EOP_RXQUOTE:
+      case EOP_RXQUOTE:
+       {
+       uschar *t = sub - 1;
+       while (*(++t) != 0)
          {
-         uschar *t = sub - 1;
-         while (*(++t) != 0)
-           {
-           if (!isalnum(*t))
-             yield = string_catn(yield, US"\\", 1);
-           yield = string_catn(yield, t, 1);
-           }
-         break;
+         if (!isalnum(*t))
+           yield = string_catn(yield, US"\\", 1);
+         yield = string_catn(yield, t, 1);
          }
+       break;
+       }
 
-       /* RFC 2047 encodes, assuming headers_charset (default ISO 8859-1) as
-       prescribed by the RFC, if there are characters that need to be encoded */
+      /* RFC 2047 encodes, assuming headers_charset (default ISO 8859-1) as
+      prescribed by the RFC, if there are characters that need to be encoded */
 
-       case EOP_RFC2047:
-         yield = string_cat(yield,
-                             parse_quote_2047(sub, Ustrlen(sub), headers_charset,
-                               FALSE));
-         break;
+      case EOP_RFC2047:
+       yield = string_cat(yield,
+                           parse_quote_2047(sub, Ustrlen(sub), headers_charset,
+                             FALSE));
+       break;
 
-       /* RFC 2047 decode */
+      /* RFC 2047 decode */
 
-       case EOP_RFC2047D:
+      case EOP_RFC2047D:
+       {
+       int len;
+       uschar *error;
+       uschar *decoded = rfc2047_decode(sub, check_rfc2047_length,
+         headers_charset, '?', &len, &error);
+       if (error)
          {
-         int len;
-         uschar *error;
-         uschar *decoded = rfc2047_decode(sub, check_rfc2047_length,
-           headers_charset, '?', &len, &error);
-         if (error)
-           {
-           expand_string_message = error;
-           goto EXPAND_FAILED;
-           }
-         yield = string_catn(yield, decoded, len);
-         break;
+         expand_string_message = error;
+         goto EXPAND_FAILED;
          }
+       yield = string_catn(yield, decoded, len);
+       break;
+       }
 
-       /* from_utf8 converts UTF-8 to 8859-1, turning non-existent chars into
-       underscores */
+      /* from_utf8 converts UTF-8 to 8859-1, turning non-existent chars into
+      underscores */
 
-       case EOP_FROM_UTF8:
+      case EOP_FROM_UTF8:
+       {
+       uschar * buff = store_get(4, sub);
+       while (*sub)
          {
-         uschar * buff = store_get(4, sub);
-         while (*sub)
-           {
-           int c;
-           GETUTF8INC(c, sub);
-           if (c > 255) c = '_';
-           buff[0] = c;
-           yield = string_catn(yield, buff, 1);
-           }
-         break;
+         int c;
+         GETUTF8INC(c, sub);
+         if (c > 255) c = '_';
+         buff[0] = c;
+         yield = string_catn(yield, buff, 1);
          }
+       break;
+       }
 
-       /* replace illegal UTF-8 sequences by replacement character  */
+      /* replace illegal UTF-8 sequences by replacement character  */
 
-       #define UTF8_REPLACEMENT_CHAR US"?"
+      #define UTF8_REPLACEMENT_CHAR US"?"
+
+      case EOP_UTF8CLEAN:
+       {
+       int seq_len = 0, index = 0, bytes_left = 0, complete;
+       u_long codepoint = (u_long)-1;
+       uschar seq_buff[4];                     /* accumulate utf-8 here */
 
-       case EOP_UTF8CLEAN:
+       /* Manually track tainting, as we deal in individual chars below */
+
+       if (!yield)
+         yield = string_get_tainted(Ustrlen(sub), sub);
+       else if (!yield->s || !yield->ptr)
          {
-         int seq_len = 0, index = 0, bytes_left = 0, complete;
-         u_long codepoint = (u_long)-1;
-         uschar seq_buff[4];                   /* accumulate utf-8 here */
+         yield->s = store_get(yield->size = Ustrlen(sub), sub);
+         gstring_reset(yield);
+         }
+       else if (is_incompatible(yield->s, sub))
+         gstring_rebuffer(yield, sub);
 
-         /* Manually track tainting, as we deal in individual chars below */
+       /* Check the UTF-8, byte-by-byte */
+
+       while (*sub)
+         {
+         complete = 0;
+         uschar c = *sub++;
 
-         if (!yield)
-           yield = string_get_tainted(Ustrlen(sub), sub);
-         else if (!yield->s || !yield->ptr)
+         if (bytes_left)
            {
-           yield->s = store_get(yield->size = Ustrlen(sub), sub);
-           gstring_reset(yield);
+           if ((c & 0xc0) != 0x80)
+                   /* wrong continuation byte; invalidate all bytes */
+             complete = 1; /* error */
+           else
+             {
+             codepoint = (codepoint << 6) | (c & 0x3f);
+             seq_buff[index++] = c;
+             if (--bytes_left == 0)            /* codepoint complete */
+               if(codepoint > 0x10FFFF)        /* is it too large? */
+                 complete = -1;        /* error (RFC3629 limit) */
+               else if ( (codepoint & 0x1FF800 ) == 0xD800 ) /* surrogate */
+                 /* A UTF-16 surrogate (which should be one of a pair that
+                 encode a Unicode codepoint that is outside the Basic
+                 Multilingual Plane).  Error, not UTF8.
+                 RFC2279.2 is slightly unclear on this, but 
+                 https://unicodebook.readthedocs.io/issues.html#strict-utf8-decoder
+                 says "Surrogates characters are also invalid in UTF-8:
+                 characters in U+D800—U+DFFF have to be rejected." */
+                 complete = -1;
+               else
+                 {             /* finished; output utf-8 sequence */
+                 yield = string_catn(yield, seq_buff, seq_len);
+                 index = 0;
+                 }
+             }
            }
-         else if (is_incompatible(yield->s, sub))
-           gstring_rebuffer(yield, sub);
-
-         /* Check the UTF-8, byte-by-byte */
-
-         while (*sub)
+         else  /* no bytes left: new sequence */
            {
-           complete = 0;
-           uschar c = *sub++;
-
-           if (bytes_left)
+           if (!(c & 0x80))    /* 1-byte sequence, US-ASCII, keep it */
              {
-             if ((c & 0xc0) != 0x80)
-                     /* wrong continuation byte; invalidate all bytes */
-               complete = 1; /* error */
+             yield = string_catn(yield, &c, 1);
+             continue;
+             }
+           if ((c & 0xe0) == 0xc0)             /* 2-byte sequence */
+             if (c == 0xc0 || c == 0xc1)       /* 0xc0 and 0xc1 are illegal */
+               complete = -1;
              else
                {
-               codepoint = (codepoint << 6) | (c & 0x3f);
-               seq_buff[index++] = c;
-               if (--bytes_left == 0)          /* codepoint complete */
-                 if(codepoint > 0x10FFFF)      /* is it too large? */
-                   complete = -1;      /* error (RFC3629 limit) */
-                 else if ( (codepoint & 0x1FF800 ) == 0xD800 ) /* surrogate */
-                   /* A UTF-16 surrogate (which should be one of a pair that
-                   encode a Unicode codepoint that is outside the Basic
-                   Multilingual Plane).  Error, not UTF8.
-                   RFC2279.2 is slightly unclear on this, but 
-                   https://unicodebook.readthedocs.io/issues.html#strict-utf8-decoder
-                   says "Surrogates characters are also invalid in UTF-8:
-                   characters in U+D800—U+DFFF have to be rejected." */
-                   complete = -1;
-                 else
-                   {           /* finished; output utf-8 sequence */
-                   yield = string_catn(yield, seq_buff, seq_len);
-                   index = 0;
-                   }
+               bytes_left = 1;
+               codepoint = c & 0x1f;
                }
+           else if ((c & 0xf0) == 0xe0)                /* 3-byte sequence */
+             {
+             bytes_left = 2;
+             codepoint = c & 0x0f;
              }
-           else        /* no bytes left: new sequence */
+           else if ((c & 0xf8) == 0xf0)                /* 4-byte sequence */
              {
-             if (!(c & 0x80))  /* 1-byte sequence, US-ASCII, keep it */
-               {
-               yield = string_catn(yield, &c, 1);
-               continue;
-               }
-             if ((c & 0xe0) == 0xc0)           /* 2-byte sequence */
-               if (c == 0xc0 || c == 0xc1)     /* 0xc0 and 0xc1 are illegal */
-                 complete = -1;
-               else
-                 {
-                 bytes_left = 1;
-                 codepoint = c & 0x1f;
-                 }
-             else if ((c & 0xf0) == 0xe0)              /* 3-byte sequence */
-               {
-               bytes_left = 2;
-               codepoint = c & 0x0f;
-               }
-             else if ((c & 0xf8) == 0xf0)              /* 4-byte sequence */
-               {
-               bytes_left = 3;
-               codepoint = c & 0x07;
-               }
-             else      /* invalid or too long (RFC3629 allows only 4 bytes) */
-               complete = -1;
+             bytes_left = 3;
+             codepoint = c & 0x07;
+             }
+           else        /* invalid or too long (RFC3629 allows only 4 bytes) */
+             complete = -1;
 
-             seq_buff[index++] = c;
-             seq_len = bytes_left + 1;
-             }         /* if(bytes_left) */
+           seq_buff[index++] = c;
+           seq_len = bytes_left + 1;
+           }           /* if(bytes_left) */
 
-           if (complete != 0)
-             {
-             bytes_left = index = 0;
-             yield = string_catn(yield, UTF8_REPLACEMENT_CHAR, 1);
-             }
-           if ((complete == 1) && ((c & 0x80) == 0))
-                         /* ASCII character follows incomplete sequence */
-               yield = string_catn(yield, &c, 1);
+         if (complete != 0)
+           {
+           bytes_left = index = 0;
+           yield = string_catn(yield, UTF8_REPLACEMENT_CHAR, 1);
            }
-         /* If given a sequence truncated mid-character, we also want to report ?
-         Eg, ${length_1:フィル} is one byte, not one character, so we expect
-         ${utf8clean:${length_1:フィル}} to yield '?' */
+         if ((complete == 1) && ((c & 0x80) == 0))
+                       /* ASCII character follows incomplete sequence */
+             yield = string_catn(yield, &c, 1);
+         }
+       /* If given a sequence truncated mid-character, we also want to report ?
+       Eg, ${length_1:フィル} is one byte, not one character, so we expect
+       ${utf8clean:${length_1:フィル}} to yield '?' */
 
-         if (bytes_left != 0)
-           yield = string_catn(yield, UTF8_REPLACEMENT_CHAR, 1);
+       if (bytes_left != 0)
+         yield = string_catn(yield, UTF8_REPLACEMENT_CHAR, 1);
 
-         break;
-         }
+       break;
+       }
 
 #ifdef SUPPORT_I18N
-       case EOP_UTF8_DOMAIN_TO_ALABEL:
+      case EOP_UTF8_DOMAIN_TO_ALABEL:
+       {
+       uschar * error = NULL;
+       uschar * s = string_domain_utf8_to_alabel(sub, &error);
+       if (error)
          {
-         uschar * error = NULL;
-         uschar * s = string_domain_utf8_to_alabel(sub, &error);
-         if (error)
-           {
-           expand_string_message = string_sprintf(
-             "error converting utf8 (%s) to alabel: %s",
-             string_printing(sub), error);
-           goto EXPAND_FAILED;
-           }
-         yield = string_cat(yield, s);
-         break;
+         expand_string_message = string_sprintf(
+           "error converting utf8 (%s) to alabel: %s",
+           string_printing(sub), error);
+         goto EXPAND_FAILED;
          }
+       yield = string_cat(yield, s);
+       break;
+       }
 
-       case EOP_UTF8_DOMAIN_FROM_ALABEL:
+      case EOP_UTF8_DOMAIN_FROM_ALABEL:
+       {
+       uschar * error = NULL;
+       uschar * s = string_domain_alabel_to_utf8(sub, &error);
+       if (error)
          {
-         uschar * error = NULL;
-         uschar * s = string_domain_alabel_to_utf8(sub, &error);
-         if (error)
-           {
-           expand_string_message = string_sprintf(
-             "error converting alabel (%s) to utf8: %s",
-             string_printing(sub), error);
-           goto EXPAND_FAILED;
-           }
-         yield = string_cat(yield, s);
-         break;
+         expand_string_message = string_sprintf(
+           "error converting alabel (%s) to utf8: %s",
+           string_printing(sub), error);
+         goto EXPAND_FAILED;
          }
+       yield = string_cat(yield, s);
+       break;
+       }
 
-       case EOP_UTF8_LOCALPART_TO_ALABEL:
+      case EOP_UTF8_LOCALPART_TO_ALABEL:
+       {
+       uschar * error = NULL;
+       uschar * s = string_localpart_utf8_to_alabel(sub, &error);
+       if (error)
          {
-         uschar * error = NULL;
-         uschar * s = string_localpart_utf8_to_alabel(sub, &error);
-         if (error)
-           {
-           expand_string_message = string_sprintf(
-             "error converting utf8 (%s) to alabel: %s",
-             string_printing(sub), error);
-           goto EXPAND_FAILED;
-           }
-         yield = string_cat(yield, s);
-         DEBUG(D_expand) debug_printf_indent("yield: '%Y'\n", yield);
-         break;
+         expand_string_message = string_sprintf(
+           "error converting utf8 (%s) to alabel: %s",
+           string_printing(sub), error);
+         goto EXPAND_FAILED;
          }
+       yield = string_cat(yield, s);
+       DEBUG(D_expand) debug_printf_indent("yield: '%Y'\n", yield);
+       break;
+       }
 
-       case EOP_UTF8_LOCALPART_FROM_ALABEL:
+      case EOP_UTF8_LOCALPART_FROM_ALABEL:
+       {
+       uschar * error = NULL;
+       uschar * s = string_localpart_alabel_to_utf8(sub, &error);
+       if (error)
          {
-         uschar * error = NULL;
-         uschar * s = string_localpart_alabel_to_utf8(sub, &error);
-         if (error)
-           {
-           expand_string_message = string_sprintf(
-             "error converting alabel (%s) to utf8: %s",
-             string_printing(sub), error);
-           goto EXPAND_FAILED;
-           }
-         yield = string_cat(yield, s);
-         break;
+         expand_string_message = string_sprintf(
+           "error converting alabel (%s) to utf8: %s",
+           string_printing(sub), error);
+         goto EXPAND_FAILED;
          }
+       yield = string_cat(yield, s);
+       break;
+       }
 #endif /* EXPERIMENTAL_INTERNATIONAL */
 
-       /* escape turns all non-printing characters into escape sequences. */
+      /* escape turns all non-printing characters into escape sequences. */
 
-       case EOP_ESCAPE:
-         {
-         const uschar * t = string_printing(sub);
-         yield = string_cat(yield, t);
-         break;
-         }
+      case EOP_ESCAPE:
+       {
+       const uschar * t = string_printing(sub);
+       yield = string_cat(yield, t);
+       break;
+       }
 
-       case EOP_ESCAPE8BIT:
-         {
-         uschar c;
+      case EOP_ESCAPE8BIT:
+       {
+       uschar c;
 
-         for (const uschar * s = sub; (c = *s); s++)
-           yield = c < 127 && c != '\\'
-             ? string_catn(yield, s, 1)
-             : string_fmt_append(yield, "\\%03o", c);
-         break;
-         }
+       for (const uschar * s = sub; (c = *s); s++)
+         yield = c < 127 && c != '\\'
+           ? string_catn(yield, s, 1)
+           : string_fmt_append(yield, "\\%03o", c);
+       break;
+       }
 
-       /* Handle numeric expression evaluation */
+      /* Handle numeric expression evaluation */
 
-       case EOP_EVAL:
-       case EOP_EVAL10:
+      case EOP_EVAL:
+      case EOP_EVAL10:
+       {
+       uschar *save_sub = sub;
+       uschar *error = NULL;
+       int_eximarith_t n = eval_expr(&sub, (c == EOP_EVAL10), &error, FALSE);
+       if (error)
          {
-         uschar *save_sub = sub;
-         uschar *error = NULL;
-         int_eximarith_t n = eval_expr(&sub, (c == EOP_EVAL10), &error, FALSE);
-         if (error)
-           {
-           expand_string_message = string_sprintf("error in expression "
-             "evaluation: %s (after processing \"%.*s\")", error,
-             (int)(sub-save_sub), save_sub);
-           goto EXPAND_FAILED;
-           }
-         yield = string_fmt_append(yield, PR_EXIM_ARITH, n);
-         break;
+         expand_string_message = string_sprintf("error in expression "
+           "evaluation: %s (after processing \"%.*s\")", error,
+           (int)(sub-save_sub), save_sub);
+         goto EXPAND_FAILED;
          }
+       yield = string_fmt_append(yield, PR_EXIM_ARITH, n);
+       break;
+       }
 
-       /* Handle time period formatting */
+      /* Handle time period formatting */
 
-       case EOP_TIME_EVAL:
+      case EOP_TIME_EVAL:
+       {
+       int n = readconf_readtime(sub, 0, FALSE);
+       if (n < 0)
          {
-         int n = readconf_readtime(sub, 0, FALSE);
-         if (n < 0)
-           {
-           expand_string_message = string_sprintf("string \"%s\" is not an "
-             "Exim time interval in \"%s\" operator", sub, name);
-           goto EXPAND_FAILED;
-           }
-         yield = string_fmt_append(yield, "%d", n);
-         break;
+         expand_string_message = string_sprintf("string \"%s\" is not an "
+           "Exim time interval in \"%s\" operator", sub, name);
+         goto EXPAND_FAILED;
          }
+       yield = string_fmt_append(yield, "%d", n);
+       break;
+       }
 
-       case EOP_TIME_INTERVAL:
+      case EOP_TIME_INTERVAL:
+       {
+       int n;
+       uschar *t = read_number(&n, sub);
+       if (*t != 0) /* Not A Number*/
          {
-         int n;
-         uschar *t = read_number(&n, sub);
-         if (*t != 0) /* Not A Number*/
-           {
-           expand_string_message = string_sprintf("string \"%s\" is not a "
-             "positive number in \"%s\" operator", sub, name);
-           goto EXPAND_FAILED;
-           }
-         t = readconf_printtime(n);
-         yield = string_cat(yield, t);
-         break;
+         expand_string_message = string_sprintf("string \"%s\" is not a "
+           "positive number in \"%s\" operator", sub, name);
+         goto EXPAND_FAILED;
          }
+       t = readconf_printtime(n);
+       yield = string_cat(yield, t);
+       break;
+       }
 
-       /* Convert string to base64 encoding */
+      /* Convert string to base64 encoding */
 
-       case EOP_STR2B64:
-       case EOP_BASE64:
-         {
+      case EOP_STR2B64:
+      case EOP_BASE64:
+       {
 #ifndef DISABLE_TLS
-         uschar * s = vp && *(void **)vp->value
-           ? tls_cert_der_b64(*(void **)vp->value)
-           : b64encode(CUS sub, Ustrlen(sub));
+       uschar * s = vp && *(void **)vp->value
+         ? tls_cert_der_b64(*(void **)vp->value)
+         : b64encode(CUS sub, Ustrlen(sub));
 #else
-         uschar * s = b64encode(CUS sub, Ustrlen(sub));
+       uschar * s = b64encode(CUS sub, Ustrlen(sub));
 #endif
-         yield = string_cat(yield, s);
-         break;
-         }
+       yield = string_cat(yield, s);
+       break;
+       }
 
-       case EOP_BASE64D:
+      case EOP_BASE64D:
+       {
+       uschar * s;
+       int len = b64decode(sub, &s, sub);
+       if (len < 0)
          {
-         uschar * s;
-         int len = b64decode(sub, &s, sub);
-         if (len < 0)
-           {
-           expand_string_message = string_sprintf("string \"%s\" is not "
-             "well-formed for \"%s\" operator", sub, name);
-           goto EXPAND_FAILED;
-           }
-         yield = string_cat(yield, s);
-         break;
+         expand_string_message = string_sprintf("string \"%s\" is not "
+           "well-formed for \"%s\" operator", sub, name);
+         goto EXPAND_FAILED;
          }
+       yield = string_cat(yield, s);
+       break;
+       }
 
-       /* strlen returns the length of the string */
+      /* strlen returns the length of the string */
 
-       case EOP_STRLEN:
-         yield = string_fmt_append(yield, "%d", Ustrlen(sub));
-         break;
+      case EOP_STRLEN:
+       yield = string_fmt_append(yield, "%d", Ustrlen(sub));
+       break;
+
+      /* length_n or l_n takes just the first n characters or the whole string,
+      whichever is the shorter;
+
+      substr_m_n, and s_m_n take n characters from offset m; negative m take
+      from the end; l_n is synonymous with s_0_n. If n is omitted in substr it
+      takes the rest, either to the right or to the left.
+
+      hash_n or h_n makes a hash of length n from the string, yielding n
+      characters from the set a-z; hash_n_m makes a hash of length n, but
+      uses m characters from the set a-zA-Z0-9.
+
+      nhash_n returns a single number between 0 and n-1 (in text form), while
+      nhash_n_m returns a div/mod hash as two numbers "a/b". The first lies
+      between 0 and n-1 and the second between 0 and m-1. */
+
+      case EOP_LENGTH:
+      case EOP_L:
+      case EOP_SUBSTR:
+      case EOP_S:
+      case EOP_HASH:
+      case EOP_H:
+      case EOP_NHASH:
+      case EOP_NH:
+       {
+       int sign = 1;
+       int value1 = 0;
+       int value2 = -1;
+       int *pn;
+       int len;
+       uschar *ret;
 
-       /* length_n or l_n takes just the first n characters or the whole string,
-       whichever is the shorter;
-
-       substr_m_n, and s_m_n take n characters from offset m; negative m take
-       from the end; l_n is synonymous with s_0_n. If n is omitted in substr it
-       takes the rest, either to the right or to the left.
-
-       hash_n or h_n makes a hash of length n from the string, yielding n
-       characters from the set a-z; hash_n_m makes a hash of length n, but
-       uses m characters from the set a-zA-Z0-9.
-
-       nhash_n returns a single number between 0 and n-1 (in text form), while
-       nhash_n_m returns a div/mod hash as two numbers "a/b". The first lies
-       between 0 and n-1 and the second between 0 and m-1. */
-
-       case EOP_LENGTH:
-       case EOP_L:
-       case EOP_SUBSTR:
-       case EOP_S:
-       case EOP_HASH:
-       case EOP_H:
-       case EOP_NHASH:
-       case EOP_NH:
+       if (!arg)
          {
-         int sign = 1;
-         int value1 = 0;
-         int value2 = -1;
-         int *pn;
-         int len;
-         uschar *ret;
+         expand_string_message = string_sprintf("missing values after %s",
+           name);
+         goto EXPAND_FAILED;
+         }
 
-         if (!arg)
-           {
-           expand_string_message = string_sprintf("missing values after %s",
-             name);
-           goto EXPAND_FAILED;
-           }
+       /* "length" has only one argument, effectively being synonymous with
+       substr_0_n. */
 
-         /* "length" has only one argument, effectively being synonymous with
-         substr_0_n. */
+       if (c == EOP_LENGTH || c == EOP_L)
+         {
+         pn = &value2;
+         value2 = 0;
+         }
 
-         if (c == EOP_LENGTH || c == EOP_L)
+       /* The others have one or two arguments; for "substr" the first may be
+       negative. The second being negative means "not supplied". */
+
+       else
+         {
+         pn = &value1;
+         if (name[0] == 's' && *arg == '-') { sign = -1; arg++; }
+         }
+
+       /* Read up to two numbers, separated by underscores */
+
+       ret = arg;
+       while (*arg != 0)
+         {
+         if (arg != ret && *arg == '_' && pn == &value1)
            {
            pn = &value2;
            value2 = 0;
+           if (arg[1] != 0) arg++;
            }
-
-         /* The others have one or two arguments; for "substr" the first may be
-         negative. The second being negative means "not supplied". */
-
-         else
+         else if (!isdigit(*arg))
            {
-           pn = &value1;
-           if (name[0] == 's' && *arg == '-') { sign = -1; arg++; }
+           expand_string_message =
+             string_sprintf("non-digit after underscore in \"%s\"", name);
+           goto EXPAND_FAILED;
            }
+         else *pn = (*pn)*10 + *arg++ - '0';
+         }
+       value1 *= sign;
 
-         /* Read up to two numbers, separated by underscores */
-
-         ret = arg;
-         while (*arg != 0)
-           {
-           if (arg != ret && *arg == '_' && pn == &value1)
-             {
-             pn = &value2;
-             value2 = 0;
-             if (arg[1] != 0) arg++;
-             }
-           else if (!isdigit(*arg))
-             {
-             expand_string_message =
-               string_sprintf("non-digit after underscore in \"%s\"", name);
-             goto EXPAND_FAILED;
-             }
-           else *pn = (*pn)*10 + *arg++ - '0';
-           }
-         value1 *= sign;
+       /* Perform the required operation */
 
-         /* Perform the required operation */
+       ret = c == EOP_HASH || c == EOP_H
+         ? compute_hash(sub, value1, value2, &len)
+         : c == EOP_NHASH || c == EOP_NH
+         ? compute_nhash(sub, value1, value2, &len)
+         : extract_substr(sub, value1, value2, &len);
+       if (!ret) goto EXPAND_FAILED;
 
-         ret = c == EOP_HASH || c == EOP_H
-           ? compute_hash(sub, value1, value2, &len)
-           : c == EOP_NHASH || c == EOP_NH
-           ? compute_nhash(sub, value1, value2, &len)
-           : extract_substr(sub, value1, value2, &len);
-         if (!ret) goto EXPAND_FAILED;
+       yield = string_catn(yield, ret, len);
+       break;
+       }
 
-         yield = string_catn(yield, ret, len);
-         break;
-         }
+      /* Stat a path */
 
-       /* Stat a path */
+      case EOP_STAT:
+       {
+       uschar smode[12];
+       uschar **modetable[3];
+       mode_t mode;
+       struct stat st;
 
-       case EOP_STAT:
+       if (expand_forbid & RDO_EXISTS)
          {
-         uschar smode[12];
-         uschar **modetable[3];
-         mode_t mode;
-         struct stat st;
+         expand_string_message = US"Use of the stat() expansion is not permitted";
+         goto EXPAND_FAILED;
+         }
 
-         if (expand_forbid & RDO_EXISTS)
-           {
-           expand_string_message = US"Use of the stat() expansion is not permitted";
-           goto EXPAND_FAILED;
-           }
+       if (stat(CS sub, &st) < 0)
+         {
+         expand_string_message = string_sprintf("stat(%s) failed: %s",
+           sub, strerror(errno));
+         goto EXPAND_FAILED;
+         }
+       mode = st.st_mode;
+       switch (mode & S_IFMT)
+         {
+         case S_IFIFO: smode[0] = 'p'; break;
+         case S_IFCHR: smode[0] = 'c'; break;
+         case S_IFDIR: smode[0] = 'd'; break;
+         case S_IFBLK: smode[0] = 'b'; break;
+         case S_IFREG: smode[0] = '-'; break;
+         default: smode[0] = '?'; break;
+         }
 
-         if (stat(CS sub, &st) < 0)
-           {
-           expand_string_message = string_sprintf("stat(%s) failed: %s",
-             sub, strerror(errno));
-           goto EXPAND_FAILED;
-           }
-         mode = st.st_mode;
-         switch (mode & S_IFMT)
-           {
-           case S_IFIFO: smode[0] = 'p'; break;
-           case S_IFCHR: smode[0] = 'c'; break;
-           case S_IFDIR: smode[0] = 'd'; break;
-           case S_IFBLK: smode[0] = 'b'; break;
-           case S_IFREG: smode[0] = '-'; break;
-           default: smode[0] = '?'; break;
-           }
+       modetable[0] = ((mode & 01000) == 0)? mtable_normal : mtable_sticky;
+       modetable[1] = ((mode & 02000) == 0)? mtable_normal : mtable_setid;
+       modetable[2] = ((mode & 04000) == 0)? mtable_normal : mtable_setid;
 
-         modetable[0] = ((mode & 01000) == 0)? mtable_normal : mtable_sticky;
-         modetable[1] = ((mode & 02000) == 0)? mtable_normal : mtable_setid;
-         modetable[2] = ((mode & 04000) == 0)? mtable_normal : mtable_setid;
+       for (int i = 0; i < 3; i++)
+         {
+         memcpy(CS(smode + 7 - i*3), CS(modetable[i][mode & 7]), 3);
+         mode >>= 3;
+         }
 
-         for (int i = 0; i < 3; i++)
-           {
-           memcpy(CS(smode + 7 - i*3), CS(modetable[i][mode & 7]), 3);
-           mode >>= 3;
-           }
+       smode[10] = 0;
+       yield = string_fmt_append(yield,
+         "mode=%04lo smode=%s inode=%ld device=%ld links=%ld "
+         "uid=%ld gid=%ld size=" OFF_T_FMT " atime=%ld mtime=%ld ctime=%ld",
+         (long)(st.st_mode & 077777), smode, (long)st.st_ino,
+         (long)st.st_dev, (long)st.st_nlink, (long)st.st_uid,
+         (long)st.st_gid, st.st_size, (long)st.st_atime,
+         (long)st.st_mtime, (long)st.st_ctime);
+       break;
+       }
 
-         smode[10] = 0;
-         yield = string_fmt_append(yield,
-           "mode=%04lo smode=%s inode=%ld device=%ld links=%ld "
-           "uid=%ld gid=%ld size=" OFF_T_FMT " atime=%ld mtime=%ld ctime=%ld",
-           (long)(st.st_mode & 077777), smode, (long)st.st_ino,
-           (long)st.st_dev, (long)st.st_nlink, (long)st.st_uid,
-           (long)st.st_gid, st.st_size, (long)st.st_atime,
-           (long)st.st_mtime, (long)st.st_ctime);
-         break;
-         }
+      /* vaguely random number less than N */
 
-       /* vaguely random number less than N */
+      case EOP_RANDINT:
+       {
+       int_eximarith_t max = expanded_string_integer(sub, TRUE);
 
-       case EOP_RANDINT:
-         {
-         int_eximarith_t max = expanded_string_integer(sub, TRUE);
+       if (expand_string_message)
+         goto EXPAND_FAILED;
+       yield = string_fmt_append(yield, "%d", vaguely_random_number((int)max));
+       break;
+       }
 
-         if (expand_string_message)
-           goto EXPAND_FAILED;
-         yield = string_fmt_append(yield, "%d", vaguely_random_number((int)max));
-         break;
-         }
+      /* Reverse IP, including IPv6 to dotted-nibble */
 
-       /* Reverse IP, including IPv6 to dotted-nibble */
+      case EOP_REVERSE_IP:
+       {
+       int family, maskptr;
+       uschar reversed[128];
 
-       case EOP_REVERSE_IP:
+       family = string_is_ip_address(sub, &maskptr);
+       if (family == 0)
          {
-         int family, maskptr;
-         uschar reversed[128];
-
-         family = string_is_ip_address(sub, &maskptr);
-         if (family == 0)
-           {
-           expand_string_message = string_sprintf(
-               "reverse_ip() not given an IP address [%s]", sub);
-           goto EXPAND_FAILED;
-           }
-         invert_address(reversed, sub);
-         yield = string_cat(yield, reversed);
-         break;
+         expand_string_message = string_sprintf(
+             "reverse_ip() not given an IP address [%s]", sub);
+         goto EXPAND_FAILED;
          }
+       invert_address(reversed, sub);
+       yield = string_cat(yield, reversed);
+       break;
+       }
 
-       /* Unknown operator */
+      case EOP_XTEXTD:
+       {
+       uschar * s;
+       int len = auth_xtextdecode(sub, &s);
+       yield = string_catn(yield, s, len);
+       break;
+       }
 
-       default:
-         expand_string_message =
-           string_sprintf("unknown expansion operator \"%s\"", name);
-         goto EXPAND_FAILED;
-       }       /* EOP_* switch */
+      /* Unknown operator */
+      default:
+       expand_string_message =
+         string_sprintf("unknown expansion operator \"%s\"", name);
+       goto EXPAND_FAILED;
+      }        /* EOP_* switch */
 
-       DEBUG(D_expand)
+      DEBUG(D_expand)
        {
        const uschar * res = string_from_gstring(yield);
        const uschar * s = res + expansion_start;
index 8f29eda3e2b66c09ee9b28ef01f37297f7140100..813ffdd7c7e4e5777ff04b160da31c9ce528d38c 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 2af5f87c2a3210f56412fd67ad1d665d93d9f6c8..60a853dcffb670138b95cef4b99a8bd72aaa8472 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2021 - 2022 */
+/* Copyright (c) The Exim Maintainers 2021 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2009 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 08fa24f3d868330fcb20f90b98f7c04de441df7c..cdf97f8bd1b6c25fb0d8846b5a569908aca39f7d 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 4e5fd2991db21e44d63e69d151085192db00a150..d51644e05b235263b78eeb8fc2a573b8280e32a4 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -467,7 +467,7 @@ uschar *acl_smtp_quit          = NULL;
 uschar *acl_smtp_rcpt          = NULL;
 uschar *acl_smtp_starttls      = NULL;
 uschar *acl_smtp_vrfy          = NULL;
-#ifdef EXPERIMENTAL_WELLKNOWN
+#ifndef DISABLE_WELLKNOWN
 uschar *acl_smtp_wellknown     = NULL;
 #endif
 
@@ -500,6 +500,9 @@ uschar *acl_wherenames[]       = { [ACL_WHERE_RCPT] =               US"RCPT",
                                    [ACL_WHERE_QUIT] =          US"QUIT",
                                    [ACL_WHERE_STARTTLS] =      US"STARTTLS",
                                    [ACL_WHERE_VRFY] =          US"VRFY",
+#ifndef DISABLE_WELLKNOWN
+                                  [ACL_WHERE_WELLKNOWN] =      US"WELLKNOWN",
+#endif
                                   [ACL_WHERE_DELIVERY] =       US"delivery",
                                   [ACL_WHERE_UNKNOWN] =        US"unknown"
                                  };
@@ -519,6 +522,9 @@ uschar *acl_wherecodes[]       = { [ACL_WHERE_RCPT] =       US"550",
                                    [ACL_WHERE_EXPN] =  US"550",
                                    [ACL_WHERE_HELO] =  US"550",
                                    [ACL_WHERE_STARTTLS] = US"550",
+#ifndef DISABLE_WELLKNOWN
+                                   [ACL_WHERE_WELLKNOWN] =US"550",
+#endif
                                    [ACL_WHERE_VRFY] =  US"252",
                                  };
 
@@ -999,9 +1005,6 @@ uschar *hosts_proxy            = NULL;
 #endif
 uschar *hosts_treat_as_local   = NULL;
 uschar *hosts_require_helo     = US"*";
-#ifdef EXPERIMENTAL_WELLKNOWN
-uschar *hosts_wellknown               = NULL;
-#endif
 #ifdef EXPERIMENTAL_XCLIENT
 uschar *hosts_xclient         = NULL;
 #endif
@@ -1669,6 +1672,11 @@ int     warning_count          = 0;
 const uschar *warnmsg_delay    = NULL;
 const uschar *warnmsg_recipients = NULL;
 
+#ifndef DISABLE_WELLKNOWN
+uschar *wellknown_advertise_hosts = NULL;
+uschar *wellknown_response     = NULL;
+#endif
+
 /*  End of globals.c */
 /* vi: aw ai sw=2
 */
index 30c8bbad42076e0862e9ef7bac8cbc023a219230..dc9d384dbf0e94c3ebba262cc87bb8d567214e58 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -342,6 +342,9 @@ extern uschar *acl_smtp_quit;          /* ACL run for QUIT */
 extern uschar *acl_smtp_rcpt;          /* ACL run for RCPT */
 extern uschar *acl_smtp_starttls;      /* ACL run for STARTTLS */
 extern uschar *acl_smtp_vrfy;          /* ACL run for VRFY */
+#ifndef DISABLE_WELLKNOWN
+extern uschar *acl_smtp_wellknown;     /* ACL run for WELLKNOWN */
+#endif
 extern tree_node *acl_var_c;           /* ACL connection variables */
 extern tree_node *acl_var_m;           /* ACL message variables */
 extern uschar *acl_verify_message;     /* User message for verify failure */
@@ -1134,4 +1137,9 @@ extern uschar *version_string;         /* Version string */
 
 extern int     warning_count;          /* Delay warnings sent for this msg */
 
+#ifndef DISABLE_WELLKNOWN
+extern uschar *wellknown_advertise_hosts;/* Allow WELLKNOWN command for specified hosts */
+extern uschar *wellknown_response;     /* SMTP response for WELLKNOWN verb */
+#endif
+
 /* End of globals.h */
index ed1b5566d5ad29d6414487fe8590796d2f68657a..12c370dba7661403aa32865e574ed9d4f0329f14 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -16,15 +16,328 @@ from Pierre A. Humblet, so Exim could be made to work with Cygwin.
 
 For convenience, the definitions of the structures used in the various hints
 databases are also kept in this file, which is used by the maintenance
-utilities as well as the main Exim binary. */
+utilities as well as the main Exim binary.
+
+A key/value store is supported (only).  Keys are strings; values arbitrary
+binary blobs.
+
+The API is:
+  Functions:
+    exim_dbopen                O_RDONLY/O_RDWR, optionally OR'd with O_CREAT
+    exim_dbclose
+    exim_dbget
+    exim_dbput
+    exim_dbputb                (non-overwriting put)
+    exim_dbdel
+    exim_dbcreate_cursor
+    exim_dbscan                (get, and bump cursor)
+    exim_dbdelete_cursor
+    exim_datum_init
+    exim_datum_size_get/set
+    exim_datum_data_get/set
+    exim_datum_free
+  Defines:
+    EXIM_DB            access handle
+    EXIM_CURSOR                datatype for cursor
+    EXIM_DATUM         datatype for "value"
+    EXIM_DBTYPE                text for logging & debuug
+
+Selection of the shim layer implementation, and backend, is by #defines.
+
+The users of this API are:
+  hintsdb interface    dbfn.c
+  hintsdb utilities    exim_dbutil.c and exim_dbmvuild.c
+  dbmdb lookup         lookups/dbmdb,c
+  autoreply transport  transports/autoreply.c
+
+Note that the dbmdb lookup use, bypassing the dbfn.c layer,
+means that no file-locking is done.
+XXX This feels like a layering violation; I don't see it commented on
+anywhere.
+
+Future: consider re-architecting to support caching of the open-handle
+for hintsdb uses (the dbmdb use gets that already).  This would need APIs
+for transaction locks.  Perhaps merge the implementation with the lookups
+layer, in some way, for the open-handle caching (since that manages closes
+required by Exim's process transisitions)?
+*/
 
 #ifndef HINTSDB_H
 #define HINTSDB_H
 
 
-#if defined(USE_TDB)
+#ifdef USE_SQLITE
+# if defined(USE_DB) || defined(USE_GDBM) || defined(USE_TDB)
+#  error USE_SQLITE conflict with alternate definition
+# endif
+
+/* ********************* sqlite3 interface ************************ */
+
+# include <sqlite3.h>
+
+/* Basic DB type */
+# define EXIM_DB sqlite3
+
+# define EXIM_CURSOR int
+
+# /* The datum type used for queries */
+# define EXIM_DATUM blob
+
+/* Some text for messages */
+# define EXIM_DBTYPE "sqlite3"
+
+# /* Access functions */
+
+/* EXIM_DBOPEN - return pointer to an EXIM_DB, NULL if failed */
+static inline EXIM_DB *
+exim_dbopen__(const uschar * name, const uschar * dirname, int flags,
+  unsigned mode)
+{
+EXIM_DB * dbp;
+int ret, sflags = flags & O_RDWR ? SQLITE_OPEN_READWRITE : SQLITE_OPEN_READONLY;
+if (flags & O_CREAT) sflags |= SQLITE_OPEN_CREATE;
+if ((ret = sqlite3_open_v2(CCS name, &dbp, sflags, NULL)) == SQLITE_OK)
+  {
+  sqlite3_busy_timeout(dbp, 5000);
+  if (flags & O_CREAT)
+    ret == sqlite3_exec(dbp,
+           "CREATE TABLE IF NOT EXISTS tbl (ky TEXT PRIMARY KEY, dat BLOB);",
+           NULL, NULL, NULL);
+  }
+//else
+//  fprintf(stderr, "sqlite3_open_v2: %s\n", sqlite3_errmsg(dbp));
+return ret == SQLITE_OK ? dbp : NULL;
+}
+
+/* EXIM_DBGET - returns TRUE if successful, FALSE otherwise */
+/* note we alloc'n'copy - the caller need not do so */
+/* result has a NUL appended, but the length is as per the DB */
+
+static inline BOOL
+exim_dbget__(EXIM_DB * dbp, const uschar * s, EXIM_DATUM * res)
+{
+sqlite3_stmt * statement;
+int ret;
+
+res->len = (size_t) -1;
+/* fprintf(stderr, "exim_dbget__(%s)\n", s); */
+if ((ret = sqlite3_prepare_v2(dbp, CCS s, -1, &statement, NULL)) != SQLITE_OK)
+  {
+/* fprintf(stderr, "prepare fail: %s\n", sqlite3_errmsg(dbp)); */
+  return FALSE;
+  }
+if (sqlite3_step(statement) != SQLITE_ROW)
+  {
+/* fprintf(stderr, "step fail: %s\n", sqlite3_errmsg(dbp)); */
+  sqlite3_finalize(statement);
+  return FALSE;
+  }
+
+res->len = sqlite3_column_bytes(statement, 0);
+res->data = store_get(res->len + 1, GET_TAINTED);
+memcpy(res->data, sqlite3_column_blob(statement, 0), res->len);
+res->data[res->len] = '\0';
+/* fprintf(stderr, "res %d bytes: '%.*s'\n", (int)res->len, (int)res->len, res->data); */
+sqlite3_finalize(statement);
+return TRUE;
+}
 
-# if defined(USE_DB) || defined(USE_GDBM)
+static inline BOOL
+exim_dbget(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * res)
+{
+# define FMT "SELECT dat FROM tbl WHERE ky = '%.*s';"
+uschar * qry;
+int i;
+BOOL ret;
+
+# ifdef COMPILE_UTILITY
+/* fprintf(stderr, "exim_dbget(k len %d '%.*s')\n", (int)key->len, (int)key->len, key->data); */
+qry = malloc(i = snprintf(NULL, 0, FMT, (int) key->len, key->data));
+snprintf(CS qry, i, FMT, (int) key->len, key->data);
+ret = exim_dbget__(dbp, qry, res);
+free(qry);
+# else
+/* fprintf(stderr, "exim_dbget(k len %d '%.*s')\n", (int)key->len, (int)key->len, key->data); */
+qry = string_sprintf(FMT, (int) key->len, key->data);
+ret = exim_dbget__(dbp, qry, res);
+# endif
+
+return ret;
+# undef FMT
+}
+
+/**/
+# define EXIM_DBPUTB_OK  0
+# define EXIM_DBPUTB_DUP (-1)
+
+static inline int
+exim_s_dbp(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data, const uschar * alt)
+{
+# define FMT "INSERT OR %s INTO tbl (ky,dat) VALUES ('%.*s', X'%.*s');"
+uschar * hex = store_get(data->len * 2, data->data), * qry;
+int res;
+
+for (const uschar * s = data->data, * t = s + data->len; s < t; s++)
+  sprintf(CS hex + 2 * (s - data->data), "%02X", *s);
+
+# ifdef COMPILE_UTILITY
+res = snprintf(NULL, 0, FMT,
+               alt, (int) key->len, key->data, (int)data->len * 2, hex);
+qry = malloc(res);
+snprintf(CS qry, res, FMT, alt, (int) key->len, key->data, (int)data->len * 2, hex);
+/* fprintf(stderr, "exim_s_dbp(%s)\n", qry); */
+res = sqlite3_exec(dbp, CS qry, NULL, NULL, NULL);
+free(qry);
+# else
+qry = string_sprintf(FMT, alt, (int) key->len, key->data, (int)data->len * 2, hex);
+/* fprintf(stderr, "exim_s_dbp(%s)\n", qry); */
+res = sqlite3_exec(dbp, CS qry, NULL, NULL, NULL);
+/* fprintf(stderr, "exim_s_dbp res %d\n", res); */
+# endif
+
+if (res != SQLITE_OK)
+  fprintf(stderr, "sqlite3_exec: %s\n", sqlite3_errmsg(dbp));
+
+return res == SQLITE_OK ? EXIM_DBPUTB_OK : EXIM_DBPUTB_DUP;
+# undef FMT
+}
+
+/* EXIM_DBPUT - returns nothing useful, assumes replace mode */
+
+static inline int
+exim_dbput(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data)
+{
+/* fprintf(stderr, "exim_dbput()\n"); */
+(void) exim_s_dbp(dbp, key, data, US"REPLACE");
+return 0;
+}
+
+/* EXIM_DBPUTB - non-overwriting for use by dbmbuild */
+
+/* Returns from EXIM_DBPUTB */
+
+static inline int
+exim_dbputb(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data)
+{
+return exim_s_dbp(dbp, key, data, US"ABORT");
+}
+
+/* EXIM_DBDEL */
+static inline int
+exim_dbdel(EXIM_DB * dbp, EXIM_DATUM * key)
+{
+# define FMT "DELETE FROM tbl WHERE ky = '%.*s';"
+uschar * qry;
+int res;
+
+# ifdef COMPILE_UTILITY
+res = snprintf(NULL, 0, FMT, (int) key->len, key->data);
+qry = malloc(res);
+snprintf(CS qry, res, FMT, (int) key->len, key->data);
+res = sqlite3_exec(dbp, CS qry, NULL, NULL, NULL);
+free(qry);
+# else
+qry = string_sprintf(FMT, (int) key->len, key->data);
+res = sqlite3_exec(dbp, CS qry, NULL, NULL, NULL);
+# endif
+
+return res;
+# undef FMT
+}
+
+
+/* EXIM_DBCREATE_CURSOR - initialize for scanning operation */
+/* Cursors are inefficiently emulated by repeating searches */
+
+static inline EXIM_CURSOR *
+exim_dbcreate_cursor(EXIM_DB * dbp)
+{
+EXIM_CURSOR * c = store_malloc(sizeof(int));
+*c = 0;
+return c;
+}
+
+/* EXIM_DBSCAN */
+/* Note that we return the (next) key, not the record value */
+static inline BOOL
+exim_dbscan(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * res, BOOL first,
+  EXIM_CURSOR * cursor)
+{
+# define FMT "SELECT ky FROM tbl ORDER BY ky LIMIT 1 OFFSET %d;"
+uschar * qry;
+int i;
+BOOL ret;
+
+# ifdef COMPILE_UTILITY
+qry = malloc(i = snprintf(NULL, 0, FMT, *cursor));
+snprintf(CS qry, i, FMT, *cursor);
+/* fprintf(stderr, "exim_dbscan(%s)\n", qry); */
+ret = exim_dbget__(dbp, qry, key);
+free(qry);
+/* fprintf(stderr, "exim_dbscan ret %c\n", ret ? 'T':'F'); */
+# else
+qry = string_sprintf(FMT, *cursor);
+/* fprintf(stderr, "exim_dbscan(%s)\n", qry); */
+ret = exim_dbget__(dbp, qry, key);
+/* fprintf(stderr, "exim_dbscan ret %c\n", ret ? 'T':'F'); */
+# endif
+if (ret) *cursor = *cursor + 1;
+return ret;
+# undef FMT
+}
+
+/* EXIM_DBDELETE_CURSOR - terminate scanning operation. */
+static inline void
+exim_dbdelete_cursor(EXIM_CURSOR * cursor)
+{ store_free(cursor); }
+
+
+/* EXIM_DBCLOSE */
+static void
+exim_dbclose__(EXIM_DB * db)
+{ sqlite3_close(db); }
+
+
+/* Datum access */
+
+static uschar *
+exim_datum_data_get(EXIM_DATUM * dp)
+{ return US dp->data; }
+static void
+exim_datum_data_set(EXIM_DATUM * dp, void * s)
+{ dp->data = s; }
+static unsigned
+exim_datum_size_get(EXIM_DATUM * dp)
+{ return dp->len; }
+static void
+exim_datum_size_set(EXIM_DATUM * dp, unsigned n)
+{ dp->len = n; }
+
+
+
+static inline void
+exim_datum_init(EXIM_DATUM * dp)
+{ dp->data = NULL; }                   /* compiler quietening */
+
+/* No free needed for a datum */
+
+static inline void
+exim_datum_free(EXIM_DATUM * dp)
+{ }
+
+/* size limit */
+
+# define EXIM_DB_RLIMIT        150
+
+
+
+
+
+
+#elif defined(USE_TDB)
+
+# if defined(USE_DB) || defined(USE_GDBM) || defined(USE_SQLITE)
 #  error USE_TDB conflict with alternate definition
 # endif
 
@@ -161,7 +474,7 @@ d->dptr = NULL;
 
 #elif defined USE_DB
 
-# if defined(USE_TDB) || defined(USE_GDBM)
+# if defined(USE_TDB) || defined(USE_GDBM) || defined(USE_SQLITE)
 #  error USE_DB conflict with alternate definition
 # endif
 
@@ -243,8 +556,9 @@ if (db_create(&b, dbp, 0) == 0)
   {
   dbp->app_private = b;
   if (b->open(b, NULL, CS name, NULL,
-             flags == O_RDONLY ? DB_UNKNOWN : DB_HASH,
-             flags == O_RDONLY ? DB_RDONLY : DB_CREATE,
+             flags & O_CREAT ? DB_HASH : DB_UNKNOWN,
+             flags & O_CREAT ? DB_CREATE
+             : flags & (O_WRONLY|O_RDWR) ? 0 : DB_RDONLY,
              mode) == 0
          )
     return dbp;
@@ -377,8 +691,9 @@ EXIM_DB * dbp;
 return db_create(&dbp, NULL, 0) == 0
   && (  dbp->set_errcall(dbp, dbfn_bdb_error_callback),
        dbp->open(dbp, CS name, NULL,
-         flags == O_RDONLY ? DB_UNKNOWN : DB_HASH,
-         flags == O_RDONLY ? DB_RDONLY : DB_CREATE,
+         flags & O_CREAT ? DB_HASH : DB_UNKNOWN,
+         flags & O_CREAT ? DB_CREATE
+         : flags & (O_WRONLY|O_RDWR) ? 0 : DB_RDONLY,
          mode)
      ) == 0
   ? dbp : NULL;
@@ -488,9 +803,9 @@ exim_datum_free(EXIM_DATUM * d)
 /********************* gdbm interface definitions **********************/
 
 #elif defined USE_GDBM
-/*XXX TODO: exim's locfile not needed */
+/*XXX TODO: exim's lockfile not needed? */
 
-# if defined(USE_TDB) || defined(USE_DB)
+# if defined(USE_TDB) || defined(USE_DB) || defined(USE_SQLITE)
 #  error USE_GDBM conflict with alternate definition
 # endif
 
@@ -525,8 +840,7 @@ if (dbp)
   dbp->lkey.dptr = NULL;
   dbp->gdbm = gdbm_open(CS name, 0,
     flags & O_CREAT ? GDBM_WRCREAT
-    : flags & (O_RDWR|O_WRONLY) ? GDBM_WRITER
-    : GDBM_READER,
+    : flags & (O_RDWR|O_WRONLY) ? GDBM_WRITER : GDBM_READER,
     mode, 0);
   if (dbp->gdbm) return dbp;
   free(dbp);
@@ -632,8 +946,8 @@ exim_datum_free(EXIM_DATUM * d)
 
 
 
-/* If none of USE_DB, USG_GDBM, or USE_TDB are set, the default is the NDBM
-interface (which seems to be a wrapper for GDBM) */
+/* If none of USE_DB, USG_GDBM, USE_SQLITE or USE_TDB are set,
+the default is the NDBM interface (which seems to be a wrapper for GDBM) */
 
 
 /********************* ndbm interface definitions **********************/
@@ -821,3 +1135,5 @@ exim_dbclose__(dbp);
 
 #endif /* whole file */
 /* End of hintsdb.h */
+/* vi: aw ai sw=2
+*/
index 5da311c2be9e36a358dc9d1ffac3568fcc8ed54e..5f50dfd5f38342a0d2d82eaadc5a7ab93599ed5c 100644 (file)
@@ -2,8 +2,8 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
-/* Copyright (c) The Exim Maintainers 2020 - 2021 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
 
index 1b416997c5548b0e9de375c446a486108371c80a..5979718148813926a9c097215d2e98bc1fd77324 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index ed9f26d625545458bf9c4e28d7c2229a556f2d44..11f271d1bfff15100577f412265753c792362b73 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2020 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 1a77f2cdbb5d7081f5bd1ba619426535518d84b4..e696b2cc7ab8f61068df59a0a10c2c03f7c65a19 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 96665b6e4e68d7204b29db0e1fb16409a1b8623a..d68110b126dd21cb4b835aa119113bcc319e43e2 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -49,7 +49,7 @@ dbmdb_check(void *handle, const uschar *filename, int modemask, uid_t *owners,
 {
 int rc;
 
-#if defined(USE_DB) || defined(USE_TDB) || defined(USE_GDBM)
+#if defined(USE_DB) || defined(USE_TDB) || defined(USE_GDBM) || defined(USE_SQLITE)
 rc = lf_check_file(-1, filename, S_IFREG, modemask, owners, owngroups,
   "dbm", errmsg);
 #else
index af1ad9dab5ee2604a9fe756dae2f021b179fb020..5d441de431fef2cde96de4062838ef8922d23785 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 74439bfc874aaf86945822145ce188058563fbdc..1229368baea66a4fe0a1d61fb8ae873553ac2cc7 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2015 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -70,6 +70,7 @@ return FALSE;
 #define FILTER_FILE    BIT(2)
 #define FILTER_DIR     BIT(3)
 #define FILTER_SUBDIR  BIT(4)
+#define ALLOW_PATH     BIT(5)
 
 /* See local README for interface description. We use lstat() instead of
 scanning the directory, as it is hopefully faster to let the OS do the scanning
@@ -85,13 +86,6 @@ int save_errno;
 uschar * filename;
 unsigned flags = 0;
 
-if (Ustrchr(keystring, '/') != 0)
-  {
-  *errmsg = string_sprintf("key for dsearch lookup contains a slash: %s",
-    keystring);
-  return DEFER;
-  }
-
 if (opts)
   {
   int sep = ',';
@@ -110,6 +104,24 @@ if (opts)
       else if (Ustrcmp(ele, "subdir") == 0)
        flags |= FILTER_TYPE | FILTER_SUBDIR;   /* like dir but not "." or ".." */
       }
+    else if (Ustrcmp(ele, "key=path") == 0)
+      flags |= ALLOW_PATH;
+  }
+
+if (flags & ALLOW_PATH)
+  {
+  if (Ustrstr(keystring, "/../") != NULL || Ustrstr(keystring, "/./"))
+    {
+    *errmsg = string_sprintf(
+      "key for dsearch lookup contains bad component: %s", keystring);
+    return DEFER;
+    }
+  }
+else if (Ustrchr(keystring, '/') != NULL)
+  {
+  *errmsg = string_sprintf("key for dsearch lookup contains a slash: %s",
+    keystring);
+  return DEFER;
   }
 
 filename = string_sprintf("%s/%s", dirname, keystring);
@@ -120,7 +132,7 @@ if (  Ulstat(filename, &statbuf) >= 0
                 && S_ISDIR(statbuf.st_mode)
         && (  flags & FILTER_DIR
            || keystring[0] != '.'
-           || keystring[1] && keystring[1] != '.'
+           || keystring[1] && (keystring[1] != '.' || keystring[2])
    )  )  )  )
   {
   /* Since the filename exists in the filesystem, we can return a
@@ -189,3 +201,5 @@ static lookup_info *_lookup_list[] = { &_lookup_info };
 lookup_module_info dsearch_lookup_module_info = { LOOKUP_MODULE_INFO_MAGIC, _lookup_list, 1 };
 
 /* End of lookups/dsearch.c */
+/* vi: aw ai sw=2
+*/
index 90cde6c86292863be20cc363142d7b1ea64a8309..0c29b6c9a737a791e3decb230ba05d5a01b31396 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 7b78de916971b74dd357ff9e10376e233cc113cf..6728fecc71205fdd912ec17c8ba9e34c7532bae6 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index c25b7c0ee639384ff14e7ffda907285bee720f0d..9eb936b25da466350210a72eea713af62387538f 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2015 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 53b479142668ebceec2497cc7726e6c4f6c275f3..a97496ba66db937100d41fb77eb3fe1333b9e9e8 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 6c7af4225eac0bd71c0209dc438ee2140166fd5c..9f6c9e5aa1ae5fd07eafd89f0a00e4d132de095b 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -34,7 +34,7 @@ if (!filename || *filename != '/')
   *errmsg = US"absolute file name expected for \"sqlite\" lookup";
 else if ((ret = sqlite3_open(CCS filename, &db)) != 0)
   {
-  *errmsg = (void *)sqlite3_errmsg(db);
+  *errmsg = string_copy(US sqlite3_errmsg(db));
   sqlite3_close(db);
   db = NULL;
   DEBUG(D_lookup) debug_printf_indent("Error opening database: %s\n", *errmsg);
index 9b354d345f57e34d81654548775f5775407d3b01..5bea91228c69d60bd29ff5ace0751746ce025903 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) Jeremy Harris 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -214,6 +214,9 @@ due to conflicts with other common macros. */
 #ifndef DISABLE_TLS_RESUME
   builtin_macro_create(US"_HAVE_TLS_RESUME");
 #endif
+#ifndef DISABLE_WELLKNOWN
+  builtin_macro_create(US"_HAVE_WELLKNOWN");
+#endif
 #ifdef EXPERIMENTAL_XCLIENT
   builtin_macro_create(US"_HAVE_XCLIENT");
 #endif
index 2938b2523536dea369da92d749eaa029de9b4189..1a619b951eff4c8e72b648fcca52d8a1224f97cd 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -828,6 +828,9 @@ enum { SCH_NONE, SCH_AUTH, SCH_DATA, SCH_BDAT,
        SCH_EHLO, SCH_ETRN, SCH_EXPN, SCH_HELO,
        SCH_HELP, SCH_MAIL, SCH_NOOP, SCH_QUIT, SCH_RCPT, SCH_RSET, SCH_STARTTLS,
        SCH_VRFY,
+#ifndef DISABLE_WELLKNOWN
+       SCH_WELLKNOWN,
+#endif
 #ifdef EXPERIMENTAL_XCLIENT
        SCH_XCLIENT,
 #endif
@@ -972,6 +975,9 @@ enum { ACL_WHERE_RCPT,       /* Some controls are for RCPT only */
        ACL_WHERE_NOTQUIT,
        ACL_WHERE_QUIT,
        ACL_WHERE_STARTTLS,
+#ifndef DISABLE_WELLKNOWN
+       ACL_WHERE_WELLKNOWN,
+#endif
        ACL_WHERE_VRFY,
 
        ACL_WHERE_DELIVERY,
@@ -1001,6 +1007,9 @@ enum { ACL_WHERE_RCPT,       /* Some controls are for RCPT only */
 #define ACL_BIT_QUIT           BIT(ACL_WHERE_QUIT)
 #define ACL_BIT_STARTTLS       BIT(ACL_WHERE_STARTTLS)
 #define ACL_BIT_VRFY           BIT(ACL_WHERE_VRFY)
+#ifndef DISABLE_WELLKNOWN
+# define ACL_BIT_WELLKNOWN     BIT(ACL_WHERE_WELLKNOWN)
+#endif
 #define ACL_BIT_DELIVERY       BIT(ACL_WHERE_DELIVERY)
 #define ACL_BIT_UNKNOWN                BIT(ACL_WHERE_UNKNOWN)
 
@@ -1201,3 +1210,5 @@ When doing en extended loop of matching, release store periodically. */
   DEBUG(D_expand) debug_printf("try option " name "\n");
 
 /* End of macros.h */
+/* vi: aw ai sw=2
+*/
index 760278079c71342e5ef8efe4d8981ab17baa5389..408e2299bece65e21c02d73dce12ac45bb290274 100644 (file)
@@ -3,7 +3,7 @@
 *************************************************/
 
 /*
- * Copyright (c) The Exim Maintainers 2015 - 2023
+ * Copyright (c) The Exim Maintainers 2015 - 2024
  * Copyright (c) Tom Kistner <tom@duncanthrax.net> 2003 - 2015
  * License: GPL
  * SPDX-License-Identifier: GPL-2.0-or-later
index 956ce60ad01af635b38b3670ca13436d8c71225e..4f4f2c777bb940c0eeb052645be53c97d233953d 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 641540839d866924f49badbd4e59c3dd24c2f980..19d29190bff5222f2664e32136153b21a082db98 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index c4c86df9516e9f53ebe9667e122dc6ff01e13bf7..dce5fca3df10f61d00949082a8bebd5bc3da23a3 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2021 - 2023 */
+/* Copyright (c) The Exim Maintainers 2021 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 4a75d229e8bd5011f8fe1bd0661da1123eba93ae..e86dc4130007de58402af6dd9780af8f460e21b6 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 565ee068eaec42e5458522c407b464a3e47dafea..4fb22a1133557e83c51895ec232f68fb6e9448b6 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  PDKIM - a RFC4871 (DKIM) implementation
  *
- *  Copyright (c) The Exim Maintainers 2021 - 2023
+ *  Copyright (c) The Exim Maintainers 2021 - 2024
  *  Copyright (C) 2016 - 2020  Jeremy Harris <jgh@exim.org>
  *  Copyright (C) 2009 - 2016  Tom Kistner <tom@duncanthrax.net>
  *  SPDX-License-Identifier: GPL-2.0-or-later
index e2d3bace0c9621e9a38f62c5fcf04ca9aa15e8e4..46c98c8d006320f9a665ba1c021fea991bec717d 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 2c3d014f5638405404e06bacd0f2d7f73fcb4129..6e72a33d53b7d8fc74d1cf4fc2fdae28e9c6b5cb 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 7d329c5807df8eb0761a07042adcacb20f95673a..776805ca4435dd698fc73c9383fce9790362e9b4 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim maintainers 2020 - 2022 */
+/* Copyright (c) The Exim maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index d87a56f3d6e5562cc44f313ace3366d0318ba38a..4ed042df92abf207603d77829560f01da6fb0e9a 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -66,6 +66,9 @@ static optionlist optionlist_config[] = {
   { "acl_smtp_starttls",        opt_stringptr,   {&acl_smtp_starttls} },
 #endif
   { "acl_smtp_vrfy",            opt_stringptr,   {&acl_smtp_vrfy} },
+#ifndef DISABLE_WELLKNOWN
+  { "acl_smtp_wellknown",       opt_stringptr,   {&acl_smtp_wellknown} },
+#endif
   { "add_environment",          opt_stringptr,   {&add_environment} },
   { "admin_groups",             opt_gidlist,     {&admin_groups} },
   { "allow_domain_literals",    opt_bool,        {&allow_domain_literals} },
@@ -402,6 +405,9 @@ static optionlist optionlist_config[] = {
   { "uucp_from_pattern",        opt_stringptr,   {&uucp_from_pattern} },
   { "uucp_from_sender",         opt_stringptr,   {&uucp_from_sender} },
   { "warn_message_file",        opt_stringptr,   {&warn_message_file} },
+#ifndef DISABLE_WELLKNOWN
+  { "wellknown_advertise_hosts",opt_stringptr,  {&wellknown_advertise_hosts} },
+#endif
   { "write_rejectlog",          opt_bool,        {&write_rejectlog} },
 };
 
index 285ab8dbd2582a3416f91a8cf0a0337a295b7be4..94e2928b9abf388101c5f8b0293ea4aa3789614c 100644 (file)
@@ -3,7 +3,7 @@
 *************************************************/
 
 /*
- * Copyright (c) The Exim Maintainers 2016 - 2023
+ * Copyright (c) The Exim Maintainers 2016 - 2024
  * Copyright (c) Tom Kistner <tom@duncanthrax.net> 2003-2015
  * License: GPL
  * SPDX-License-Identifier: GPL-2.0-or-later
index 6ccef4f98b0d91addda7d1e5ef1731cbd347dc55..f180c779e5de6b4c94cad4a9f182396f1b998047 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index ce35c43655dd43fe8ed6f24e4a306d8fade3c12b..dd3b4fa743a13b03664adfa06720de71f6c353f5 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2021 - 2023 */
+/* Copyright (c) The Exim Maintainers 2021 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 1ab25150acece45082d3df6f06564e3a9100c9c6..94178af73bdbee784d411aa5456e7438dd56d442 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index afd43d8664e9bf6c4f68dfd464a217fe39cbd441..887ef9975847438a93b0016c89c56e4d32956310 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 9766e5e103140c05ab0b83d47e886ce0c1ea3595..6eb66e377d30f32d95b17c623f5715e05cbc5442 100644 (file)
@@ -2,8 +2,8 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
-/* Copyright (c) The Exim Maintainers 2020 - 2021 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
 
index d3c4349b6b76a0b002303656ec56428c325865cb..ef82438183124026d69ef74df0b266308d25687b 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 16e096b406c5a010663c9f84d1d98a271039df9c..27c7fe6b34dde99993918c414655f369a7cb3b1f 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index b88212e5c557b97e839b79f1062462b070a2e3dd..5078fdc00962cf1820d0eefb74871230cb956b81 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index ffd6eeaca817b9eb5636cc75d19f2b0b8c297b97..d07ea3490f1cf7eb71a547f80a33419b99747317 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 39645cd2306d3759d73b087f3067a84f83cc7515..267a8ec5f2475ac3cbd30c1af2351c9942ac0bed 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 799bee06236e1fdfd0560d6eb9ee8f415db54ea7..e1ee8bc334e255f81a089ea1e8121abe9b595d11 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 6ba613215e9026a5a2bf5a5f2b36a76d18458cc2..a3074f807c919071d44ce495227e81706c73cbdf 100644 (file)
@@ -2,6 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
+/* Copyright (c) The Exim Maintainers 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2009 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 40d4cde1c69c84635461998ca41c237faa11a2e7..597745f96ed463b241403276fbc86ce60771d523 100644 (file)
@@ -2,6 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
+/* Copyright (c) The Exim Maintainers 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2015 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 792b9b5f30e8fcdadd23a917ae407f9f1fc3e93b..6f8f7c7c30865c70d1173f5427612b95954fc540 100644 (file)
@@ -2,8 +2,8 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
-/* Copyright (c) The Exim Maintainers 2020 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
 
index d379668655e9a16e44c719e243c6f71eb8b1e590..fa1c2732f1c969acca8c521dc14f8497563a8b7f 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2021 - 2022 */
+/* Copyright (c) The Exim Maintainers 2021 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2009 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index d0eb84b3bcc66c617cecd416665e4b1657a347b7..6c28b390eb424d5331d5d2101cc01da9431cefb2 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2015 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index f65ab6603a0a9cd08232c3b8cfb3eeca9cb856c9..c52d3f4d64da3ee3679d53182783bff8bc284452 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -86,6 +86,9 @@ enum {
   /* These commands need not be synchronized when pipelining */
 
   MAIL_CMD, RCPT_CMD, RSET_CMD,
+#ifndef DISABLE_WELLKNOWN
+  WELLKNOWN_CMD,
+#endif
 
   /* This is a dummy to identify the non-sync commands when not pipelining */
 
@@ -121,7 +124,8 @@ enum {
   /* These are specials that don't correspond to actual commands */
 
   EOF_CMD, OTHER_CMD, BADARG_CMD, BADCHAR_CMD, BADSYN_CMD,
-  TOO_MANY_NONMAIL_CMD };
+  TOO_MANY_NONMAIL_CMD
+};
 
 
 /* This is a convenience macro for adding the identity of an SMTP command
@@ -230,7 +234,10 @@ static smtp_cmd_list cmd_list[] = {
   { "etrn",       sizeof("etrn")-1,       ETRN_CMD, TRUE,  FALSE },
   { "vrfy",       sizeof("vrfy")-1,       VRFY_CMD, TRUE,  FALSE },
   { "expn",       sizeof("expn")-1,       EXPN_CMD, TRUE,  FALSE },
-  { "help",       sizeof("help")-1,       HELP_CMD, TRUE,  FALSE }
+  { "help",       sizeof("help")-1,       HELP_CMD, TRUE,  FALSE },
+#ifndef DISABLE_WELLKNOWN
+  { "wellknown",  sizeof("wellknown")-1,  WELLKNOWN_CMD, TRUE,  FALSE },
+#endif
 };
 
 /* This list of names is used for performing the smtp_no_mail logging action. */
@@ -253,6 +260,9 @@ uschar * smtp_names[] =
   [SCH_RSET] = US"RSET",
   [SCH_STARTTLS] = US"STARTTLS",
   [SCH_VRFY] = US"VRFY",
+#ifndef DISABLE_WELLKNOWN
+  [SCH_WELLKNOWN] = US"WELLKNOWN",
+#endif
 #ifdef EXPERIMENTAL_XCLIENT
   [SCH_XCLIENT] = US"XCLIENT",
 #endif
@@ -1946,7 +1956,7 @@ while (done <= 0)
     case HELP_CMD:
     case NOOP_CMD:
     case ETRN_CMD:
-#ifdef EXPERIMENTAL_WELLKNOWN
+#ifndef DISABLE_WELLKNOWN
     case WELLKNOWN_CMD:
 #endif
       bsmtp_transaction_linecount = receive_linecount;
@@ -2057,9 +2067,12 @@ log_connect_tls_drop(const uschar * what, const uschar * log_msg)
 {
 if (log_reject_target)
   {
+#ifdef DISABLE_TLS
+  uschar * tls = NULL;
+#else
   gstring * g = s_tlslog(NULL);
   uschar * tls = string_from_gstring(g);
-
+#endif
   log_write(L_connection_reject,
     log_reject_target, "%s%s%s dropped by %s%s%s",
     LOGGING(dnssec) && sender_host_dnssec ? US" DS" : US"",
@@ -2832,10 +2845,8 @@ if (fl.rcpt_in_progress)
 We only handle pipelining these responses as far as nonfinal/final groups,
 not the whole MAIL/RCPT/DATA response set. */
 
-for (;;)
-  {
-  uschar *nl = Ustrchr(msg, '\n');
-  if (!nl)
+for (uschar * nl;;)
+  if (!(nl = Ustrchr(msg, '\n')))
     {
     smtp_printf("%.3s%c%.*s%s\r\n", !final, code, final ? ' ':'-', esclen, esc, msg);
     return;
@@ -2852,7 +2863,6 @@ for (;;)
     msg = nl + 1;
     Uskip_whitespace(&msg);
     }
-  }
 }
 
 
@@ -2971,7 +2981,8 @@ smtp_code = rc == FAIL ? acl_wherecodes[where] : US"451";
 smtp_message_code(&smtp_code, &codelen, &user_msg, &log_msg,
   where != ACL_WHERE_VRFY);
 
-/* We used to have sender_address here; however, there was a bug that was not
+/* Get info for logging.
+We used to have sender_address here; however, there was a bug that was not
 updating sender_address after a rewrite during a verify. When this bug was
 fixed, sender_address at this point became the rewritten address. I'm not sure
 this is what should be logged, so I've changed to logging the unrewritten
@@ -2996,7 +3007,7 @@ switch (where)
       {
       uschar * s = smtp_cmd_data;
       Uskip_nonwhite(&s);
-      lim = s - smtp_cmd_data; /* atop after method */
+      lim = s - smtp_cmd_data; /* stop after method */
       }
     what = string_sprintf("%s %.*s", acl_wherenames[where], lim, place);
     }
@@ -3375,7 +3386,7 @@ Returns:       nothing
 */
 
 static void
-smtp_user_msg(uschar *code, uschar *user_msg)
+smtp_user_msg(uschar * code, uschar * user_msg)
 {
 int len = 3;
 smtp_message_code(&code, &len, &user_msg, NULL, TRUE);
@@ -3581,6 +3592,36 @@ if (chunking_state > CHUNKING_OFFERED)
 }
 
 
+#ifndef DISABLE_WELLKNOWN
+static int
+smtp_wellknown_handler(void)
+{
+if (verify_check_host(&wellknown_advertise_hosts) != FAIL)
+  {
+  GET_OPTION("acl_smtp_wellknown");
+  if (acl_smtp_wellknown)
+    {
+    uschar * user_msg = NULL, * log_msg;
+    int rc;
+
+    if ((rc = acl_check(ACL_WHERE_WELLKNOWN, NULL, acl_smtp_wellknown,
+               &user_msg, &log_msg)) != OK)
+      return smtp_handle_acl_fail(ACL_WHERE_WELLKNOWN, rc, user_msg, log_msg);
+    else if (!wellknown_response)
+      return smtp_handle_acl_fail(ACL_WHERE_WELLKNOWN, ERROR, user_msg, log_msg);
+    smtp_user_msg(US"250", wellknown_response);
+    return 0;
+    }
+  }
+
+smtp_printf("554 not permitted\r\n", SP_NO_MORE);
+log_write(0, LOG_MAIN|LOG_REJECT, "rejected \"%s\" from %s",
+             smtp_cmd_buffer, sender_helo_name, host_and_ident(FALSE));
+return 0;
+}
+#endif
+
+
 static int
 expand_mailmax(const uschar * s)
 {
@@ -3686,9 +3727,8 @@ while (done <= 0)
   void (*oldsignal)(int);
   pid_t pid;
   int start, end, sender_domain, recipient_domain;
-  int rc;
-  int c;
-  uschar *orcpt = NULL;
+  int rc, c;
+  uschar * orcpt = NULL;
   int dsn_flags;
   gstring * g;
 
@@ -4213,12 +4253,12 @@ while (done <= 0)
          chunking_state = CHUNKING_OFFERED;
          }
 
+#ifndef DISABLE_TLS
        /* Advertise TLS (Transport Level Security) aka SSL (Secure Socket Layer)
        if it has been included in the binary, and the host matches
        tls_advertise_hosts. We must *not* advertise if we are already in a
        secure connection. */
 
-#ifndef DISABLE_TLS
        if (tls_in.active.sock < 0 &&
            verify_check_host(&tls_advertise_hosts) != FAIL)
          {
@@ -4252,6 +4292,13 @@ while (done <= 0)
          fl.smtputf8_advertised = TRUE;
          }
 #endif
+#ifndef DISABLE_WELLKNOWN
+       if (verify_check_host(&wellknown_advertise_hosts) != FAIL)
+         {
+         g = string_catn(g, smtp_code, 3);
+         g = string_catn(g, US"-WELLKNOWN\r\n", 12);
+         }
+#endif
 
        /* Finish off the multiline reply with one that is always available. */
 
@@ -4299,6 +4346,14 @@ while (done <= 0)
       toomany = FALSE;
       break;   /* HELO/EHLO */
 
+#ifndef DISABLE_WELLKNOWN
+    case WELLKNOWN_CMD:
+      HAD(SCH_WELLKNOWN);
+      smtp_mailcmd_count++;
+      smtp_wellknown_handler();
+      break;
+#endif
+
 #ifdef EXPERIMENTAL_XCLIENT
     case XCLIENT_CMD:
       {
@@ -4352,9 +4407,10 @@ while (done <= 0)
        if (  fl.helo_verify_required
           || verify_check_host(&hosts_require_helo) == OK)
          {
-         smtp_printf("503 HELO or EHLO required\r\n", SP_NO_MORE);
          log_write(0, LOG_MAIN|LOG_REJECT, "rejected MAIL from %s: no "
            "HELO/EHLO given", host_and_ident(FALSE));
+         done = synprot_error(L_smtp_protocol_error, 503, NULL,
+                     US"HELO or EHLO required");
          break;
          }
        else if (smtp_mailcmd_max < 0)
@@ -5454,6 +5510,10 @@ while (done <= 0)
       if (acl_smtp_etrn) smtp_printf(" ETRN", SP_MORE);
       if (acl_smtp_expn) smtp_printf(" EXPN", SP_MORE);
       if (acl_smtp_vrfy) smtp_printf(" VRFY", SP_MORE);
+#ifndef DISABLE_WELLKNOWN
+      if (verify_check_host(&wellknown_advertise_hosts) != FAIL)
+       smtp_printf(" WELLKNOWN", SP_MORE);
+#endif
 #ifdef EXPERIMENTAL_XCLIENT
       if (proxy_session || verify_check_host(&hosts_xclient) != FAIL)
        smtp_printf(" XCLIENT", SP_MORE);
index 81042003ff9a58165fba96076e6c1fa785e962a8..cfc96c13c22bc8901eaee8f521fd21567f695b6a 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index cc36463e44bb1d513f90972d1e8838a22a26c9fd..9abe18fc3d555ee358ce1e79ca91175a93558d1e 100644 (file)
@@ -3,7 +3,7 @@
 *************************************************/
 
 /* SPF support.
-   Copyright (c) The Exim Maintainers 2015 - 2023
+   Copyright (c) The Exim Maintainers 2015 - 2024
    Copyright (c) Tom Kistner <tom@duncanthrax.net> 2004 - 2014
    License: GPL
    SPDX-License-Identifier: GPL-2.0-or-later
index afee742ed984baf594b06198a820d9cd2b02f8b0..7e9a6ca2abbd74d015378d76e74576447f22e62e 100644 (file)
@@ -2,8 +2,8 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Experimental SPF support.
-   Copyright (c) The Exim Maintainers 2016 - 2022
+/* SPF support.
+   Copyright (c) The Exim Maintainers 2016 - 2024
    Copyright (c) Tom Kistner <tom@duncanthrax.net> 2004
    License: GPL
    SPDX-License-Identifier: GPL-2.0-or-later
index 3e3b246abd2161fedbb3552726efd3342a614b91..c788fd8f810bb3bf03fbe977d46eac0f686931f0 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index f3373faedb878dcaa1b25684c439021d2363a2e2..574aa167fc4b1b4cfa5135ea818c8770b1f75727 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 03322a097ae89c8513a5a4446bf15e024bea4750..181e7fd6751296c8e2e9e8f2759608a13d188f28 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim maintainers 2019 - 2023 */
+/* Copyright (c) The Exim maintainers 2019 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 170b47b238fd2e353dbc635d4f7aaf45e8d15e1d..113c05754ba8f39aba7b658fdb7559b7c9113af6 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 8aab540559f24ea0ec1b5c064ce41eaa89463a78..3c85f6ae597b3b573fa6bac56c076a5743612c5d 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 3e8ec6d847b8f0d88353231c795def00cdc29cc5..f443a6e274eebb1db07d11f05a757dd1ff5a91d0 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* Copyright (c) Phil Pennock 2012 */
 /* See the file NOTICE for conditions of use and distribution. */
index ca8e9b0dea051c5e881392443f3f66a3b24025e9..c97106fe031674dc1fc3de014dbf6e2411995c50 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2019 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 0e9a7c5345a36f57d1c7a965f094b82e1407d687..a1ae1abd1063d13c06c6bdfa0606cb39150b6ede 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 3609b78bb4287594881197c6a58e986f541deb7d..6768e85de352e294d398c68adb97dd96c7513dad 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index f495f957163baf2e9de0f5566f75bdb094380343..eeb726ae14f84641964a2ddd7dfef1333447a341 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim maintainers 2020 - 2023 */
+/* Copyright (c) The Exim maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2020 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 803202b52ad4fceb1e91dc7f5ed2e65a41551a2c..5ffc072152c314449ac94b3863caa58ea4fed492 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index eff0dc79d905a177844f21e7e8e8d4242f8ff029..7f82ef708587b4f01343def4f9c960d404c72312 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index f8a1427b93b789080570454ebbbb2be7f31d7096..faed1d00fb58df91b763c6b5dd04dac79487e3cb 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim maintainers 2020 - 2023 */
+/* Copyright (c) The Exim maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 21c98eeef8be28c21a0cc1a6683d36af28738d9b..79020217bc33f3e0cb79027165b0e328de0c956c 100644 (file)
@@ -2,9 +2,9 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
+/* Copyright (c) The Exim Maintainers 1995 - 2024 */
 /* Copyright (c) Andrew Colin Kissa <andrew@topdog.za.net> 2016 */
 /* Copyright (c) University of Cambridge 2016 */
-/* Copyright (c) The Exim Maintainers 1995 - 2021 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
 
index 0338d6301f2d75bc6188f7ef5b6026efa27c74f2..a5caf3de67017010f986e52563d3dc52eb0d9c40 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -1091,7 +1091,7 @@ if (pending_BANNER)
     }
   /*XXX EXPERIMENTAL_ESMTP_LIMITS ? */
 
-# ifndef DISABLE_TLS_RESUME
+# if !defined(DISABLE_TLS) && !defined(DISABLE_TLS_RESUME)
   GET_OPTION("host_name_extract");
   s = ((smtp_transport_options_block *)sx->conn_args.ob)->host_name_extract;
   if (!s) s = HNE_DEFAULT;
@@ -2635,7 +2635,7 @@ goto SEND_QUIT;
          }
        }
 #endif
-#ifndef DISABLE_TLS_RESUME
+#if !defined(DISABLE_TLS) && !defined(DISABLE_TLS_RESUME)
       GET_OPTION("host_name_extract");
       if (!(s = ob->host_name_extract)) s = HNE_DEFAULT;
       ehlo_response_lbserver(sx, s);
index fc8a6b12687b00259b6dd17b6a2530e9fafa4876..1d892d5675d15c9b8acc41ee8320d57497384a26 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index ac8d0f2da69b2c442163e282b2ef08b917d7d6a2..8848dd7a557c61b610ef90ca72086e2b3d62cd58 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2021 - 2022 */
+/* Copyright (c) The Exim Maintainers 2021 - 2024 */
 /* Copyright (c) Jeremy Harris 2015 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 2c703583e1d9a4347edac8ddd3e54871c9a651a4..8f73a46aa65394037f0dc6f5a120a8fae4f70bf0 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2021 - 2023 */
+/* Copyright (c) The Exim Maintainers 2021 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2015 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
index 065deec41512ee1784ce78bd93f39e73278bfc2e..b1e5d68021f5e5ffec9f88c856e61f0a719df852 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
 /* Copyright (c) University of Cambridge 1995 - 2023 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -294,7 +294,7 @@ implying some kind of I/O error. We don't want to write the cache in that case.
 Otherwise the value is ccache_accept, ccache_reject, or ccache_reject_mfnull. */
 
 if (dom_rec->result != ccache_unknown)
-  if (!(dbm_file = dbfn_open(US"callout", O_RDWR|O_CREAT, &dbblock, FALSE, TRUE)))
+  if (!(dbm_file = dbfn_open(US"callout", O_RDWR, &dbblock, FALSE, TRUE)))
     {
     HDEBUG(D_verify) debug_printf_indent("callout cache: not available\n");
     }
@@ -316,7 +316,7 @@ is disabled. */
 if (done  &&  addr_rec->result != ccache_unknown)
   {
   if (!dbm_file)
-    dbm_file = dbfn_open(US"callout", O_RDWR|O_CREAT, &dbblock, FALSE, TRUE);
+    dbm_file = dbfn_open(US"callout", O_RDWR, &dbblock, FALSE, TRUE);
   if (!dbm_file)
     {
     HDEBUG(D_verify) debug_printf_indent("no callout cache available\n");
@@ -3523,7 +3523,7 @@ dbdata_callout_cache_address cache_address_record;
 
 if (!pos_cache && !neg_cache)
   return;
-if (!(dbm_file = dbfn_open(US"callout", O_RDWR|O_CREAT, &dbblock, FALSE, TRUE)))
+if (!(dbm_file = dbfn_open(US"callout", O_RDWR, &dbblock, FALSE, TRUE)))
   {
   HDEBUG(D_verify) debug_printf_indent("quota cache: not available\n");
   return;
index fb9d95c5e2260d722356e7798a4b69695cdcd3cf..cca5dd88776dbc2c9da85ecaca82681b77fc531f 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2023 */
+/* Copyright (c) The Exim Maintainers 2023 - 2024 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
 
diff --git a/src/util/mailtest b/src/util/mailtest
new file mode 100755 (executable)
index 0000000..0c50d93
--- /dev/null
@@ -0,0 +1,486 @@
+#!/usr/bin/perl
+#
+###############################################################
+###############################################################
+
+use strict;
+
+use Net::SMTP;
+#use IO::Socket::SSL qw( SSL_ERROR );
+use Net::Domain qw(hostfqdn);
+use Getopt::Long qw(:config default bundling no_ignore_case auto_version);
+use Pod::Usage;
+use Net::Cmd;
+use Data::Dumper;
+
+our @ISA = qw(Net::Cmd);
+
+###############################################################
+###############################################################
+
+my ($smtp,$optsin,$opt,$mess,$rcpt,@headers,$finished_header,$ofh);
+$main::VERSION = '1.2.2';
+
+$optsin = {
+    'body|b'                    => \&optset,
+    'debug|d'                   => \&optset,
+    'ehlo|helo|m=s'             => \&optset,
+    'rcptto|recipient|r=s'      => \&optset,
+    'host|h=s'                  => \&optset,
+    'from822|u=s'               => \&optset,
+    'vrfy|v'                    => \&optset,
+    'expn|e'                    => \&optset,
+    'mailfrom|from821|from|f=s' => \&optset,
+    'port|p=i'                  => \&optset,
+    'wellknown|w=s'             => \&optset,
+    'output|W=s'                => \&optset,
+    'include_options|O'         => \&optset,
+    'include_headers|H'         => \&optset,
+    'bounce|B'                  => \&optset,
+    'tls|S'                     => \&optset,
+    'nostarttls|s'              => \&optset,
+    'stricttls|strict_tls'      => \&optset,
+    'sslargs|tlsargs=s'         => \&optset,
+    'verbose'                   => \&optset,
+    'help'                      => \&optset,
+    'man'                       => \&optset,
+};
+map { my $t = $_; $t =~ s/\|.*//; $opt->{$t} = undef; } keys %$optsin;
+GetOptions( %$optsin ) or pod2usage(2);
+pod2usage(1) if $opt->{'help'};
+pod2usage(-exitval => 0, -verbose => 2) if $opt->{'man'};
+
+print _Dumper($opt, 'Options')
+    if $opt->{'debug'};
+
+###############################################################
+###############################################################
+##
+## parameter checking
+##
+###############################################################
+###############################################################
+
+bail( 1, "Host(--host) must be provided" )
+    if !$opt->{'host'};
+
+$opt->{'port'} = $opt->{'tls'} ? 465 : 25
+    if ! $opt->{'port'};
+
+if (!$opt->{'ehlo'})
+{
+    $opt->{'ehlo'} = hostfqdn();
+    fret( "Machine set to $opt->{'ehlo'}" ) if $opt->{'debug'};
+}
+if (!$opt->{'mailfrom'} && !$opt->{'bounce'})
+{
+    $opt->{'mailfrom'} = $ENV{USER}. "@". $opt->{'ehlo'};
+    fret( "MAIL FROM set to $opt->{'mailfrom'}" ) if $opt->{'debug'};
+}
+if (!$opt->{'from822'})
+{
+    $opt->{'from822'} = $opt->{'mailfrom'};
+    fret( "From: set to $opt->{'from822'}" ) if $opt->{'debug'};
+}
+if ($opt->{'bounce'})
+{
+    $opt->{'mailfrom'} = "";
+    $opt->{'from822'} = 'mailer-daemon@'. hostfqdn();
+    fret( "MAIL FROM set to $opt->{'mailfrom'}", "From: set to $opt->{'from822'}" ) if $opt->{'debug'};
+}
+
+bail( 1, "EXPN or VRFY cannot be used without a recipient" )
+    if ($opt->{'expn'} || $opt->{'vrfy'}) && ! $opt->{'rcptto'};
+
+bail( 1, "Either a recipient or well-known resource must be specified" )
+    if ! $opt->{'wellknown'} && ! $opt->{'rcptto'};
+
+bail( 1, "Only one of recipient or well-known resource can be specified" )
+    if $opt->{'wellknown'} && $opt->{'rcptto'};
+
+if ( $opt->{'sslargs'} )
+{
+    my @p = split /[=,]/, $opt->{'sslargs'};
+    $opt->{'sslparams'} = \@p;
+}
+else
+{
+    $opt->{'sslparams'} = [ 'SSL_verify_mode', $opt->{'stricttls'} ? 1 : 0 ];
+}
+fret( _Dumper( $opt->{'sslparams'}, 'sslparams' ) )
+    if $opt->{'debug'} && ( $opt->{'tls'} || ! $opt->{'nostarttls'} );
+
+###############################################################
+###############################################################
+##
+## parameter checking complete. now onto operations
+##
+##
+###############################################################
+###############################################################
+
+
+
+$smtp= Net::SMTP->new(  $opt->{'host'},
+                        Hello   => $opt->{'ehlo'},
+                        Debug   => $opt->{'debug'},
+                        ( $opt->{'tls'} ? ( 'SSL' => $opt->{'sslargs'} || 1 ) : () ),
+                        Port    => $opt->{'port'},
+                        );
+bail( 1, "Connection Failed: $@" )
+    if !$smtp;
+
+if (!$opt->{'nostarttls'})
+{
+    bail( $smtp, 1, "Failed to STARTTLS - $@" )
+        if ! $smtp->starttls( @{$opt->{'sslparams'}} );
+
+    fret( $smtp->message() )
+        if $opt->{'verbose'};
+}
+
+if ($opt->{'wellknown'})
+{
+    bail( $smtp, 1, "Server does not support WELLKNOWN" )
+        if ! $smtp->supports('WELLKNOWN');
+
+    my $e_wk = encode_xtext( $opt->{'wellknown'} );
+
+    bail( $smtp, 1, "Failed to WELLKNOWN - $e_wk", $smtp->message() )
+        if ! ( $smtp->command( 'WELLKNOWN', $e_wk )->response() == CMD_OK );
+
+    fret( "Protocol violation. Code was OK, but not 250",   $smtp->code. " - ". $smtp->message )
+        if $smtp->code ne '250';
+
+    $mess = $smtp->message;
+    my ($info,$size);
+    ($info,$mess) = split( /\n/, $mess, 2 );
+    $info =~ /size=(\d+)/i;
+    $size = $1 + 0;
+    $mess = decode_xtext( $mess );
+    fret( "Size mismatch on wellknown fetch", "Expected: ". $size, "Received: ". length($mess) )
+        if length($mess) != $size;
+
+    if ( $opt->{'output'} )
+    {
+        # Output to named file
+        #
+        bail( $smtp, 1, "Unable to open file $opt->{'output'} for WELLKNOWN output - $!" )
+            if ! ( $ofh = IO::File->new("> $opt->{'output'}") );
+
+        print $ofh $mess;
+        $ofh->close;
+    }
+    else
+    {
+        # might be hazardous, output via pager
+        print STDERR "$mess\n";
+    }
+}
+
+if ($opt->{'vrfy'})
+{
+    $smtp->verify($opt->{'vrfy'});
+    fret( $smtp->message() );
+}
+
+if ($opt->{'expn'})
+{
+    $smtp->expand($opt->{'expn'});
+    fret( $smtp->message() );
+}
+
+if ($opt->{'rcptto'})
+{
+    bail( $smtp, 1, "MAIL FROM $opt->{'mailfrom'} failed", $@ )
+        if ! $smtp->mail($opt->{'mailfrom'});
+
+    bail( $smtp, 1, "RCPT TO $opt->{'rcptto'} failed", $@ )
+        if ! $smtp->to($opt->{'rcptto'});
+
+    # handle any recipients on command line
+    while( $rcpt = shift @ARGV )
+    {
+        last if $rcpt eq '--';
+        fret( "RCPT TO $rcpt failed", $@ )
+            if ! $smtp->to($rcpt);
+    }
+
+    bail( $smtp, 1, "Unable to set data mode", @_ )
+        if ! $smtp->data();
+
+    if ($opt->{'body'})
+    {
+        push @headers, "Subject: Test Message\n";
+        $smtp->datasend("From: $opt->{'from822'}\n");
+        $smtp->datasend("To: $opt->{'rcptto'}\n");
+        $smtp->datasend("Subject: Test Message\n");
+        $smtp->datasend("\n");
+        $smtp->datasend("This is a test message\n");
+        $smtp->datasend("generated with mailtest\n");
+    }else
+    {
+        while(<>)
+        {
+            if($finished_header==0)
+            {
+                if (length($_)<=1)
+                {
+                    $finished_header = 1;
+                }else
+                {
+                    push @headers,"    ".$_;
+                }
+            }
+            $smtp->datasend("$_");
+        }
+    }
+    if($opt->{'include_headers'} && @headers)
+    {
+        $smtp->datasend("\n Copy of headers follow....\n");
+        foreach(@headers)
+        {
+            $smtp->datasend("$_");
+        }
+        $smtp->datasend("\n");
+    }
+    if($opt->{'include_options'})
+    {
+        $smtp->datasend("\n Copy of options follow....\n");
+        $smtp->datasend("    SMTP HOST $opt->{'host'}\n");
+        $smtp->datasend("    HELO $opt->{'ehlo'}\n");
+        $smtp->datasend("    MAIL FROM: $opt->{'mailfrom'}\n");
+        $smtp->datasend("    RCPT TO: $opt->{'rcptto'}\n\n");
+    }
+    fret( "dataend failed", $@ )
+        if ! $smtp->dataend();
+}
+$smtp->quit();
+
+exit;
+
+##############################################################
+##############################################################
+
+sub
+optset
+{
+    my $n = shift;
+    my $v = shift;
+    #print STDERR "Setting $n to $v\n";
+    $opt->{$n->{'name'}} = $v;
+}
+
+sub
+decode_xtext
+{
+    my $mess = shift;
+    $mess =~ s/[\n\r]//g;
+    $mess =~ s/\+([0-9a-fA-F]{2})/chr(hex($1))/ge;
+    return $mess;
+}
+
+sub
+encode_xtext
+{
+    my $mess = shift;
+    $mess =~ s/([^!-*,-<>-~])/'+'.uc(unpack('H*', $1))/eg;
+    return $mess;
+}
+
+sub
+_Dumper
+{
+    return Data::Dumper->Dump( [$_[0]], [$_[1] || 'VAR1'] );
+}
+
+sub
+fret
+{
+    map { print STDERR $_,"\n"; } @_;
+}
+
+sub
+bail
+{
+    shift->quit
+        if ref($_[0]);
+    my $rc = shift;
+    fret( @_ );
+    exit $rc;
+}
+
+##############################################################
+##############################################################
+
+__END__
+
+=head1 NAME
+
+mailtest - Simple SMTP sending for diagnostics
+
+=head1 SYNOPSIS
+
+mailtest --host host.example.com --rcptto recipient@example.com [ send_options ... ] [ additional recipients ...]
+
+
+Options:
+  --help
+                brief help message
+  --debug
+                enable debugging
+
+  --host host
+                host to connect to
+  --rcptto recipient
+                recipient for message
+
+  --helo machine
+                machine name for EHLO
+
+  --vrfy        request VRFY of recipient
+  --expn        request EXPN of recipient
+
+  --mailfrom from
+                use as MAIL FROM value
+  --from822 from
+                content From:
+
+  --port port
+                port to connect to
+
+  --body            generate body
+  --include_options
+                include Options in body
+  --include_headers
+                include generated headers in body
+
+  --tls         perform TLS on connect
+  --nostarttls  do no attempt STARTTLS
+  --stricttls   Enable strict verification on TLS connection
+
+  --tlsargs arg=value[,arg=value]
+                Explicitly define TLS options.
+
+  --bounce      sending as bounce (<>)
+
+  --wellknown path
+                well-known path
+  --output file
+                Output file to receive well-known data
+
+=head1 OPTIONS
+
+=over 8
+
+
+=item B<--help>
+
+Print a brief help message and exits.
+
+=item B<-d, --debug>
+
+Enables debugging, outpus additional information whilst processing requests.
+
+=item B<-h, --host>=I<host>
+
+Specifies the host to connect to. Must be specified and must be IP-resolvable.
+
+=item B<-m, --ehlo>=I<machine>
+
+Specified the machine name to use as the B<EHLO> value. Defaults to the fully-qualified name of the host running the command.
+
+=item B<-r, --rcptto>=I<recipient>
+
+Specifies the recipient of message. This is used as the B<RCPT TO> value.
+
+=item B<-v, --vrfy>
+
+Uses the I<recipient> parameter for the value in a B<VRFY> request. This disables the sending of an email.
+
+=item B<-e, --expn>
+
+Uses the I<recipient> parameter for the value in an B<EXPN> request. This disables the sending of an email.
+
+=item B<-f, --mailfrom>=I<from_address>
+
+Specified the value to use in the B<MAIL FROM> command. Defaults to the current username at the FQDN of the machine B<-m> unless the B<-B> option is used.
+
+=item B<-u, --from822>=I<from_user>
+
+Specified the value to use in the message headers. Defaults to the B<-f> I<from_address> value unless the B<-B> option is used.
+
+=item B<-B, --bounce>
+
+Replace the B<--mailfrom> I<from_address> with B<\<\>> and the B<--from833> I<from_user> with B<mailer-daemon@host> where the host is the value of B<--ehlo> I<machine>
+
+=item B<-p, --port>=I<port>
+
+Specified the port to connect to on the specified host. Defaults to port 25 unless B<-S> is given in which case it defaults to 465.
+
+=item B<-S, --tls>
+
+Specifies that TLS be used directly on the connection prior to any SMTP commands. Changes the connection port to 465 unless it has been explicitly provided. Disables any attempts at B<STARTTLS>.
+
+=item B<-s, --nostarttls>
+
+Disables attempting STARTTLS if offered. Disabled by use of B<-S>.
+
+=item B<--stricttls>
+
+Enables strict verification of the TLS connection. Sets the underlying SSL option B<SSL_verify_mode> to 1/SSL_VERIFY_PEER rather than 0/SSL_VERIFY_NONE. Since the aim of this tool is to test the SMTP protocol behaviour and not the TLS behaviour the decision was made to default the B<SSL_verify_mode> to 0/SSL_VERIFY_NONE.
+
+=item B<--sslargs>=argname=argvalue[,argname=argvalue...]
+
+Allow full control over underlying SSL options. Overrides B<--stricttls>. See the documentation for B<IO::Socket::SSL> for further details.
+
+    --sslargs SSL_verifycn_name=certname.example.com
+
+=item B<-b, --body>
+
+Generate a body for the message being sent.
+
+=item B<-O, --include-options>
+
+Include details of options used in the message body.
+
+=item B<-H, --include-headers>
+
+Include a copy of the generated headers in the message body.
+
+=item B<-w, --wellknown>=I<well-known-path>
+
+Provides the path value for a B<WELLKNOWN> command.
+
+=item B<-W, --output>=I<output_file>
+
+Provides the output file where the B<WELLKNOWN> data should be stored.
+
+=back
+
+=head1 DESCRIPTION
+
+B<mailtest> is a simple utility for testing SMTP connections.
+It is designed to debug endpoints and not for full email generation.
+
+It support a number of basic operations, SEND, VRFY, EXPN, WELLKNOWN.
+
+=head1 COMPATIBILITY
+
+C<mailtest> only requires modules that should be in all normal distributions.
+
+=head1 AUTHOR
+
+Bernard Quatermass <bernardq@exim.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is Copyright (c) 2008,2020,2024 by Bernard Quatermass.
+
+
+=cut
+
+###############################################################
+# vi: sw=4 et
+# End of File
+###############################################################
diff --git a/test/aux-fixed/2500.dir/..subdir/regfile b/test/aux-fixed/2500.dir/..subdir/regfile
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/test/aux-fixed/4040/acme-response b/test/aux-fixed/4040/acme-response
new file mode 100644 (file)
index 0000000..d3f618d
--- /dev/null
@@ -0,0 +1,3 @@
+line 1
+line 2
+last line
diff --git a/test/aux-fixed/4040/sub/acme-response b/test/aux-fixed/4040/sub/acme-response
new file mode 100644 (file)
index 0000000..d3f618d
--- /dev/null
@@ -0,0 +1,3 @@
+line 1
+line 2
+last line
diff --git a/test/confs/0637 b/test/confs/0637
new file mode 100644 (file)
index 0000000..a47d7d1
--- /dev/null
@@ -0,0 +1,13 @@
+# Exim test configuration 0637
+
+HVH=
+
+.include DIR/aux-var/std_conf_prefix
+
+primary_hostname = myhost.test.ex
+
+# ----- Main settings -----
+
+# ----- ACL -----
+
+# End
diff --git a/test/confs/4040 b/test/confs/4040
new file mode 100644 (file)
index 0000000..c5c6c3c
--- /dev/null
@@ -0,0 +1,29 @@
+# Exim test configuration 4040
+
+SERVER=
+OPT=
+
+.include DIR/aux-var/std_conf_prefix
+
+primary_hostname = myhost.test.ex
+
+# ----- Main settings -----
+
+wellknown_advertise_hosts = 127.0.0.1
+acl_smtp_wellknown = check_wellknown
+
+# ----- ACL -----
+
+begin acl
+
+check_wellknown:
+  accept
+    logwrite =          [$sender_host_address] $smtp_command
+    condition =                ${if == {${received_port}}{PORT_D}}
+    set acl_c_wellknown = ${lookup {${xtextd:$smtp_command_argument}} \
+                               dsearch,ret=full,filter=fileOPT \
+                               {DIR/aux-fixed/TESTNUM}}
+    logwrite =          [$sender_host_address] -> '$acl_c_wellknown'
+    control =           wellknown/$acl_c_wellknown
+
+# End
diff --git a/test/log/0637 b/test/log/0637
new file mode 100644 (file)
index 0000000..5971628
--- /dev/null
@@ -0,0 +1,8 @@
+
+******** SERVER ********
+1999-03-02 09:44:33 exim x.yz daemon started: pid=p1234, no queue runs, listening for SMTP on port PORT_D
+1999-03-02 09:44:33 rejected MAIL from [127.0.0.1]: no HELO/EHLO given
+1999-03-02 09:44:33 rejected MAIL from [127.0.0.1]: no HELO/EHLO given
+1999-03-02 09:44:33 rejected MAIL from [127.0.0.1]: no HELO/EHLO given
+1999-03-02 09:44:33 rejected MAIL from [127.0.0.1]: no HELO/EHLO given
+1999-03-02 09:44:33 SMTP call from [127.0.0.1] dropped: too many syntax or protocol errors (last command was "mail from:<u4@cus.cam.ac.uk>",  C=MAIL,MAIL,MAIL,MAIL)
diff --git a/test/log/4040 b/test/log/4040
new file mode 100644 (file)
index 0000000..4274a7a
--- /dev/null
@@ -0,0 +1,21 @@
+
+******** SERVER ********
+1999-03-02 09:44:33 exim x.yz daemon started: pid=p1234, no queue runs, listening for SMTP on port PORT_D port PORT_D2
+1999-03-02 09:44:33 [127.0.0.1] WELLKNOWN acme-response
+1999-03-02 09:44:33 [127.0.0.1] -> 'TESTSUITE/aux-fixed/4040/acme-response'
+1999-03-02 09:44:33 [127.0.0.1] WELLKNOWN acme-response
+1999-03-02 09:44:33 H=(test) [127.0.0.1] rejected WELLKNOWN acme-response
+1999-03-02 09:44:33 [127.0.0.1] WELLKNOWN badfile
+1999-03-02 09:44:33 [127.0.0.1] -> ''
+1999-03-02 09:44:33 H=(test) [127.0.0.1] rejected WELLKNOWN badfile
+1999-03-02 09:44:33 exim x.yz daemon started: pid=p1235, no queue runs, listening for SMTP on port PORT_D port PORT_D2
+1999-03-02 09:44:33 [127.0.0.1] WELLKNOWN acme-response
+1999-03-02 09:44:33 [127.0.0.1] -> 'TESTSUITE/aux-fixed/4040/acme-response'
+1999-03-02 09:44:33 [127.0.0.1] WELLKNOWN sub/acme-response
+1999-03-02 09:44:33 [127.0.0.1] -> 'TESTSUITE/aux-fixed/4040/sub/acme-response'
+1999-03-02 09:44:33 [127.0.0.1] WELLKNOWN sub/badfile
+1999-03-02 09:44:33 [127.0.0.1] -> ''
+1999-03-02 09:44:33 H=(test) [127.0.0.1] rejected WELLKNOWN sub/badfile
+1999-03-02 09:44:33 [127.0.0.1] WELLKNOWN ../badfile
+1999-03-02 09:44:33 [127.0.0.1] -> ''
+1999-03-02 09:44:33 H=(test) [127.0.0.1] rejected WELLKNOWN ../badfile
diff --git a/test/rejectlog/0637 b/test/rejectlog/0637
new file mode 100644 (file)
index 0000000..9f539cd
--- /dev/null
@@ -0,0 +1,7 @@
+
+******** SERVER ********
+1999-03-02 09:44:33 rejected MAIL from [127.0.0.1]: no HELO/EHLO given
+1999-03-02 09:44:33 rejected MAIL from [127.0.0.1]: no HELO/EHLO given
+1999-03-02 09:44:33 rejected MAIL from [127.0.0.1]: no HELO/EHLO given
+1999-03-02 09:44:33 rejected MAIL from [127.0.0.1]: no HELO/EHLO given
+1999-03-02 09:44:33 SMTP call from [127.0.0.1] dropped: too many syntax or protocol errors (last command was "mail from:<u4@cus.cam.ac.uk>",  C=MAIL,MAIL,MAIL,MAIL)
diff --git a/test/rejectlog/4040 b/test/rejectlog/4040
new file mode 100644 (file)
index 0000000..9d4ca3a
--- /dev/null
@@ -0,0 +1,6 @@
+
+******** SERVER ********
+1999-03-02 09:44:33 H=(test) [127.0.0.1] rejected WELLKNOWN acme-response
+1999-03-02 09:44:33 H=(test) [127.0.0.1] rejected WELLKNOWN badfile
+1999-03-02 09:44:33 H=(test) [127.0.0.1] rejected WELLKNOWN sub/badfile
+1999-03-02 09:44:33 H=(test) [127.0.0.1] rejected WELLKNOWN ../badfile
index e1ba864f02deb18229d77e130e3517ce871541fd..29ea66a9fd1a9814c4c4544bdcc7197533b1916f 100755 (executable)
@@ -2,6 +2,9 @@
 # We use env, because in some environments of our build farm
 # the Perl 5.010 interpreter is only reachable via $PATH
 
+# Copyright (c) The Exim Maintainers 2024
+# SPDX-License-Identifier: GPL-2.0-or-later
+
 ###############################################################################
 # This is the controlling script for the "new" test suite for Exim. It should #
 # be possible to export this suite for running on a wide variety of hosts, in #
@@ -115,6 +118,14 @@ my ($parm_configure_owner, $parm_configure_group);
 my ($parm_ipv4, $parm_ipv6, $parm_ipv6_stripped);
 my $parm_hostname;
 
+# Convenience for regex'
+# for tighter, see https://metacpan.org/dist/IO-Socket-IP/source/lib/IO/Socket/IP.pm#L37
+my $re_ipv4 = qr/\d{1,3}(?:\.\d{1,3}){3}/;
+my $re_6g = qr/[[:xdigit:]]{1,4}/;
+my $re_6s = qr/${re_6g}:/;
+my $re_ipv6 = qr/${re_6s}{0,7}${re_6g}(?:::${re_6s}{0,5}${re_6g})?/;
+my $re_ip = qr/(?:${re_ipv4}|${re_ipv6})/;
+
 ###############################################################################
 ###############################################################################
 
@@ -713,7 +724,7 @@ RESET_AFTER_EXTRA_LINE_READ:
   s/TLS error on connection \(gnutls_handshake\): Error in the pull function\./a TLS session is required but an attempt to start TLS failed/g;
 
   # (replace old with new, hoping that old only happens in one situation)
-  s/TLS error on connection to \d{1,3}(.\d{1,3}){3} \[\d{1,3}(.\d{1,3}){3}\] \(gnutls_handshake\): A TLS packet with unexpected length was received./a TLS session is required for ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4], but an attempt to start TLS failed/g;
+  s/TLS error on connection to ${re_ipv4} \[${re_ipv4}\] \(gnutls_handshake\): A TLS packet with unexpected length was received./a TLS session is required for ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4], but an attempt to start TLS failed/g;
   s/TLS error on connection from \[127.0.0.1\] \(recv\): A TLS packet with unexpected length was received./TLS error on connection from [127.0.0.1] (recv): The TLS connection was non-properly terminated./g;
 
   # signature algorithm names
@@ -823,12 +834,12 @@ RESET_AFTER_EXTRA_LINE_READ:
   s/\(port=(\d+)/"(port=" . new_value($1, "%s", \$next_port)/e;
 
   # This handles "connection from" and the like, when the port is given
-  if (!/listening for SMTP on/ && !/Connecting to/ && !/=>/ && !/->/
-      && !/\*>/&& !/==/  && !/\*\*/ && !/Connection refused/ && !/in response to/
-      && !/T(?:ransport)?:/)
-    {
-    s/\[([a-z\d:]+|\d+(?:\.\d+){3})\]:(\d+)/"[".$1."]:".new_value($2,"%s",\$next_port)/ie;
-    }
+  s/(\[${re_ip}\]:)(\d+)/$1.new_value($2,"%s",\$next_port)/ie
+    unless (  /listening for SMTP on/ || /Connecting to/
+          || /[=*-]>/ || /==/ || /\*\*/
+          || /Connection refused/ || /in response to/
+          || /T(?:ransport)?:/
+          );
 
   # Port in host address in spool file output from -Mvh
   s/^(--?host_address) (.*[:.])\d+$/$1 ${2}9999/;
@@ -1124,9 +1135,9 @@ RESET_AFTER_EXTRA_LINE_READ:
     # because they will be different in different binaries.
 
     next if /^$time_pid?
-               (?: Berkeley\ DB:\s
-                 | Probably\ (?:Berkeley\ DB|ndbm|GDBM)
-                 | Using\ tdb
+               (?: .*\sBerkeley\ DB
+                 | \sProbably\ (?:Berkeley\ DB|ndbm|GDBM)
+                 | \sUsing\ (?:tdb|sqlite3)
                  | Authenticators:
                  | Lookups(?:\(built-in\))?:
                  | Support\ for:
@@ -1273,6 +1284,9 @@ RESET_AFTER_EXTRA_LINE_READ:
     # We invoke Exim with -D, so we hit this new message as of Exim 4.73:
     next if /^macros_trusted overridden to true by whitelisting/;
 
+    # Hints-db writes seem to have variable sizes for values
+    s/ dbfn_write: key=.+ datalen \K\d+$/NNN/;
+
     # We have to omit the localhost ::1 address so that all is well in
     # the IPv4-only case.
 
@@ -1280,8 +1294,9 @@ RESET_AFTER_EXTRA_LINE_READ:
       if (/looked up these IP addresses/);
     next if /name=localhost address=::1/;
 
-    # drop pdkim debugging header
+    # DKIM: Not all builds include
     next if /^DKIM( <<<<<<<<<<<<<<<<<<<<<<<<<<<<<+|: no signatures)$/;
+    next if /try option acl_smtp_dkim$/;
 
     # Some platforms have TIOCOUT, some do not
     next if /\d+ bytes remain in socket output buffer$/;
@@ -1421,6 +1436,9 @@ RESET_AFTER_EXTRA_LINE_READ:
     # DISABLE_OCSP
     next if /in hosts_requ(est|ire)_ocsp\? (no|yes)/;
 
+    # WELLKNOWN
+    next if / in wellknown_advertise_hosts\?/;
+
     # SUPPORT_PROXY
     next if /host in hosts_proxy\?/;
 
@@ -1449,7 +1467,10 @@ RESET_AFTER_EXTRA_LINE_READ:
     next if / in limits_advertise_hosts?\? no \(matched "!\*"\)/;
 
     # Experimental_XCLIENT
-    next if / in hosts_xclient?\? no \(option unset\)/;
+    next if / in hosts_xclient\? no \(option unset\)/;
+
+    # Experimental_WELLKNOWN
+    next if / in hosts_wellknown\? no \(option unset\)/;
 
     # TCP Fast Open
     next if /^(ppppp )?setsockopt FASTOPEN: Network Error/;
@@ -3353,7 +3374,7 @@ if (defined $parm_lookups{redis})
 
 sub check_running_dovecot
 {
-system('dovecot --version >/dev/null');
+system('dovecot --version >/dev/null 2>&1');
 if ($? == 0)
   {
   print "Dovecot appears to be available\n";
@@ -3654,7 +3675,7 @@ while (<EXIMINFO>)
     }
 
   elsif (/^Support for: (.*)/)
-    {
+    {                  # Compile-time features - exim -bV
     print;
     @temp = split /(\s+)/, $1;
     push(@temp, ' ');
@@ -4221,7 +4242,7 @@ DIR: for (my $i = 0; $i < @test_dirs; $i++)
         if (!defined $parm_malware{$1}) { $wantthis = 0; last; }
         }
       elsif (/^(not )?feature (.*)$/)
-        {
+        {                      #a macro name, or lack thereof - -bP macros
        # move to a subroutine?
        my $eximinfo = "$parm_exim -C $parm_cwd/test-config -DDIR=$parm_cwd -bP macro $2";
 
diff --git a/test/scripts/0000-Basic/0637 b/test/scripts/0000-Basic/0637
new file mode 100644 (file)
index 0000000..7ed9b3c
--- /dev/null
@@ -0,0 +1,18 @@
+# mail before ehlo
+exim -bd -DSERVER=server -oX PORT_D
+****
+client 127.0.0.1 PORT_D
+??? 220
+mail from:<u1@cus.cam.ac.uk>
+??? 503 HELO or EHLO required
+mail from:<u2@cus.cam.ac.uk>
+??? 503
+mail from:<u3@cus.cam.ac.uk>
+??? 503
+mail from:<u4@cus.cam.ac.uk>
+??? 503-
+??? 503 Too many
+???*
+****
+killdaemon
+no_stderr_check
index f3937ec9127f064de1ff08b3f7247e409c0df7d5..ba524105d6fb9b74b5e69e0db789e0509da4064a 100644 (file)
@@ -18,6 +18,9 @@ ok,subdir:  ${lookup{TESTNUM.dir} dsearch,filter=subdir {DIR/aux-fixed}{$value}{
 fail,subdir(..):${lookup{..}          dsearch,filter=subdir {DIR/aux-fixed}{$value}{FAIL}}
 fail,subdir(.) :${lookup{.}           dsearch,filter=subdir {DIR/aux-fixed}{$value}{FAIL}}
 fail,subdir(f) :${lookup{TESTNUM.tst} dsearch,filter=subdir {DIR/aux-fixed}{$value}{FAIL}}
+ok,subdir(..d) :${lookup{..subdir}    dsearch,filter=subdir {DIR/aux-fixed/TESTNUM.dir}{$value}{FAIL}}
+fail.path:  ${lookup{TESTNUM.dir/regfile} dsearch          {DIR/aux-fixed}{$value}{FAIL}}
+ok.path:    ${lookup{TESTNUM.dir/regfile} dsearch,key=path {DIR/aux-fixed}{$value}{FAIL}}
 
 cachelayer tests
 fail:       ${lookup{test-data}   dsearch               {DIR/}          {$value}{FAIL}}
diff --git a/test/scripts/4040-wellknown/4040 b/test/scripts/4040-wellknown/4040
new file mode 100644 (file)
index 0000000..8ca4030
--- /dev/null
@@ -0,0 +1,157 @@
+# ESMTP WELLNOWN server response
+#
+# when WELLKNOWN leaves EXPERIMENTAL, add standalone tests
+# for ${xtextd:str} to 0002
+#
+#
+exim -DSERVER=server -bd -oX PORT_D:PORT_D2
+****
+#
+client 127.0.0.1 PORT_D
+??? 220
+EHLO test
+??? 250-
+??? 250-SIZE
+??? 250-LIMITS
+??? 250-8BITMIME
+??? 250-PIPELINING
+??? 250-WELLKNOWN
+??? 250 HELP
+WELLKNOWN acme-response
+??? 250-SIZE
+??? 250-
+??? 250-
+??? 250
+QUIT
+??? 221
+****
+#
+# not advertised conditional on hosts_wellknown
+client HOSTIPV4 PORT_D
+??? 220
+EHLO test
+??? 250-
+??? 250-SIZE
+??? 250-LIMITS
+??? 250-8BITMIME
+??? 250-PIPELINING
+??? 250 HELP
+QUIT
+??? 221
+****
+#
+# deny by acl
+client 127.0.0.1 PORT_D2
+??? 220
+EHLO test
+??? 250-
+??? 250-SIZE
+??? 250-LIMITS
+??? 250-8BITMIME
+??? 250-PIPELINING
+??? 250-WELLKNOWN
+??? 250 HELP
+WELLKNOWN acme-response
+??? 550
+QUIT
+??? 221
+****
+#
+# nonexistent file
+client 127.0.0.1 PORT_D
+??? 220
+EHLO test
+??? 250-
+??? 250-SIZE
+??? 250-LIMITS
+??? 250-8BITMIME
+??? 250-PIPELINING
+??? 250-WELLKNOWN
+??? 250 HELP
+WELLKNOWN badfile
+??? 550
+QUIT
+??? 221
+****
+#
+killdaemon
+#
+exim -DSERVER=server -DOPT=,key=path -bd -oX PORT_D:PORT_D2
+****
+#
+# dsearch with key=path permission
+# basic good file
+client 127.0.0.1 PORT_D
+??? 220
+EHLO test
+??? 250-
+??? 250-SIZE
+??? 250-LIMITS
+??? 250-8BITMIME
+??? 250-PIPELINING
+??? 250-WELLKNOWN
+??? 250 HELP
+WELLKNOWN acme-response
+??? 250-SIZE
+??? 250-
+??? 250-
+??? 250
+QUIT
+??? 221
+****
+#
+# subdir/good file
+client 127.0.0.1 PORT_D
+??? 220
+EHLO test
+??? 250-
+??? 250-SIZE
+??? 250-LIMITS
+??? 250-8BITMIME
+??? 250-PIPELINING
+??? 250-WELLKNOWN
+??? 250 HELP
+WELLKNOWN sub/acme-response
+??? 250-SIZE
+??? 250-
+??? 250-
+??? 250
+QUIT
+??? 221
+****
+#
+# nonexistent file
+client 127.0.0.1 PORT_D
+??? 220
+EHLO test
+??? 250-
+??? 250-SIZE
+??? 250-LIMITS
+??? 250-8BITMIME
+??? 250-PIPELINING
+??? 250-WELLKNOWN
+??? 250 HELP
+WELLKNOWN sub/badfile
+??? 550
+QUIT
+??? 221
+****
+#
+# dotdot trap
+client 127.0.0.1 PORT_D
+??? 220
+EHLO test
+??? 250-
+??? 250-SIZE
+??? 250-LIMITS
+??? 250-8BITMIME
+??? 250-PIPELINING
+??? 250-WELLKNOWN
+??? 250 HELP
+WELLKNOWN ../badfile
+??? 550
+QUIT
+??? 221
+****
+#
+killdaemon
diff --git a/test/scripts/4040-wellknown/REQUIRES b/test/scripts/4040-wellknown/REQUIRES
new file mode 100644 (file)
index 0000000..457fc5f
--- /dev/null
@@ -0,0 +1 @@
+support ESMTP_Wellknown
index 69640dad2da40bd57b68fa23fba76b78f76d7d46..2b8eed427d964f8a7c0010a5f9efd257f3f8de9b 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 environment after trimming:
  USER=CALLER
 configuration file is TESTSUITE/test-config
@@ -160,6 +161,7 @@ LOG: MAIN PANIC
  ╰─────result: protected:░░
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 environment after trimming:
  USER=CALLER
 configuration file is TESTSUITE/test-config
@@ -313,6 +315,7 @@ LOG: MAIN PANIC
  \_____result: protected:  
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 environment after trimming:
  USER=CALLER
 configuration file is TESTSUITE/test-config
@@ -392,6 +395,7 @@ try option unknown_login
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 1999-03-02 09:44:33 no host name found for IP address V4NET.11.12.13
 Exim version x.yz ....
+Hints DB:
 environment after trimming:
  USER=CALLER
 configuration file is TESTSUITE/test-config
@@ -516,6 +520,7 @@ sender_rcvhost = ten-1.test.ex ([V4NET.0.0.1] ident=me)
             ╰──(tainted)
 >>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1238
 configuration file is TESTSUITE/test-config
@@ -584,6 +589,7 @@ LOG: connection_reject MAIN REJECT
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1238 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1239
 configuration file is TESTSUITE/test-config
@@ -783,6 +789,7 @@ LOG: 10HmbD-000000005vi-0000 Subject is: " here we go: a string that is going to
 >>> end of ACL "check_data": DENY
 LOG: 10HmbD-000000005vi-0000 H=(test) [V4NET.0.0.0] F=<> rejected after DATA: reply_address=<>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: -C, -D, -be or -bf forces real uid
   uid=CALLER_UID gid=CALLER_GID pid=p1240
 configuration file is TESTSUITE/test-config
index 0799ce33ff7b210f251c3e1a3feefbe51f001610..2f1b9a215b885b92e18c54748ea233e90fe48338 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -157,6 +158,7 @@ LOG: smtp_connection MAIN
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 1999-03-02 09:44:33 ACL "warn" with "message" setting found in a non-message (EHLO or HELO) ACL: cannot specify header lines here: message ignored
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -282,6 +284,7 @@ end of ACL "rcpt": ACCEPT
 LOG: MAIN
   <= ok@test3 H=[10.9.8.8] U=CALLER P=smtp S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 4592afa4d62e713fc10ec4ab213c83ded5350725..b803208c56b0c8c320a5f5b14ed74fb480017cb0 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1236
 configuration file is TESTSUITE/test-config
@@ -79,6 +80,7 @@ LOG: smtp_connection MAIN
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1237
 configuration file is TESTSUITE/test-config
@@ -162,6 +164,7 @@ LOG: smtp_connection MAIN
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1238
 configuration file is TESTSUITE/test-config
index 03b6c3474cbe545698388cfc30183b3fad75c2ed..361f1639b17d77c5a3fec87a8013bdb247c41b9f 100644 (file)
@@ -1,10 +1,12 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
 LOG: MAIN
   <= CALLER@test.ex U=CALLER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 9fa3c568eb074530d6c218e5662b0a88858408ff..0365875befc9cb5020cf009c84139f4b7c03affd 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -220,6 +221,7 @@ search_tidyup called
 >>> host in ignore_fromline_hosts? no (option unset)
 LOG: 10HmaY-000000005vi-0000 <= myfriend@there.test.ex H=(exim.test.ex) [V4NET.11.12.13] P=esmtp S=sss
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 configuration file is TESTSUITE/test-config
index 75d9d96973606ea32977e4db17b9bd0f53967b3f..56cc9c81a6145dcea305d66719c183889a588690 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -24,6 +25,7 @@ routed by lookuphost router
   host ten-1.test.ex [V4NET.0.0.1] MX=5 dnssec=no
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -64,6 +66,7 @@ routed by self router
   host myhost.test.ex [V4NET.10.10.10]
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -119,6 +122,7 @@ routed by self2 router
   host myhost.test.ex [V4NET.10.10.10]
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index d805f7a616c46bf4f2cd637feb70b2b3df0733d3..c1db2a3e69ebf012ea0a0478cc91fc756fe28abc 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
index e2c2407ae8168ff7a9100daa003339bda434fe30..6637329c89fe063132eb56554e1d2a294b6115b2 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -261,6 +262,7 @@ no more routers
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=2 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 configuration file is TESTSUITE/test-config
index 5be8bc63302812e7069af8f61850903652b5ab56..04e219a0ee37eb84bcb417cd31a003336694fb10 100644 (file)
@@ -48,6 +48,7 @@ LOG: SMTP command timeout on connection from [V4NET.0.0.1] D=qqs
 >>> end of ACL "check_recipient": ACCEPT
 LOG: SMTP data timeout (message abandoned) on connection from (test) [V4NET.0.0.1] F=<userx@test.ex> D=qqs
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 environment after trimming:
index 6310708237fce4f55cc2c222290a73dc87e679cc..bd3bb1425c8c59a60bfeef4c4e911e110550e573 100644 (file)
@@ -102,6 +102,7 @@ LOG: H=(test) [V4NET.11.12.13] F=<userx@cam.ac.uk> rejected RCPT <userx@cam.ac.u
 >>> end of ACL "check_recipient": DENY
 LOG: H=ten-1.test.ex (test) [V4NET.0.0.1] F=<userx@cam.ac.uk> rejected RCPT <userx@cam.ac.uk>: relay not permitted
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index 090ad7be092211f8bb65b838f575f95fb3f0254d..60bbef8c53a5ad8bc2f5184ed9f098a37e6bd9d8 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
@@ -21,6 +22,7 @@ routed by lookuphost router
   host ten-3.test.ex [V4NET.0.0.3] MX=7 dnssec=no
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
@@ -43,6 +45,7 @@ routed by lookuphost router
   host ten-3.test.ex [V4NET.0.0.3] MX=7 dnssec=no
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
index d9f4557f54cc0b7bedf49fe78302f2f45f2224ed..a25f0e5e0d8b1e8a41e8fd7d19d15d128ffacd0b 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index f8636e8693e671a572ba05154eef3a0b0c3329c9..a28515dd00446ed90b9ae8f17ae15067f91bffbf 100644 (file)
@@ -1,10 +1,12 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 50d3de6ce8b4b6f1bd97582d302203c694cbc8a1..81bf94397b7d39d65c6cd6cdb4b62b0e1ec290a4 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
index fe30eb05e4b8d51255814d30feb3b471d7a4649a..75986186e64161ec0ae770a650163036a2683c7b 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -31,6 +32,7 @@ routed by lookuphost router
   host ten-1.test.ex [V4NET.0.0.1] MX=5 dnssec=no
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -85,6 +87,7 @@ routed by self router
   host myhost.test.ex [V4NET.10.10.10]
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -154,6 +157,7 @@ routed by self2 router
   host myhost.test.ex [V4NET.10.10.10]
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -180,6 +184,7 @@ lookuphost router declined for xx@not-exist.test.ex
 no more routers
 >>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=2 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -199,6 +204,7 @@ lowest numbered MX record points to local host: mxt1.test.ex: address failed (se
 failuphost router forced address failure
 >>>>>>>>>>>>>>>> Exim pid=p1238 (fresh-exec) terminating with rc=2 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index 9295d32fd29bcc86bb7588b298b6daafda28f4ac..6685019303bf7bc3c8b1e0f824766499562a8c00 100644 (file)
@@ -1,9 +1,11 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 944aa53ae55b4301cc56c4448246773ad217ab31..3501e48a7dd29c6726dbbaa67b5b8f7643c035e2 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -293,6 +294,7 @@ routed by lookuphost router
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=1 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 configuration file is TESTSUITE/test-config
@@ -585,6 +587,7 @@ routed by lookuphost router
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=1 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1236
 configuration file is TESTSUITE/test-config
@@ -879,6 +882,7 @@ routed by lookuphost router
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=2 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1237
 configuration file is TESTSUITE/test-config
@@ -969,6 +973,7 @@ srv router: defer for srv@test.fail.dns
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=1 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1238
 configuration file is TESTSUITE/test-config
index 523585d5b027dd6b1dc74d6abfffefd03e8ebe23..a895fc601592dc83cf2e9650667336678e6d8f71 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -49,6 +50,7 @@ LOG: MAIN
   Completed
 >>>>>>>>>>>>>>>> Exim pid=p1239 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -81,6 +83,7 @@ LOG: queue_run MAIN
   End queue run: pid=p1234 -qq
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -128,6 +131,7 @@ cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:550:503:503:QUIT+:250'
 LOG: MAIN
   ** a@test.ex F=<CALLER@test.ex> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined MAIL FROM:<CALLER@test.ex>: 550 NO
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -153,6 +157,7 @@ LOG: queue_run MAIN
   End queue run: pid=p1235 -qq
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -203,6 +208,7 @@ cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:250:550:503:RSET:250'
 LOG: MAIN
   ** b@test.ex F=<CALLER@test.ex> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<b@test.ex>: 550 Unknown
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -213,6 +219,7 @@ LOG: MAIN
   Completed
 >>>>>>>>>>>>>>>> Exim pid=p1250 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 1784b1bca418a22877b0c52a41dceee84cbb148b..879ba7eebebb6f18684bb969d5175d7560ebcbc4 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 c.domain in "a.domain"? no (end of list)
index 5b5770c834fa11f61f1179cc88ca4905fa5c1713..ce7d530c088a7b8bf2a25d8325d5e3f181ce5a41 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 Writing spool header file: TESTSUITE/spool//input//hdr.10HmbJ-000000005vi-0000
@@ -7,6 +8,7 @@ Renaming spool header file: TESTSUITE/spool//input//10HmbJ-000000005vi-0000-H
 LOG: MAIN
   <= CALLER@test.ex U=CALLER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 0c0ca3e65b4d143f46d72e789233059581b1af2e..6412f0e861fbcb7d1f854eb004b3b08efc2ffd33 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -185,6 +186,7 @@ routed by r3 router
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 configuration file is TESTSUITE/test-config
@@ -233,6 +235,7 @@ created log directory TESTSUITE/spool/log
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1236
 configuration file is TESTSUITE/test-config
@@ -509,6 +512,7 @@ search_tidyup called
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1238
 configuration file is TESTSUITE/test-config
index cde3dcd1a7c39209dc51d3f881d71b00263900a5..b92d4d832fc767f5e7e016f4f3a68f70d118d2cf 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -51,6 +52,7 @@ LOG: smtp_connection MAIN
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 configuration file is TESTSUITE/test-config
@@ -110,6 +112,7 @@ LOG: smtp_connection MAIN
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1236
 configuration file is TESTSUITE/test-config
@@ -180,6 +183,7 @@ LOG: smtp_connection MAIN
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1237
 configuration file is TESTSUITE/test-config
@@ -250,6 +254,7 @@ LOG: smtp_connection MAIN
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1238
 configuration file is TESTSUITE/test-config
index 0f8466a00d18f39c2d591dee161b2fc1ffab9a6f..6aac99c7d8acdf1c4c1c40e535bb418635607abd 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -90,6 +91,7 @@ routed by r3 router
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 configuration file is TESTSUITE/test-config
@@ -138,6 +140,7 @@ created log directory TESTSUITE/spool/log
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1236
 configuration file is TESTSUITE/test-config
@@ -309,6 +312,7 @@ search_tidyup called
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1238
 configuration file is TESTSUITE/test-config
index f716ff205af8b00b9daa2806c5e19be13afc90d0..bbd8765683c4ab9345d76b23971d40366898c5b8 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 seeking password data for user "CALLER": cache not available
@@ -108,6 +109,7 @@ routed by r3 router
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 seeking password data for user "CALLER": cache not available
index a17ec26efa309229908c947e78f70e331f032637..aedfab70fbc19dfe692be291d44c146d7537136f 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 seeking password data for user "root": cache not available
@@ -15,6 +16,7 @@ LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1235
 seeking password data for user "root": cache not available
@@ -37,6 +39,7 @@ LOG: MAIN
 changed uid/gid: post-delivery tidying
   uid=EXIM_UID gid=EXIM_GID pid=p1235
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1237
 seeking password data for user "root": cache not available
@@ -53,6 +56,7 @@ getpwnam() succeeded uid=uuuu gid=gggg
 LOG: MAIN
   <= <> R=10HmaY-000000005vi-0000 U=EXIMUSER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1238
 seeking password data for user "root": cache not available
@@ -81,6 +85,7 @@ LOG: MAIN
 >>>>>>>>>>>>>>>> Exim pid=p1235 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1240
 seeking password data for user "root": cache not available
@@ -96,6 +101,7 @@ getpwnam() succeeded uid=uuuu gid=gggg
 LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1241
 seeking password data for user "root": cache not available
index 3ef48e0dbe5697c823d169d4e89c0dc4ca206a25..fb876330cfae117e1421f8f2945b3e119c27c148 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -102,6 +103,7 @@ LOG: smtp_connection MAIN
   SMTP connection from CALLER D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -161,6 +163,7 @@ LOG: smtp_connection MAIN
   SMTP connection from (test) [1.2.3.4] D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -221,6 +224,7 @@ LOG: smtp_connection MAIN
   SMTP connection from (test) [V4NET.9.8.7] D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index b902d1b1fe832c7f6027be8993e59198c98f614d..dc7e0c020d4e4bfd48953bb96fb9d7704221ff65 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -23,6 +24,7 @@ routed by r1 router
   transport: <none>
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 8e735c3278f71de4367ca608539b02a770df0407..72553dcd869cd2b33c0fc2e56612589ffd09557f 100644 (file)
@@ -58,6 +58,7 @@
 >>>  list element: @[]
 >>> rhubarb.custard in helo_lookup_domains? no (end of list)
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 seeking password data for user "CALLER": cache not available
@@ -145,6 +146,7 @@ LOG: smtp_connection MAIN
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 seeking password data for user "CALLER": cache not available
index 052ccaa66565cf625cb48f6f148966efca0a0f6b..4105ca321b8c44059f65584824355f880fac9db4 100644 (file)
@@ -1,10 +1,12 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@the.local.host.name U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -59,11 +61,13 @@ LOG: MAIN
 >>>>>>>>>>>>>>>> Exim pid=p1235 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@the.local.host.name U=CALLER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index b736cd1603f851cfb21c2be3e3745e8a7489abf0..c3e17caccdc540902cbb0df65b64ca65fdc42c6b 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
@@ -34,6 +35,7 @@ LOG: MAIN
 created log directory TESTSUITE/spool/log
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
index 8cff3bd214f3b8a4bcc27f5cbf98ca7180fed339..0ffdc81c149f0810660035dc8ea131b1f861dda0 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -41,6 +42,7 @@ LOG: MAIN
   Completed
 >>>>>>>>>>>>>>>> Exim pid=p1235 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 0ddd349a332e6758b90d231795a99c15ab75067b..d886f53ee1e87fd68fb5fc3e7308023b3d535c62 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -39,6 +40,7 @@ LOG: MAIN
   Completed
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 0e16a6e37422170c00f6ddc5f969f2bf58c719aa..8d4a2b4592481d8dedb73e45be6cb5b9afed3364 100644 (file)
@@ -1,10 +1,12 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -46,6 +48,7 @@ end of retry processing
 >>>>>>>>>>>>>>>> Exim pid=p1238 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -104,6 +107,7 @@ LOG: queue_run MAIN
   End queue run: pid=p1234
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -162,6 +166,7 @@ LOG: queue_run MAIN
   End queue run: pid=p1235
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index 8dbb1f66f673a0571072570613dfef2058a6ff6c..0f27af75d5ccd6f49f5e4afed8d3ea70267f3a49 100644 (file)
@@ -1,10 +1,12 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -62,6 +64,7 @@ end of retry processing
 >>>>>>>>>>>>>>>> Exim pid=p1236 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index c3e9a33b89b155fb6a9ae7ba350f0e12b75bfa76..705be34840949e9f127ee978d380632e959901a2 100644 (file)
@@ -1,10 +1,12 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -153,6 +155,7 @@ LOG: MAIN
 >>>>>>>>>>>>>>>> Exim pid=p1236 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index 40e9d5c8e8bb9e46279761d627a51883afa5df20..e68c3c7e5d2b3afc3c317720cfcf35147297fac7 100644 (file)
@@ -6,6 +6,7 @@ LOG: MAIN
 LOG: MAIN
   Completed
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -53,6 +54,7 @@ LOG: MAIN
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -N -odi -Mc 10HmaY-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1235
 configuration file is TESTSUITE/test-config
index 0a5dca36c1ae6285008ff2ba654b810b0072449c..84d28eb82102d3a515f3169694b67540f6e9cd9f 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index da45f5edc0bf96eefe5674294399ce1061965e82..4a33285162300375ace5815159d895f9d7bb479c 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index 585510ef243889273b56ca4be2ab707173555712..e67722e26bee372c9f0da1adc279c66c2c173ada 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index c2de395fa333516a2273f92ce483185ec1d6296e..765c4d9a44921ef1b0abdb05f5632268ac3c0cce 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -9,6 +10,7 @@ LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1235
 configuration file is TESTSUITE/test-config
index c1f96114fb2e18596ef44b422bd161416271cf1d..6795f8dac51509630c0590f90cfd500a6b00136e 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index cc77313d0353ab64659cc6c1d8431d80896d356d..6c6ffdb1557f92a69661b55c1982ce87d64207aa 100644 (file)
@@ -1,10 +1,12 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -399,12 +401,14 @@ LOG: MAIN
   ** d3@myhost.test.ex R=ut4 T=ut4 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<d3@myhost.test.ex>: 550 hard error
 locking TESTSUITE/spool/db/retry.lockfile
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
 LOG: MAIN
   <= <> R=10HmaX-000000005vi-0000 U=EXIMUSER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index c118cb04d061f7e4cc8b993f0e1f877a33a31fd8..f8e3b9cf5bf86a31ffa81e2acee03486c890e3b2 100644 (file)
@@ -1,10 +1,12 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -921,12 +923,14 @@ LOG: MAIN
   f3@myhost.test.ex <f3@myhost.test.ex>: error ignored
 log writing disabled
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
 LOG: MAIN
   <= <> R=10HmaX-000000005vi-0000 U=EXIMUSER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -1014,11 +1018,13 @@ log writing disabled
 >>>>>>>>>>>>>>>> Exim pid=p1236 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index e781a5b0f4230beae6cb52292341c1d0aedd79a2..9ef0c67a39affa6dc9c6b129498415b9d647c2bb 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -41,6 +42,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -67,6 +69,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -92,6 +95,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -130,6 +134,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -152,6 +157,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1238 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -187,6 +193,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1239 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -208,6 +215,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1240 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -254,6 +262,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1241 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -276,6 +285,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1242 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -325,6 +335,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1243 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -352,6 +363,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1244 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -395,6 +407,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1245 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -422,6 +435,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1246 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -465,6 +479,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1247 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -492,6 +507,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1248 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -547,6 +563,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1249 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -575,6 +592,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1250 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -624,6 +642,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1251 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -667,6 +686,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1252 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -715,6 +735,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1253 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -758,6 +779,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1254 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -806,6 +828,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1255 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -846,6 +869,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1256 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -895,6 +919,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1257 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -942,6 +967,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1258 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -987,6 +1013,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1259 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -1038,6 +1065,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1260 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 6f85db524303a9f468bd91c81b5930eea3693c50..56019297060d9b1a98827fa74fd5dbcd8f054221 100644 (file)
@@ -1,10 +1,12 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -328,6 +330,7 @@ locking TESTSUITE/spool/db/retry.lockfile
 >>>>>>>>>>>>>>>> Exim pid=p1237 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -592,6 +595,7 @@ LOG: queue_run MAIN
   End queue run: pid=p1234 -qf
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index 3ee15ba8f8fb4300b2cd36ad925569cfae7c602e..befab983d99b4efc566ddcf9d07547bca59e88af 100644 (file)
@@ -1,10 +1,12 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -121,11 +123,13 @@ After routing:
     defer_aaaa@myhost.test.ex
 locking TESTSUITE/spool/db/retry.lockfile
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= <> R=10HmaX-000000005vi-0000 U=CALLER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -173,6 +177,7 @@ locking TESTSUITE/spool/db/retry.lockfile
 >>>>>>>>>>>>>>>> Exim pid=p1236 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index 0cd2aa433d8a777eb0c12300b2d85cad8c8ca62b..46275ea5d55817104845a2f106e8ce91b8fe5a49 100644 (file)
@@ -1,10 +1,12 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -140,6 +142,7 @@ locking TESTSUITE/spool/db/retry.lockfile
 >>>>>>>>>>>>>>>> Exim pid=p1236 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index 93397d546a7cd4653f4bfa97c0af735513b3800c..efbad7565b747536ad6b0f77f2dff78a7c1e71af 100644 (file)
@@ -1,10 +1,12 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 2c240677b4e49d36268560a718b9a67cde13bff9..d35fb626190ba7f4605240f4a697d6fd0bce26aa 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 seeking password data for user "CALLER": cache not available
index eb418cfea9d248a85719f2a1cbeba21d04105507..6da513f1f3d5740afa847e2ec26ae74c3ac4d8f7 100644 (file)
@@ -1,10 +1,12 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -18,12 +20,14 @@ CALLER@test.ex in senders? yes (end of list)
 LOG: MAIN
   ** userx@test.ex R=r1: forced fail
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
 LOG: MAIN
   <= <> R=10HmaX-000000005vi-0000 U=EXIMUSER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -43,6 +47,7 @@ LOG: MAIN
 >>>>>>>>>>>>>>>> Exim pid=p1236 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index 52f542fa55d84ebbe91b72f6c80e6a17feef17b4..e2721b8c4804dcce8d734b4832ef852039e09191 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 seeking password data for user "CALLER": cache not available
@@ -167,6 +168,7 @@ LOG: smtp_connection MAIN
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 seeking password data for user "CALLER": cache not available
@@ -282,6 +284,7 @@ SMTP>> 250 OK id=10HmaX-000000005vi-0000
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1236
 seeking password data for user "CALLER": cache not available
@@ -479,6 +482,7 @@ SMTP>> 250 OK id=10HmaY-000000005vi-0000
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaY-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1238
 seeking password data for user "CALLER": cache not available
index 2b78fcea462095f6e6e6778b6938288de6e34584..901d53d55103bf16cf6b7cfed9c802956d352985 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 3422fe1ea8b9b18cf3070f513c0e4378505642c9..a84d5b16319c4eba7f1c9fae7dbf6b8df8e2d73b 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -167,11 +168,12 @@ Deferred addresses:
   x@y in "*"? yes (matched "*")
 retry for R:x@y = * 0 0
  dbfn_read: key=R:x@y
+ dbfn_read: null return
 failing_interval=ttt message_age=ttt
 Writing retry data for R:x@y
   first failed=dddd last try=dddd next try=+1 expired=1
   errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<x@y>: 451 Temporary error
- dbfn_write: key=R:x@y
+ dbfn_write: key=R:x@y datalen NNN
  *@V4NET.0.0.0 in "*"?
   list element: *
   address match test: subject=*@V4NET.0.0.0 pattern=*
@@ -181,12 +183,13 @@ Writing retry data for R:x@y
   *@V4NET.0.0.0 in "*"? yes (matched "*")
 retry for T:[V4NET.0.0.0]:V4NET.0.0.0:PORT_S (y) = * 0 0
  dbfn_read: key=T:[V4NET.0.0.0]:V4NET.0.0.0:PORT_S
+ dbfn_read: null return
 failing_interval=ttt message_age=ttt
 on queue longer than maximum retry
 Writing retry data for T:[V4NET.0.0.0]:V4NET.0.0.0:PORT_S
   first failed=dddd last try=dddd next try=+0 expired=0
   errno=dd more_errno=dd,A Network Error
- dbfn_write: key=T:[V4NET.0.0.0]:V4NET.0.0.0:PORT_S
+ dbfn_write: key=T:[V4NET.0.0.0]:V4NET.0.0.0:PORT_S datalen NNN
 timed out: all retries expired
 LOG: MAIN
   ** x@y: retry timeout exceeded
@@ -195,6 +198,7 @@ LOG: MAIN
 end of retry processing
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xd7715ced -MCd bounce-message -odi -odi -t -oem -oi -f <> -E10HmaX-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1236
 configuration file is TESTSUITE/test-config
@@ -254,6 +258,7 @@ LOG: MAIN
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xd7715ced -MCd local-accept-delivery -odi -Mc 10HmaY-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1237
 configuration file is TESTSUITE/test-config
@@ -271,8 +276,11 @@ set_process_info: pppp delivering 10HmaY-000000005vi-0000
 Considering: CALLER@myhost.test.ex
 unique = CALLER@myhost.test.ex
  dbfn_read: key=R:myhost.test.ex
+ dbfn_read: null return
  dbfn_read: key=R:CALLER@myhost.test.ex
+ dbfn_read: null return
  dbfn_read: key=R:CALLER@myhost.test.ex:<>
+ dbfn_read: null return
 no   domain  retry record
 no   address retry record
 CALLER@myhost.test.ex: queued for routing
index b7873266f427ae857b4e96e8fdcc5b29263bd477..884ffd32aedd0422124cb9dd9dc8bba873c8c812 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index 0a279503d7f1bc5dffb51b95e8772beb9c9bff3b..dfd8a44da49b43505146312ecb6f10924579ad08 100644 (file)
@@ -1,10 +1,12 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -49,11 +51,13 @@ LOG: MAIN
 >>>>>>>>>>>>>>>> Exim pid=p1235 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@test.ex U=CALLER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -88,11 +92,13 @@ LOG: MAIN
 >>>>>>>>>>>>>>>> Exim pid=p1238 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@test.ex U=CALLER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 75b64878a23050b374ec019329b038e4c192521c..e2f6cf70bbf2dd0f697f263e5cafd148c944b21b 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index 9fcec221ea2af833e1d965e5bc385d1fff0ef9f8..853ffbad3b8e0366209250980d6c18ab9b174ac5 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -144,8 +145,10 @@ Attempting full verification using callout
  returned from EXIM_DBOPEN: 0xAAAAAAAA
  opened hints database TESTSUITE/spool/db/callout: flags=O_RDWR
  dbfn_read: key=remote
+ dbfn_read: size 40 return
  callout cache: found domain record for remote
  dbfn_read: key=qq@remote
+ dbfn_read: null return
  callout cache: no address record found for qq@remote
  EXIM_DBCLOSE(0xAAAAAAAA)
  closed hints database and lockfile
@@ -176,13 +179,13 @@ cmd buf flush ddd bytes
 cmdlog: '220:EHLO:250:MAIL:250:RCPT:550:QUIT:250'
  locking TESTSUITE/spool/db/callout.lockfile
  locked  TESTSUITE/spool/db/callout.lockfile
- EXIM_DBOPEN: file <TESTSUITE/spool/db/callout> dir <TESTSUITE/spool/db> flags=O_RDWR|O_CREAT
+ EXIM_DBOPEN: file <TESTSUITE/spool/db/callout> dir <TESTSUITE/spool/db> flags=O_RDWR
  returned from EXIM_DBOPEN: 0xAAAAAAAA
- opened hints database TESTSUITE/spool/db/callout: flags=O_RDWR|O_CREAT
- dbfn_write: key=remote
+ opened hints database TESTSUITE/spool/db/callout: flags=O_RDWR
+ dbfn_write: key=remote datalen NNN
  wrote callout cache domain record for remote:
    result=1 postmaster=0 random=0
- dbfn_write: key=qq@remote
+ dbfn_write: key=qq@remote datalen NNN
  wrote negative callout cache address record for qq@remote
  EXIM_DBCLOSE(0xAAAAAAAA)
  closed hints database and lockfile
@@ -279,8 +282,10 @@ Attempting full verification using callout
  returned from EXIM_DBOPEN: 0xAAAAAAAA
  opened hints database TESTSUITE/spool/db/callout: flags=O_RDWR
  dbfn_read: key=remote
+ dbfn_read: size 40 return
  callout cache: found domain record for remote
  dbfn_read: key=qq@remote
+ dbfn_read: size 16 return
  callout cache: found address record for qq@remote
  callout cache: address record is negative
  EXIM_DBCLOSE(0xAAAAAAAA)
index a3b583e116965e1226f82ab39b84f45e8be4d392..cbcfb336b05f54d1b3d47d5eaf504e97417d43de 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index cec473fb0af6bd968a11909f71c1e5f8f60d7dc0..29b3eae63f13399b5ced39cf4e0e3aaee439eb61 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 environment after trimming:
@@ -403,6 +404,7 @@ created log directory TESTSUITE/spool/log
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715dfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1235
 environment after trimming:
index de5ffabc723c12503eedd3d7075c230ab572aa43..0f97752856bf8d0041368ce29ca07e3592c6d1b7 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -47,6 +48,7 @@ created log directory TESTSUITE/spool/log
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -N -odi -Mc 10HmaX-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1235
 configuration file is TESTSUITE/test-config
@@ -241,6 +243,7 @@ search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 ### _data from a multi-step expansion
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1237
 configuration file is TESTSUITE/test-config
@@ -288,6 +291,7 @@ LOG: MAIN
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -N -odi -Mc 10HmaY-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1238
 configuration file is TESTSUITE/test-config
index 257cd0c1d255435af1575a3c6d0dbc4aa9c8e7e6..25b74291ce41be88233e054585ac48e71784c518 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -146,6 +147,7 @@ created log directory TESTSUITE/spool/log
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1235
 configuration file is TESTSUITE/test-config
@@ -252,6 +254,7 @@ t1 transport entered
 taking data from address
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd autoreply -odi -odi -t -oem -oi -f <> -E10HmaX-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1238
 configuration file is TESTSUITE/test-config
@@ -917,6 +920,7 @@ LOG: MAIN
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaY-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1239
 configuration file is TESTSUITE/test-config
index 34992e8eeb6d4fe901403025a5bb2a62d9a39a8e..c43b02a03154f6dd5ca4c0e00dbc94d0c0786a38 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -47,6 +48,7 @@ created log directory TESTSUITE/spool/log
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1235
 configuration file is TESTSUITE/test-config
index 14244f60c46a8c211dcb979bbc2fea78487553b3..05abad4387e54336b4916ec97b346ad6bcaf2093 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index d21a454733b2fa9b30c83a471dff8678bb37395e..28f6784a20a87faed78f81b2913fe0073e533997 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index acb3e94091cd3e58fecb9529578852b3bd8f7702..f72ecc2ce099fecc84676927512406aba9c9a9c0 100644 (file)
@@ -1,10 +1,12 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -58,12 +60,14 @@ cmdlog: '220:EHLO:250:MAIL:250:RCPT:550:QUIT+:250'
 LOG: MAIN
   ** x@uppercase.test.ex R=r1 T=t1 H=uppercase.test.ex [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<x@UpperCase.test.ex>: 550 Unknown
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
 LOG: MAIN
   <= <> R=10HmaX-000000005vi-0000 U=EXIMUSER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index a4f3433d77c0883c8a50785832e7c3c77b175eac..ef8cb9889d14ba0b9e06a2a7000f416a235e6b45 100644 (file)
@@ -28,6 +28,7 @@ MUNGED: ::1 will be omitted in what follows
 >>> accept: condition test succeeded in ACL "mail"
 >>> end of ACL "mail": ACCEPT
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -97,8 +98,10 @@ Attempting full verification using callout
  returned from EXIM_DBOPEN: 0xAAAAAAAA
  opened hints database TESTSUITE/spool/db/callout: flags=O_RDWR
  dbfn_read: key=y
+ dbfn_read: null return
  callout cache: no domain record found for y
  dbfn_read: key=x@y
+ dbfn_read: null return
  callout cache: no address record found for x@y
  EXIM_DBCLOSE(0xAAAAAAAA)
  closed hints database and lockfile
@@ -129,13 +132,13 @@ cmd buf flush ddd bytes
 cmdlog: '220:EHLO:250:MAIL:250:RCPT:250:QUIT:220'
  locking TESTSUITE/spool/db/callout.lockfile
  locked  TESTSUITE/spool/db/callout.lockfile
- EXIM_DBOPEN: file <TESTSUITE/spool/db/callout> dir <TESTSUITE/spool/db> flags=O_RDWR|O_CREAT
+ EXIM_DBOPEN: file <TESTSUITE/spool/db/callout> dir <TESTSUITE/spool/db> flags=O_RDWR
  returned from EXIM_DBOPEN: 0xAAAAAAAA
- opened hints database TESTSUITE/spool/db/callout: flags=O_RDWR|O_CREAT
- dbfn_write: key=y
+ opened hints database TESTSUITE/spool/db/callout: flags=O_RDWR
+ dbfn_write: key=y datalen NNN
  wrote callout cache domain record for y:
    result=1 postmaster=0 random=0
- dbfn_write: key=x@y
+ dbfn_write: key=x@y datalen NNN
  wrote positive callout cache address record for x@y
  EXIM_DBCLOSE(0xAAAAAAAA)
  closed hints database and lockfile
@@ -151,6 +154,7 @@ LOG: smtp_connection MAIN
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 configuration file is TESTSUITE/test-config
@@ -220,8 +224,10 @@ Attempting full verification using callout
  returned from EXIM_DBOPEN: 0xAAAAAAAA
  opened hints database TESTSUITE/spool/db/callout: flags=O_RDWR
  dbfn_read: key=y
+ dbfn_read: size 40 return
  callout cache: found domain record for y
  dbfn_read: key=x@y
+ dbfn_read: size 16 return
  callout cache: found address record for x@y
  callout cache: address record is positive
  EXIM_DBCLOSE(0xAAAAAAAA)
index 40eef044c407c1e43d9fc7aa0d22df53d21403d6..eff327b6215b3d34d2b65cfa7cee7b0d00aca4bd 100644 (file)
@@ -1,6 +1,7 @@
 
 ******** SERVER ********
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -23,6 +24,7 @@ p1240 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -DSERVER=se
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (daemon) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 configuration file is TESTSUITE/test-config
@@ -46,6 +48,7 @@ p1241 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -DSERVER=se
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1235 (daemon) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1236
 configuration file is TESTSUITE/test-config
@@ -70,6 +73,7 @@ p1242 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -DSERVER=se
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1236 (daemon) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1237
 configuration file is TESTSUITE/test-config
@@ -94,6 +98,7 @@ p1243 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -DSERVER=se
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1237 (daemon) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1238
 configuration file is TESTSUITE/test-config
@@ -119,6 +124,7 @@ p1244 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -DSERVER=se
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1238 (daemon) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1239
 configuration file is TESTSUITE/test-config
index 77e14798136f98b75d9a85d6f945a8a0a05bb3e0..2ae20bf65204a84b5a1fcc48cb8e5b79e76560d3 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index a8142da544fe8fc4ee22aae7bc042b1a93708512..debc4f72a2323a315181c7630be8c09fa6161765 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
  search_open: lsearch "TESTSUITE/aux-fixed/0437.ls"
  search_find: file="TESTSUITE/aux-fixed/0437.ls"
    key="spool" partial=-1 affix=NULL starflags=0 opts=NULL
index 58f8d82629fa29bfe29dc2156889e200e7d2396d..b63c3c556844aa91ff9360448372e7202bec2e2e 100644 (file)
@@ -1,6 +1,7 @@
 
 ******** SERVER ********
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -25,6 +26,7 @@ p1237 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -DSERVER=se
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (daemon) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 configuration file is TESTSUITE/test-config
@@ -49,6 +51,7 @@ p1238 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -DSERVER=se
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1235 (daemon) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1236
 configuration file is TESTSUITE/test-config
index 979b30d458fef0fcaf85d0d664346f29ef525ddd..28dd13c54240fe3ac639b3c574b4f1edc34760a1 100644 (file)
@@ -1,10 +1,12 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -32,6 +34,7 @@ LOG: MAIN
 >>>>>>>>>>>>>>>> Exim pid=p1236 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index f1f6d8fd39198f232c37993bfbaa467db9ff1e3b..1f0f29e018a0c89df3dfa60fccf5b8a832760ce8 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -53,6 +54,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -91,6 +93,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index e12674204c79ecc090259af8c602410964e1c125..391589473e6e270719cc26c18203d3bc71fee90e 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index 672b36ba5b3a3a01ac581d46618a370a9f73015d..aa91bff38a4efe8cf862f1305619ca5c1d19cd22 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index 5bcd5a1ceafe41c69e9355b88a1a081b4def7525..3b0d8418d35be48453360c48a98215d716f3aec0 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 seeking password data for user "CALLER": cache not available
@@ -34,6 +35,7 @@ search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 exim: bad -f address "abc@somewhere.": domain is malformed (trailing dot not allowed)
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 seeking password data for user "CALLER": cache not available
@@ -108,6 +110,7 @@ LOG: smtp_connection MAIN
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1236
 seeking password data for user "CALLER": cache not available
index 0fcb7f8c26bffcb52fb77de993cfb34ba6d76ee8..f58711b976fad28d68b682da51975ff996e75d56 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index a0950c7a376439f0288fe4c8541a8f5710a4f922..a83a4921f7eb4f1df798f3056ba7e7eb8e6d04bd 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -26886,6 +26887,7 @@ created log directory TESTSUITE/spool/log
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 configuration file is TESTSUITE/test-config
@@ -27082,6 +27084,7 @@ LOG: MAIN
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1236
 configuration file is TESTSUITE/test-config
@@ -27278,6 +27281,7 @@ LOG: MAIN
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1237
 configuration file is TESTSUITE/test-config
@@ -27446,6 +27450,7 @@ LOG: MAIN
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1238
 configuration file is TESTSUITE/test-config
@@ -27609,6 +27614,7 @@ LOG: MAIN
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1238 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1239
 configuration file is TESTSUITE/test-config
index e3e8f01efa6a29c6533be3aa74d100a184fbef25..3639713ec7b379233bb2f8bdd39e988b626746d6 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -33,6 +34,7 @@ LOG: smtp_connection MAIN
   SMTP connection from CALLER D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 61227a3882b016a0dcc32ad6f5987b83a42f3583..1f265b0a7dbd09dbc9bcac5239a71d622a9ad308 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -60,6 +61,7 @@ LOG: MAIN
   ** userx@test.ex R=r1 T=t1 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<userx@test.ex>: 550 NO
 set_process_info: pppp tidying up after delivering 10HmaX-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -69,6 +71,7 @@ writing data block fd=dddd size=sss timeout=0
 LOG: MAIN
   <= <> R=10HmaX-000000005vi-0000 U=EXIMUSER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 64ff0acc0674f515268fcb4a1b5f78ecbabe06de..dbcd3b5bde067ced95dcb3cb8641595e6e41b5e7 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index a40b66a66b05dc4b4f20fc90e74f0d1d51df1ad9..ff2b49beb7b6372546b23dcd3c38c780e9846f39 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: smtp_connection MAIN
index 22ea6ae6504e735f94d025bc85547a0cabff2bc9..5855e2c6f7c3b95b9580a73e819f34a0eb5c3d6a 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: -C, -D, -be or -bf forces real uid
   uid=CALLER_UID gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index d8b9bc1d9b05009a583edb8bf2fa7f4bc9146052..696d5a72d9524525a1bac05839af8b386d89e2f0 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 seeking password data for user "CALLER": cache not available
@@ -79,6 +80,7 @@ SMTP>> 250 OK id=10HmaX-000000005vi-0000
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1235
 seeking password data for user "CALLER": cache not available
index 1c20a8b4b65ffd2f24c4286afbb88a0ea48c974e..80e21ae5dd837ec0ace32a2f84eb78f59b82ebdc 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -32,6 +33,7 @@ LOG: MAIN
 created log directory TESTSUITE/spool/log
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -64,6 +66,7 @@ LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -96,6 +99,7 @@ LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -128,6 +132,7 @@ LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 >>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -160,6 +165,7 @@ LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 >>>>>>>>>>>>>>>> Exim pid=p1238 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -192,6 +198,7 @@ LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 >>>>>>>>>>>>>>>> Exim pid=p1239 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -224,6 +231,7 @@ LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 >>>>>>>>>>>>>>>> Exim pid=p1240 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 236d952fd85d87c38144e41f3786d7fdb069d082..ebc043e8e213005b65a6b3dc57e6807cbacd70e0 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index 98f21d1bd3948e3437fdcb34d2e2e9d182a63d27..e7c7f8f9f8e8bc5be2daaf70b9b8472b2ceeb2f9 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -71,6 +72,7 @@ LOG: MAIN
 LOG: MAIN
   ** userx@myhost.test.ex: retry timeout exceeded
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -79,6 +81,7 @@ writing data block fd=dddd size=sss timeout=0
 LOG: MAIN
   <= <> R=10HmaX-000000005vi-0000 U=EXIMUSER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -96,6 +99,7 @@ LOG: queue_run MAIN
   End queue run: pid=p1234 -qf
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -144,6 +148,7 @@ LOG: MAIN
 LOG: MAIN
   ** userx@myhost.test.ex: retry timeout exceeded
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -152,6 +157,7 @@ writing data block fd=dddd size=sss timeout=0
 LOG: MAIN
   <= <> R=10HmaZ-000000005vi-0000 U=EXIMUSER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 31658bec3abca5d5b3894aba3963fb2f765548a9..d6c49aa20636e23f7ba9c9296fa0462728b7251c 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 configuration file is TESTSUITE/test-config
index 536804c4d3cf915ca8642255d5f59a3e7e0412ea..c4a292a488af18f639630ea231e5891bd1d5d7fe 100644 (file)
@@ -1,10 +1,12 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -48,6 +50,7 @@ end of retry processing
 >>>>>>>>>>>>>>>> Exim pid=p1236 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index 5df9df63b70aa62f6256d67ad50a8499dfe1af82..997abd329480dc46161162b6d7ff7a490de2f4d1 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index f2e80499d133ffb31587905ad5d3cf04d40d38ba..9540e834a6c612308013bc1f10e3f7f97638fce9 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 environment after trimming:
  PATH=<munged>
 adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys
@@ -350,6 +351,7 @@ LOG: MAIN
   <= CALLER@test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 environment after trimming:
  PATH=<munged>
 adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys
@@ -434,6 +436,7 @@ try option delay_warning_condition
 >>>>>>>>>>>>>>>> Exim pid=p1235 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 environment after trimming:
  PATH=<munged>
 adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys
index 25f935ced11a09ef605ade35f00bbda73febb17b..0f7a71a32c2480477e2cca4317b80ca1602e2285 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -86,6 +87,7 @@ routed by dns router
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 configuration file is TESTSUITE/test-config
index 4e6690afb522535393e544e5bbfb8a074887924e..1536315ab505f10a79f954e69359328a5f8cef89 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -38,6 +39,7 @@ Writing retry data for R:x@y:<CALLER@myhost.test.ex>
 end of retry processing
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index 09cc0d0df6562c315f2fb7ae4e35a4977a19b5db..8ce12a2e5c417fd9bc6af254a3e851aec1e2e0a4 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index c1bc66ab62f35186923eefd1eceaa7f6f5b18eab..ad89f09be62667491d54e23752c01a75b089e967 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index 6e746438aa40f766ebae2deb5676513a4d00059e..67739d4281c68aa43a3dd36b27a1303d60e33bc5 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -43,6 +44,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -69,6 +71,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -94,6 +97,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -134,6 +138,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -156,6 +161,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1238 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -195,6 +201,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1239 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -216,6 +223,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1240 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -264,6 +272,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1241 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -286,6 +295,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1242 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -337,6 +347,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1243 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -364,6 +375,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1244 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -409,6 +421,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1245 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -436,6 +449,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1246 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -481,6 +495,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1247 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -508,6 +523,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1248 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -565,6 +581,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1249 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -593,6 +610,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1250 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -644,6 +662,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1251 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -689,6 +708,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1252 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -739,6 +759,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1253 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -784,6 +805,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1254 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -834,6 +856,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1255 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -876,6 +899,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1256 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -927,6 +951,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1257 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -976,6 +1001,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1258 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -1023,6 +1049,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1259 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -1076,6 +1103,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1260 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 350764c324fca7f4a0c93faf93fa34bd2672d23b..6a801a29983183e525ee07c441161817aebd6847 100644 (file)
@@ -1,6 +1,7 @@
 
 ******** SERVER ********
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index 8b59ca9a690da51513e141c20f42f8a632a2cce3..147ad3067549686f61ded1fcaceb9119ade6f6b6 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 environment after trimming:
  PATH=<munged>
 adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys
@@ -73,6 +74,7 @@ LOG: smtp_connection MAIN
   SMTP connection from CALLER D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 environment after trimming:
  PATH=<munged>
 adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys
index 44152a48e85e93379c45602dde9ae3e54b702032..a1d5f070e3d3bc300c0265bc3f4f0328dc5347c8 100644 (file)
@@ -1,9 +1,11 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -64,11 +66,13 @@ LOG: MAIN
 >>>>>>>>>>>>>>>> Exim pid=p1235 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -131,11 +135,13 @@ LOG: MAIN
 >>>>>>>>>>>>>>>> Exim pid=p1237 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 5424c5664039923443bc1a41bdd02928d7b6a04a..802d98a7185745d2338dc232352733b9943418ea 100644 (file)
@@ -25,6 +25,7 @@
 01:01:01 p1237  LOG: smtp_connection MAIN
 01:01:01 p1237    SMTP connection from (test.ex) [127.0.0.1] D=qqs closed by QUIT
 01:01:01 p1239  Exim version x.yz uid=EXIM_UID gid=EXIM_GID pid=p1239 D=fff9ffff
+01:01:01 p1239  Hints DB:
 01:01:01 p1239  macros_trusted overridden to true by whitelisting
 01:01:01 p1239  changed uid/gid: forcing real = effective
 01:01:01 p1239    uid=uuuu gid=EXIM_GID pid=p1239
index ce15ccd7aea62524f05c2583501d585ba3faa54c..d7fac294a91bff9ebf45c989691e044e970c7a0c 100644 (file)
@@ -1,6 +1,7 @@
 
 ******** SERVER ********
 Exim version x.yz ....
+Hints DB:
 environment after trimming:
  PATH=<munged>
 adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys
@@ -489,7 +490,6 @@ p1235  ␉(envelope-from░<CALLER@test.ex>)↩
 p1235  ␉id░10HmaX-000000005vi-0000↩
 p1235  ␉for░dest_1@test.ex
 p1235             ╰──(tainted)
-p1235 try option acl_smtp_dkim
 p1235 try option acl_smtp_data
 p1235  ╭considering: ${tod_full}
 p1235  ├───expanded: ${tod_full}
@@ -956,7 +956,6 @@ p1236  ␉(envelope-from░<CALLER@test.ex>)↩
 p1236  ␉id░10HmaY-000000005vi-0000↩
 p1236  ␉for░dest_2@test.ex
 p1236             ╰──(tainted)
-p1236 try option acl_smtp_dkim
 p1236 try option acl_smtp_data
 p1236  ╭considering: ${tod_full}
 p1236  ├───expanded: ${tod_full}
index 3093c24ef0f6cf9164cbeef6939c79f433d2f6d8..9a9b6a90119b528999ac43667ecc59ca6b8cd953 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -8,6 +9,7 @@ created log directory TESTSUITE/spool/log
 LOG: MAIN
   <= fred@myhost.test.ex U=root P=local-smtp S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -67,6 +69,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=q.qqqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -75,6 +78,7 @@ LOG: smtp_connection MAIN
 LOG: MAIN
   <= fred@myhost.test.ex U=root P=local-smtp S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -133,6 +137,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=q.qqqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -141,6 +146,7 @@ LOG: smtp_connection MAIN
 LOG: MAIN
   <= fred@myhost.test.ex U=root P=local-smtp S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -202,6 +208,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=q.qqqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1238 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -210,6 +217,7 @@ LOG: smtp_connection MAIN
 LOG: MAIN
   <= fred@myhost.test.ex U=root P=local-smtp S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -273,6 +281,7 @@ LOG: smtp_connection MAIN
   SMTP connection from root D=q.qqqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1240 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -281,6 +290,7 @@ LOG: smtp_connection MAIN
 LOG: MAIN
   <= fred@myhost.test.ex U=root P=local-smtp S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index de73350f1a51081daf0743ab69e49223ba7ddefa..ef5f0b89fbb5e8b412815ba019f663d129ac700b 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -24,6 +25,7 @@ DNS lookup of 46.test.ex (A) succeeded
   writing neg-cache entry for v6.test.ex-A-xxxx, ttl 3000
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index ca46d25e6580cf9bc709cb45facfd587a28ad118..aa1a3f0485ca41b7e3f4d800aae5d5a00afefdb6 100644 (file)
@@ -1,6 +1,7 @@
 
 ******** SERVER ********
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -24,6 +25,7 @@ p1242 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -DSERVER=se
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (daemon) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 configuration file is TESTSUITE/test-config
@@ -49,6 +51,7 @@ p1243 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -DSERVER=se
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1235 (daemon) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1236
 configuration file is TESTSUITE/test-config
@@ -75,6 +78,7 @@ p1244 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -DSERVER=se
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1236 (daemon) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1237
 configuration file is TESTSUITE/test-config
@@ -101,6 +105,7 @@ p1245 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -DSERVER=se
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1237 (daemon) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1238
 configuration file is TESTSUITE/test-config
@@ -124,6 +129,7 @@ p1246 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -DSERVER=se
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1238 (daemon) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1239
 configuration file is TESTSUITE/test-config
@@ -150,6 +156,7 @@ p1247 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -DSERVER=se
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1239 (daemon) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1240
 configuration file is TESTSUITE/test-config
@@ -177,6 +184,7 @@ p1248 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -DSERVER=se
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1240 (daemon) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1241
 configuration file is TESTSUITE/test-config
index 7a9ebd556697a7ef20a01b2fc97a24cc0f7e27e4..27b80fa001f1f3c13fe38a583e10c0aa013d2f3f 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -47,6 +48,7 @@ LOG: MAIN
   Completed
 >>>>>>>>>>>>>>>> Exim pid=p1245 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -68,6 +70,7 @@ LOG: MAIN
   Completed
 >>>>>>>>>>>>>>>> Exim pid=p1246 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -98,6 +101,7 @@ LOG: queue_run MAIN
   End queue run: pid=p1234 -qqf
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -146,6 +150,7 @@ LOG: MAIN
   Completed
 >>>>>>>>>>>>>>>> Exim pid=p1252 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -167,6 +172,7 @@ LOG: MAIN
   Completed
 >>>>>>>>>>>>>>>> Exim pid=p1253 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -197,6 +203,7 @@ LOG: queue_run MAIN
   End queue run: pid=p1235 -qqf
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -255,6 +262,7 @@ LOG: MAIN
   Completed
 >>>>>>>>>>>>>>>> Exim pid=p1259 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -297,6 +305,7 @@ LOG: MAIN
   Completed
 >>>>>>>>>>>>>>>> Exim pid=p1260 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 98817e63978c4046c3966aeb6ccec4eb1c267524..9192cd128368a936e21611ccdce6d02b65c50df0 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: smtp_connection MAIN
@@ -42,6 +43,7 @@ LOG: smtp_connection MAIN
   SMTP connection from CALLER D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 98817e63978c4046c3966aeb6ccec4eb1c267524..9192cd128368a936e21611ccdce6d02b65c50df0 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: smtp_connection MAIN
@@ -42,6 +43,7 @@ LOG: smtp_connection MAIN
   SMTP connection from CALLER D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 7f1722497a4c37cbc2a6ed54411d1af2c373630e..70972b0c0d21ff1b366eb0bf4ca4a498e7d30f39 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -24,6 +25,7 @@ dropping to exim gid; retaining priv uid
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 search_tidyup called
index 0cee0c364164f822904f5c63e1e13c3782411d76..eb37f80cbb805a58cfb2faac1f750ff6ae75e65d 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1236
 seeking password data for user "CALLER": cache not available
@@ -167,6 +168,7 @@ routed by r2 router
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -212,6 +214,7 @@ search_tidyup called
 
 ******** SERVER ********
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 55f935040a4e18a45f4bbef172c560dc72d26b13..f9c7704ca0a04a3716ce3db0bea73d4c1e466618 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -109,6 +110,7 @@ LOG: smtp_connection MAIN
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 configuration file is TESTSUITE/test-config
index ae1208ca61deac0fc00bde71e23e4132561babbf..4c814c3a18152fbdfc5637235478b321d9a0bfb5 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -136,6 +137,7 @@ dropping to exim gid; retaining priv uid
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 configuration file is TESTSUITE/test-config
@@ -264,6 +266,7 @@ LOG: smtp_connection MAIN
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1236
 configuration file is TESTSUITE/test-config
@@ -392,6 +395,7 @@ LOG: smtp_connection MAIN
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1237
 configuration file is TESTSUITE/test-config
@@ -509,6 +513,7 @@ LOG: smtp_connection MAIN
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1238
 configuration file is TESTSUITE/test-config
@@ -557,6 +562,7 @@ created log directory TESTSUITE/spool/log
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -DOPT=y -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1239
 configuration file is TESTSUITE/test-config
@@ -700,6 +706,7 @@ search_tidyup called
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1238 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -716,6 +723,7 @@ dropping to exim gid; retaining priv uid
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1241 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -732,6 +740,7 @@ dropping to exim gid; retaining priv uid
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1242 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -740,6 +749,7 @@ dropping to exim gid; retaining priv uid
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1243 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index c76b303383e57cad191f5ed0d8ced1790761bcaf..e35a8f5a41455d21efe083415b21b8d8ff8a14ee 100644 (file)
@@ -2,6 +2,7 @@
 ### wait for db startup, set password on the root user
 ### create testdb and extra users
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -244,6 +245,7 @@ close MYSQL connection: ip4.ip4.ip4.ip4:1223/test/root
 close MYSQL connection: 127.0.0.1:PORT_N/test/root
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 01:01:01 p1235  Exim version x.yz uid=CALLER_UID gid=CALLER_GID pid=p1235 D=fff9ffff
+01:01:01 p1235  Hints DB:
 01:01:01 p1235  macros_trusted overridden to true by whitelisting
 01:01:01 p1235  changed uid/gid: forcing real = effective
 01:01:01 p1235    uid=uuuu gid=CALLER_GID pid=p1235
@@ -727,6 +729,7 @@ close MYSQL connection: 127.0.0.1:PORT_N/test/root
 01:01:01 p1235  close MYSQL connection: 127.0.0.1:PORT_N/test/root
 01:01:01 p1235  >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1236
 configuration file is TESTSUITE/test-config
@@ -781,6 +784,7 @@ created log directory TESTSUITE/spool/log
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1237
 configuration file is TESTSUITE/test-config
index 6f244223dea5527d2e2cd52063b1a02d4254348d..15ce3eab129c49950f345fdaec26ea38dd5251c8 100644 (file)
@@ -2,6 +2,7 @@
 WARNING: enabling "trust" authentication for local connections
 initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -226,6 +227,7 @@ close PGSQL connection: (TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER
 close PGSQL connection: localhost:PORT_N/test/CALLER
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1236
 configuration file is TESTSUITE/test-config
@@ -652,6 +654,7 @@ search_tidyup called
 close PGSQL connection: localhost:PORT_N/test/CALLER
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1237
 configuration file is TESTSUITE/test-config
@@ -700,6 +703,7 @@ created log directory TESTSUITE/spool/log
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1238
 configuration file is TESTSUITE/test-config
@@ -847,6 +851,7 @@ search_tidyup called
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index c953369319e2431fb1031cc98501fb3e73fe08aa..b04a150861109d4988d7e225c89c1ac47e1996d1 100644 (file)
@@ -1,5 +1,6 @@
 1999-03-02 09:44:33 this is a warning at TESTSUITE/aux-fixed/3000.pl line 25.
 Exim version x.yz ....
+Hints DB:
 environment after trimming:
  PATH=<munged>
 adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys
index 0098e6e4feddd1ac4da171a49fd80e91f600a425..70d48576bf0374c45bfc504a66413caa564668f3 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -44,6 +45,7 @@ LOG: connection_reject MAIN REJECT
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1235
 configuration file is TESTSUITE/test-config
index 65bf3955bfedfc424cc8d9f94af82acae302ce25..1dfb873e8010382556c6a44610245432c9ec89d1 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index f9f556d3070fc2f05644d5c2bcdaba7b769264ea..a7f4de90ed3ebb51aca6d3b8f788fcc26385601f 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: -C, -D, -be or -bf forces real uid
   uid=CALLER_UID gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
index 27eebf0a17178d8aed7844b20e20820aa53a5c3e..915c6e8f1ee0b963f5fbbda54dd86e4bd23cc60e 100644 (file)
@@ -680,6 +680,7 @@ LOG: H=(test.host) [10.0.0.3] F=<junk@jink.jonk.test.ex> rejected RCPT <userx@cu
 >>> host in chunking_advertise_hosts?
 >>> host in chunking_advertise_hosts? no (end of list)
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 seeking password data for user "CALLER": cache not available
index 0cbbd20332a39adcb23f95af3e1b844629a5eae0..184891086f2df364e65c3a587199bfccb931f6a7 100644 (file)
@@ -1,9 +1,11 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@the.local.host.name U=CALLER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 0ce5029a93bb9314b7f0aad904150bd02cb4a118..d1a32a322f451f58f0b98bd4b61b68dec3b44e7f 100644 (file)
@@ -1,9 +1,11 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 30d93160e4577d34fe54461d7c36ca7999b39af9..7d7489c05ec87d2cfc28b3f1cdb64f990f62a4ed 100644 (file)
@@ -1,9 +1,11 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 4dc96971b31ce81d1b2467aa49e1307b73432ece..72a915d0b79059e81d52bee1ae0e9b36d3b39c58 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -9,6 +10,7 @@ dropping to exim gid; retaining priv uid
 DNS lookup of a-aa.test.ex (A/AAAA) requested AD, but got AA
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index ff308e31d96d3758b8552d1fa1939419e954bc77..c22fbdc7f218f87ac2fca5dcfc783cec13e6c176 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -11,6 +12,7 @@ dropping to exim gid; retaining priv uid
  DNS faked the AD bit (got AA and matched with dns_trust_aa (test.ex in *))
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
index 843b20242bd74a1e87c03817e9e80182a3ddb9a0..5b04c5a79ea1b20c692ec243cc257b124384b064 100644 (file)
@@ -1,10 +1,12 @@
 1999-03-02 09:44:33 10HmaX-000000005vi-0000 == userx@myhost.test.ex R=localuser T=maildir_tagged_appendfile defer (-1): Expansion of "${if eq{0}{1}{rhubarb}" (maildir_tag for maildir_tagged_appendfile transport) failed: syntax error in "if" item - "fail" expected
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index dd3ddcf1f68ee38cae5059cec775196fa63f2f81..8d716e9ea7c7b71e7c509fd671f84b29a55e38ea 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -49,6 +50,7 @@ created log directory TESTSUITE/spool/log
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1235
 configuration file is TESTSUITE/test-config
index db4429ef0e322fb49738981c350fc56fe8c9c992..34cae4c8381284a374d95de68e78d8382a2ae1a3 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -47,6 +48,7 @@ created log directory TESTSUITE/spool/log
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1235
 configuration file is TESTSUITE/test-config
@@ -190,6 +192,7 @@ search_tidyup called
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1237
 configuration file is TESTSUITE/test-config
@@ -237,6 +240,7 @@ LOG: MAIN
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaY-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1238
 configuration file is TESTSUITE/test-config
@@ -382,6 +386,7 @@ search_tidyup called
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1240
 configuration file is TESTSUITE/test-config
@@ -429,6 +434,7 @@ LOG: MAIN
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaZ-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1241
 configuration file is TESTSUITE/test-config
@@ -564,11 +570,12 @@ Deferred addresses:
   userx@test.ex in "*"? yes (matched "*")
 retry for T:userx@test.ex = * 0 0
  dbfn_read: key=T:userx@test.ex
+ dbfn_read: null return
 failing_interval=ttt message_age=ttt
 Writing retry data for T:userx@test.ex
   first failed=dddd last try=dddd next try=+86400 expired=0
   errno=-22 more_errno=dd mailbox is full (MTA-imposed quota exceeded while writing to tmp/MAILDIR.myhost.test.ex)
- dbfn_write: key=T:userx@test.ex
+ dbfn_write: key=T:userx@test.ex datalen NNN
  EXIM_DBCLOSE(0xAAAAAAAA)
  closed hints database and lockfile
 end of retry processing
@@ -584,6 +591,7 @@ search_tidyup called
 search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=p1240 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1243
 configuration file is TESTSUITE/test-config
@@ -631,6 +639,7 @@ LOG: MAIN
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmbA-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1244
 configuration file is TESTSUITE/test-config
@@ -663,8 +672,11 @@ Delivery address list:
 Considering: userx@test.ex
 unique = userx@test.ex
  dbfn_read: key=R:test.ex
+ dbfn_read: null return
  dbfn_read: key=R:userx@test.ex
+ dbfn_read: null return
  dbfn_read: key=R:userx@test.ex:<CALLER@test.ex>
+ dbfn_read: null return
 no   domain  retry record
 no   address retry record
 userx@test.ex: queued for routing
@@ -701,6 +713,7 @@ search_tidyup called
  returned from EXIM_DBOPEN: 0xAAAAAAAA
  opened hints database TESTSUITE/spool/db/retry: flags=O_RDONLY
  dbfn_read: key=T:userx@test.ex
+ dbfn_read: size 154 return
 retry record exists: age=ttt (max 1w)
   time to retry = tttt expired = 0
  EXIM_DBCLOSE(0xAAAAAAAA)
@@ -761,11 +774,12 @@ Deferred addresses:
   userx@test.ex in "*"? yes (matched "*")
 retry for T:userx@test.ex = * 0 0
  dbfn_read: key=T:userx@test.ex
+ dbfn_read: size 154 return
 failing_interval=ttt message_age=ttt
 Writing retry data for T:userx@test.ex
   first failed=dddd last try=dddd next try=+86400 expired=0
   errno=-22 more_errno=dd mailbox is full (MTA-imposed quota exceeded while writing to tmp/MAILDIR.myhost.test.ex)
- dbfn_write: key=T:userx@test.ex
+ dbfn_write: key=T:userx@test.ex datalen NNN
  EXIM_DBCLOSE(0xAAAAAAAA)
  closed hints database and lockfile
 end of retry processing
index a1c80c1a9169167ef9f92daf12c3a462a80c250b..53a83bcd11e35c71d0bc80589b24b1abc9d647e1 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1234
 configuration file is TESTSUITE/test-config
@@ -47,6 +48,7 @@ created log directory TESTSUITE/spool/log
 search_tidyup called
 exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
 Exim version x.yz ....
+Hints DB:
 changed uid/gid: forcing real = effective
   uid=uuuu gid=EXIM_GID pid=p1235
 configuration file is TESTSUITE/test-config
index a8963123694908a763f6b4e77646e41f3dcfac4f..3afac02c375f2af75a6b4b330063218f8e7be229 100644 (file)
@@ -1,10 +1,12 @@
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@test.ex U=CALLER P=local S=sss
 created log directory TESTSUITE/spool/log
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
@@ -40,11 +42,13 @@ LOG: MAIN
 >>>>>>>>>>>>>>>> Exim pid=p1235 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 LOG: MAIN
   <= CALLER@test.ex U=CALLER P=local S=sss
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
index 895c87e7b9c89c9021cb7756f60f903a81a3fe83..d2f5482588c330c201d5b02cb96d922cc75401ed 100644 (file)
@@ -1,6 +1,7 @@
 LOG: MAIN
   remote host address is the local host: some.host (while routing <"ACCEPT hosts=localhost lookup=byname"@some.host>)
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -26,6 +27,7 @@ q router declined for "DECLINE cannot route this one (DECLINE)"@some.host
 no more routers
 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=2 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -49,6 +51,7 @@ command wrote: FAIL cannot route this one (FAIL)
 q router forced address failure
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=2 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -75,6 +78,7 @@ q router: defer for "ERROR cannot route this one (ERROR)"@some.host
   message: bad command yield: ERROR cannot route this one (ERROR)
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=1 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -99,6 +103,7 @@ q router: defer for "DEFER cannot route this one (DEFER)"@some.host
   message: cannot route this one (DEFER)
 >>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=1 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -131,6 +136,7 @@ routed by q router
   host ten-1.test.ex [V4NET.0.0.1]
 >>>>>>>>>>>>>>>> Exim pid=p1238 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -176,6 +182,7 @@ routed by s router
   host 127.0.0.1 [127.0.0.1]
 >>>>>>>>>>>>>>>> Exim pid=p1239 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -200,6 +207,7 @@ q router: defer for "FREEZE cannot route this one (FREEZE)"@some.host
   message: cannot route this one (FREEZE)
 >>>>>>>>>>>>>>>> Exim pid=p1240 (fresh-exec) terminating with rc=1 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 dropping to exim gid; retaining priv uid
@@ -261,6 +269,7 @@ routed by pm router
   transport: null
 >>>>>>>>>>>>>>>> Exim pid=p1241 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 configuration file is TESTSUITE/test-config
 admin user
 host in hosts_connection_nolog? no (option unset)
index 43903aa79ac5c85d63100cacde5b4f1b203b145d..53104d0821d893c1c9da6b208dfd38c765878cf7 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 environment after trimming:
  PATH=<munged>
 adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys
@@ -635,7 +636,6 @@ try option received_header_text
             ╰──(tainted)
 ----------- start cutthrough headers send -----------
 ----------- done cutthrough headers send ------------
-try option acl_smtp_dkim
 try option acl_smtp_data
  ╭considering: ${tod_full}
  ├───expanded: ${tod_full}
@@ -658,6 +658,7 @@ LOG: smtp_connection MAIN
   SMTP connection from CALLER D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 environment after trimming:
  PATH=<munged>
 adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys
@@ -1244,7 +1245,6 @@ try option received_header_text
             ╰──(tainted)
 ----------- start cutthrough headers send -----------
 ----------- done cutthrough headers send ------------
-try option acl_smtp_dkim
 try option acl_smtp_data
  ╭considering: ${tod_full}
  ├───expanded: ${tod_full}
@@ -1267,6 +1267,7 @@ LOG: smtp_connection MAIN
   SMTP connection from CALLER D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 environment after trimming:
  PATH=<munged>
 adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys
@@ -1853,7 +1854,6 @@ try option received_header_text
             ╰──(tainted)
 ----------- start cutthrough headers send -----------
 ----------- done cutthrough headers send ------------
-try option acl_smtp_dkim
 try option acl_smtp_data
  ╭considering: ${tod_full}
  ├───expanded: ${tod_full}
index b2b9792970adac9ea52608a8fef9e3b182a2f345..f815d38834590832d9d0a1cdb18df6231fdc5254 100644 (file)
@@ -1,4 +1,5 @@
 Exim version x.yz ....
+Hints DB:
 environment after trimming:
  PATH=<munged>
 adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys
@@ -635,7 +636,6 @@ try option received_header_text
             ╰──(tainted)
 ----------- start cutthrough headers send -----------
 ----------- done cutthrough headers send ------------
-try option acl_smtp_dkim
 try option acl_smtp_data
  ╭considering: ${tod_full}
  ├───expanded: ${tod_full}
@@ -658,6 +658,7 @@ LOG: smtp_connection MAIN
   SMTP connection from CALLER D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 environment after trimming:
  PATH=<munged>
 adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys
@@ -1244,7 +1245,6 @@ try option received_header_text
             ╰──(tainted)
 ----------- start cutthrough headers send -----------
 ----------- done cutthrough headers send ------------
-try option acl_smtp_dkim
 try option acl_smtp_data
  ╭considering: ${tod_full}
  ├───expanded: ${tod_full}
@@ -1267,6 +1267,7 @@ LOG: smtp_connection MAIN
   SMTP connection from CALLER D=qqs closed by QUIT
 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
+Hints DB:
 environment after trimming:
  PATH=<munged>
 adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys
@@ -1853,7 +1854,6 @@ try option received_header_text
             ╰──(tainted)
 ----------- start cutthrough headers send -----------
 ----------- done cutthrough headers send ------------
-try option acl_smtp_dkim
 try option acl_smtp_data
  ╭considering: ${tod_full}
  ├───expanded: ${tod_full}
diff --git a/test/stdout/0637 b/test/stdout/0637
new file mode 100644 (file)
index 0000000..97d95ea
--- /dev/null
@@ -0,0 +1,20 @@
+Connecting to 127.0.0.1 port 1225 ... connected
+??? 220
+<<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+>>> mail from:<u1@cus.cam.ac.uk>
+??? 503 HELO or EHLO required
+<<< 503 HELO or EHLO required
+>>> mail from:<u2@cus.cam.ac.uk>
+??? 503
+<<< 503 HELO or EHLO required
+>>> mail from:<u3@cus.cam.ac.uk>
+??? 503
+<<< 503 HELO or EHLO required
+>>> mail from:<u4@cus.cam.ac.uk>
+??? 503-
+<<< 503-HELO or EHLO required
+??? 503 Too many
+<<< 503 Too many syntax or protocol errors
+???*
+Expected EOF read
+End of script
index 6daaab658e1f626c6908832a372250d73f9957be..dd6b4bdd67772bc70cab6832a3b9b17de7da31a5 100644 (file)
@@ -15,6 +15,9 @@
 > fail,subdir(..):FAIL
 > fail,subdir(.) :FAIL
 > fail,subdir(f) :FAIL
+> ok,subdir(..d) :..subdir
+> Failed: lookup of "2500.dir/regfile" gave DEFER: key for dsearch lookup contains a slash: 2500.dir/regfile
+> ok.path:    2500.dir/regfile
 > 
 > cachelayer tests
 > fail:       FAIL
diff --git a/test/stdout/4040 b/test/stdout/4040
new file mode 100644 (file)
index 0000000..836f573
--- /dev/null
@@ -0,0 +1,213 @@
+Connecting to 127.0.0.1 port 1225 ... connected
+??? 220
+<<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+>>> EHLO test
+??? 250-
+<<< 250-myhost.test.ex Hello test [127.0.0.1]
+??? 250-SIZE
+<<< 250-SIZE 52428800
+??? 250-LIMITS
+<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000
+??? 250-8BITMIME
+<<< 250-8BITMIME
+??? 250-PIPELINING
+<<< 250-PIPELINING
+??? 250-WELLKNOWN
+<<< 250-WELLKNOWN
+??? 250 HELP
+<<< 250 HELP
+>>> WELLKNOWN acme-response
+??? 250-SIZE
+<<< 250-SIZE=24
+??? 250-
+<<< 250-line+201+0A
+??? 250-
+<<< 250-line+202+0A
+??? 250
+<<< 250 last+20line+0A
+>>> QUIT
+??? 221
+<<< 221 myhost.test.ex closing connection
+End of script
+Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected
+??? 220
+<<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+>>> EHLO test
+??? 250-
+<<< 250-myhost.test.ex Hello test [ip4.ip4.ip4.ip4]
+??? 250-SIZE
+<<< 250-SIZE 52428800
+??? 250-LIMITS
+<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000
+??? 250-8BITMIME
+<<< 250-8BITMIME
+??? 250-PIPELINING
+<<< 250-PIPELINING
+??? 250 HELP
+<<< 250 HELP
+>>> QUIT
+??? 221
+<<< 221 myhost.test.ex closing connection
+End of script
+Connecting to 127.0.0.1 port 1226 ... connected
+??? 220
+<<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+>>> EHLO test
+??? 250-
+<<< 250-myhost.test.ex Hello test [127.0.0.1]
+??? 250-SIZE
+<<< 250-SIZE 52428800
+??? 250-LIMITS
+<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000
+??? 250-8BITMIME
+<<< 250-8BITMIME
+??? 250-PIPELINING
+<<< 250-PIPELINING
+??? 250-WELLKNOWN
+<<< 250-WELLKNOWN
+??? 250 HELP
+<<< 250 HELP
+>>> WELLKNOWN acme-response
+??? 550
+<<< 550 Administrative prohibition
+>>> QUIT
+??? 221
+<<< 221 myhost.test.ex closing connection
+End of script
+Connecting to 127.0.0.1 port 1225 ... connected
+??? 220
+<<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+>>> EHLO test
+??? 250-
+<<< 250-myhost.test.ex Hello test [127.0.0.1]
+??? 250-SIZE
+<<< 250-SIZE 52428800
+??? 250-LIMITS
+<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000
+??? 250-8BITMIME
+<<< 250-8BITMIME
+??? 250-PIPELINING
+<<< 250-PIPELINING
+??? 250-WELLKNOWN
+<<< 250-WELLKNOWN
+??? 250 HELP
+<<< 250 HELP
+>>> WELLKNOWN badfile
+??? 550
+<<< 550 Administrative prohibition
+>>> QUIT
+??? 221
+<<< 221 myhost.test.ex closing connection
+End of script
+Connecting to 127.0.0.1 port 1225 ... connected
+??? 220
+<<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+>>> EHLO test
+??? 250-
+<<< 250-myhost.test.ex Hello test [127.0.0.1]
+??? 250-SIZE
+<<< 250-SIZE 52428800
+??? 250-LIMITS
+<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000
+??? 250-8BITMIME
+<<< 250-8BITMIME
+??? 250-PIPELINING
+<<< 250-PIPELINING
+??? 250-WELLKNOWN
+<<< 250-WELLKNOWN
+??? 250 HELP
+<<< 250 HELP
+>>> WELLKNOWN acme-response
+??? 250-SIZE
+<<< 250-SIZE=24
+??? 250-
+<<< 250-line+201+0A
+??? 250-
+<<< 250-line+202+0A
+??? 250
+<<< 250 last+20line+0A
+>>> QUIT
+??? 221
+<<< 221 myhost.test.ex closing connection
+End of script
+Connecting to 127.0.0.1 port 1225 ... connected
+??? 220
+<<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+>>> EHLO test
+??? 250-
+<<< 250-myhost.test.ex Hello test [127.0.0.1]
+??? 250-SIZE
+<<< 250-SIZE 52428800
+??? 250-LIMITS
+<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000
+??? 250-8BITMIME
+<<< 250-8BITMIME
+??? 250-PIPELINING
+<<< 250-PIPELINING
+??? 250-WELLKNOWN
+<<< 250-WELLKNOWN
+??? 250 HELP
+<<< 250 HELP
+>>> WELLKNOWN sub/acme-response
+??? 250-SIZE
+<<< 250-SIZE=24
+??? 250-
+<<< 250-line+201+0A
+??? 250-
+<<< 250-line+202+0A
+??? 250
+<<< 250 last+20line+0A
+>>> QUIT
+??? 221
+<<< 221 myhost.test.ex closing connection
+End of script
+Connecting to 127.0.0.1 port 1225 ... connected
+??? 220
+<<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+>>> EHLO test
+??? 250-
+<<< 250-myhost.test.ex Hello test [127.0.0.1]
+??? 250-SIZE
+<<< 250-SIZE 52428800
+??? 250-LIMITS
+<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000
+??? 250-8BITMIME
+<<< 250-8BITMIME
+??? 250-PIPELINING
+<<< 250-PIPELINING
+??? 250-WELLKNOWN
+<<< 250-WELLKNOWN
+??? 250 HELP
+<<< 250 HELP
+>>> WELLKNOWN sub/badfile
+??? 550
+<<< 550 Administrative prohibition
+>>> QUIT
+??? 221
+<<< 221 myhost.test.ex closing connection
+End of script
+Connecting to 127.0.0.1 port 1225 ... connected
+??? 220
+<<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+>>> EHLO test
+??? 250-
+<<< 250-myhost.test.ex Hello test [127.0.0.1]
+??? 250-SIZE
+<<< 250-SIZE 52428800
+??? 250-LIMITS
+<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000
+??? 250-8BITMIME
+<<< 250-8BITMIME
+??? 250-PIPELINING
+<<< 250-PIPELINING
+??? 250-WELLKNOWN
+<<< 250-WELLKNOWN
+??? 250 HELP
+<<< 250 HELP
+>>> WELLKNOWN ../badfile
+??? 550
+<<< 550 Administrative prohibition
+>>> QUIT
+??? 221
+<<< 221 myhost.test.ex closing connection
+End of script