From: Jeremy Harris Date: Thu, 20 Jun 2024 14:17:53 +0000 (+0100) Subject: Debug: indentation X-Git-Url: https://git.exim.org/exim.git/commitdiff_plain/refs/heads/4.next?hp=f70940c9489d0ff5dc44db5ba5ed5258a8fe8772 Debug: indentation --- diff --git a/.gitignore b/.gitignore index 8c2660a9f..c55dcdcdd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -exim-* +!/system-integration/ !/test/aux-fixed/exim-ca *~ *.bak diff --git a/.mailmap b/.mailmap index 8373e4697..086ff80f1 100644 --- a/.mailmap +++ b/.mailmap @@ -5,7 +5,7 @@ Andreas Metzler Andrew Colin Kissa Andrew Lewis Axel Rau -bes-internal +Vladimir Varlamov David Woodhouse Dirk Mueller Eric Andresen diff --git a/configs/ABOUT b/configs/ABOUT index 13d9230b6..8c28844a8 100644 --- a/configs/ABOUT +++ b/configs/ABOUT @@ -1,7 +1,8 @@ -Exim repository: configs ------------------------- +Exim repository: configs/ +------------------------- -This directory contains sample configurations and similar files that have been -submitted by Exim users. The files are not locally modified. +This directory contains sample configurations and files for +integrating Exim with the system. These have been submitted by Exim +users and may or may not fit your your environment. -End +But we're interested in feedback and improvements. diff --git a/configs/system-integration/README.md b/configs/system-integration/README.md new file mode 100644 index 000000000..d06afc5ab --- /dev/null +++ b/configs/system-integration/README.md @@ -0,0 +1,8 @@ +# System Integration + +Various systems use various ways to integrate Exim with the system. +Mainly these tasks have to be accomplished: + +- startup procedure (running as a service or on demand) +- queue runs +- regular maintenance tasks (log rotation, database cleanup) diff --git a/configs/system-integration/systemd/.gitignore b/configs/system-integration/systemd/.gitignore new file mode 100644 index 000000000..15c1e5d15 --- /dev/null +++ b/configs/system-integration/systemd/.gitignore @@ -0,0 +1 @@ +.installed diff --git a/configs/system-integration/systemd/README.md b/configs/system-integration/systemd/README.md new file mode 100644 index 000000000..297edbc00 --- /dev/null +++ b/configs/system-integration/systemd/README.md @@ -0,0 +1,86 @@ +# Systemd Unit Examples for Exim + +This directory contains several examples for Systemd units to manage an Exim installation. +There is room for improvement, so please share your ideas or setups that are proven to work +in your environment. + +All the service units try to protect the system from unintentional +writes to locations outside of Exim's spool, and log directories. You +may need to override specific settings, we recommend using Systemd's +override mechanism (`systemd edit …`). + +The .service units use `ProtectSystem=strict`, which implies a read-only +file system structure. Exim needs write access to the spool directory +(main config option: `spool_directory`), and the log directory (main +config option: `log_file_path`). For improved security you can even set +`NoNewPrivileges`, if you don't do local deliveries. + +The provides Systemd units are examples, containing placeholders +`{{…}}`. The [install script](./install) helps substituting them.v +The following placeholders are used currently: +- `exim`: +- `spooldir:` +- `logdir`: + + +## Daemon + +This is best suited for *average to high traffic systems*, it engages +all built-in Exim facilities, as queue runner management and system load +depending message processing. + +The [systemd service unit](./daemon/exim.service) starts the Exim main +process. This process listens on the ports configured in the _runtime +configuration_ (typically `exim.conf`), and supervises all other +activities, including management of queue runner startups. Basically it +calls `exim -odf -q...`. + +For regular maintenance tasks (database cleanup) additional units are +[required](./maintenance). + +## Socket + +This is best suited for *low traffic* systems, which experience a +message *burst* from time to time. Regular desktop, and edge systems fit this +pattern. + +Exim's start is delayed until the first connection. Once a connection is +initiated, Exim starts a listener on the port configured in the [systemd +socket unit](./socket/exim.socket) and waits for more connections. It +exits after being idle for a while. Basically it calls `exim -bw ...`. + +Additional [_queue runner_ timer and service units](#queue-runner) are required. + +For regular maintenance tasks (database cleanup) +additional units are [required](./maintenance). + +## Inetd + +This is best suited for systems with *low traffic*, if the +[socket](#socket) approach doesn't work. + +For each incoming connection a new Exim instance starts, handling +exactly this connection and then exits. The listener port is configured +in the [systemd socket unit](./inetd/exim.socket). + +Additional [_queue runner_ timer and service units](#queue-runner) are required. + +For regular maintenance tasks (database cleanup) +additional units are [required](./maintenance). + +## Queue Runner + +This is a *timer*, and a *service* unit which starts Exim queue runner +processes. This is necessary, as the socket activated Exim instances +(from [socket](#socket) and [inetd](#inetd) do not care, once the first +delivery attempt is done. + +## Maintenance + +This is a *timer* unit, and a *service* unit for regular maintenance +tasks. For security it is recommended to use the `User=` Systemd +directive in a local override file. + +The service unit cares about tidying Exim's hint databases. It *does +not* rotate the log files, as most systems have their own mechanism for +doing this job (e.g. Logrotate). diff --git a/configs/system-integration/systemd/daemon/exim.service b/configs/system-integration/systemd/daemon/exim.service new file mode 100644 index 000000000..5d49ab356 --- /dev/null +++ b/configs/system-integration/systemd/daemon/exim.service @@ -0,0 +1,29 @@ +[Unit] +Description=Exim MTA (as daemon) +Documentation=man:exim +Documentation=https://exim.org/docs.html + +Requires=network.target +After=networking.target + +[Service] +Environment=DAEMON_OPTS= +Environment=QUEUE_OPTS=-q15m +EnvironmentFile=-/etc/default/{{exim}} + +Type=exec +ExecStart={{exim}} -bdf $DAEMON_OPTS $QUEUE_OPTS +ExecReload=kill -HUP ${MAINPID} + +# If you do not need local deliveries, enabling the +# next option can improve security +#NoNewPrivileges=yes + +ProtectSystem=strict +ReadWriteDirectories={{spooldir}} +ReadWriteDirectories={{logdir}} + +Slice=exim.slice + +[Install] +WantedBy=multi-user.target diff --git a/configs/system-integration/systemd/inetd/exim.socket b/configs/system-integration/systemd/inetd/exim.socket new file mode 100644 index 000000000..a802e8ec2 --- /dev/null +++ b/configs/system-integration/systemd/inetd/exim.socket @@ -0,0 +1,11 @@ +[Unit] +Description=Exim MTA (inetd) +Documentation=man:exim +Documentation=https://exim.org/docs.html + +[Socket] +ListenStream=25 +Accept=yes + +[Install] +WantedBy=sockets.target diff --git a/configs/system-integration/systemd/inetd/exim@.service b/configs/system-integration/systemd/inetd/exim@.service new file mode 100644 index 000000000..7771fde4a --- /dev/null +++ b/configs/system-integration/systemd/inetd/exim@.service @@ -0,0 +1,27 @@ +[Unit] +Description=Exim MTA (socket activated - inetd mode) +Documentation=man:exim +Documentation=https://exim.org/docs.html + +[Service] +Type=exec + +# We can't use -odf, as this would ask exim to keep the connection +# from the client open until the delivery is done +ExecStart={{exim}} -bs + +StandardInput=socket +StandardError=journal + +# Don't kill the delivery process we spawned as a child +KillMode=process + +# If you do not need local deliveries, enabling the +# next option can improve security +#NoNewPrivileges=yes + +ProtectSystem=strict +ReadWriteDirectories={{spooldir}} +ReadWriteDirectories={{logdir}} + +Slice=exim.slice diff --git a/configs/system-integration/systemd/install b/configs/system-integration/systemd/install new file mode 100755 index 000000000..83a648ab8 --- /dev/null +++ b/configs/system-integration/systemd/install @@ -0,0 +1,92 @@ +#!/bin/bash +# simple helper, mainly for testing the provided Systemd units. + +set -eu +export LC_ALL=C + +: ${EXIM=exim} +: ${EXIM_LOGDIR=/var/log/exim} +: ${EXIM_SPOOLDIR=/var/spool/exim} + +# Packagers should install to $(systemd-path systemd-system-unit) +# which mostly is something like /lib/systemd/system +dstdir= + +usage="$0 [OPTIONS] variant... + This simple script installs Systemd unit files to the desired destination, replacing + the {{Placeholder}}s. + + VARIANT: one of daemon, inet, socket, maintainance, queuerunner + + OPTIONS: + --help print this help and exit cleanly + --uninstall|-u uninstall the installed files + --dstdir|-d DIR the destination directory (mandatory, use 'DEFAULT' + to use Systemd's default location (`systemd-path systemd-system-conf`) + + Placeholders: + {{exim}} from \$EXIM ($EXIM) + {{logdir}} from \$EXIM_LOGDIR ($EXIM_LOGDIR) + {{spooldir}} from \$EXIM_SPOOLDIR ($EXIM_SPOOLDIR) +" + + +tmp=$(getopt -n $0 -o d:n --long dstdir:,help,uninstall -- "$@") +eval set -- "$tmp" +while true +do + o=$1; shift + case $o in + -d|--dstdir) dstdir=$1; shift;; + --help) echo "$usage"; exit;; + -n|--uninstall) uninstall=1;; + --) break + esac +done + +if [[ -v uninstall ]] +then + if ! [[ -r .installed ]] + then + echo "$0: noting to uninstall (.installed is empty or isn't readable)" >&2 + exit + fi + + rm -vf $(<.installed) + rm -f .installed + exit +fi + +case $dstdir in + DEFAULT) dstdir=$(systemd-path systemd-system-conf);; + "") echo "$0: --dstdir is mandatory" >&2; exit 1;; + *) ;; +esac + +if (( $# == 0 )) +then echo "$0: need variant" >&2; exit 1; +fi + +function xform() { + sed -e "s|{{exim}}|${EXIM:?}|g" \ + -e "s|{{logdir}}|${EXIM_LOGDIR:?}|g" \ + -e "s|{{spooldir}}|${EXIM_SPOOLDIR:?}|g" +} + +for dir in ${@:?need source dir(s)} +do + echo "# $dir" + for src in "$dir"/* + do + dst="$dstdir/${src##*/}" + echo "installing $dst" + xform <"$src" >"$dst" + echo $dst >> .installed + done +done + +if [[ $dstdir == $(systemd-path systemd-system-conf) ]] +then + echo "# reloading systemd configuration" + systemctl daemon-reload +fi diff --git a/configs/system-integration/systemd/maintenance/exim-maintenance.service b/configs/system-integration/systemd/maintenance/exim-maintenance.service new file mode 100644 index 000000000..42722d3fc --- /dev/null +++ b/configs/system-integration/systemd/maintenance/exim-maintenance.service @@ -0,0 +1,24 @@ +[Unit] +Description=Exim MTA (maintenance) +Documentation=man:exim +Documentation=https://exim.org/docs.html + +[Service] +Type=oneshot +ExecReload=kill -HUP ${MAINPID} + +# Dollars are doubled for systemd! +WorkingDirectory={{spooldir}} +ExecStart=sh -ec 'for db in db/* ;\ + do \ + test -f "$$db" && [ "$${db##*.}" != lockfile ] || continue ;\ + exim_tidydb $$PWD "$${db##*/}"; \ + done' + +ProtectSystem=strict +ReadWriteDirectories={{spooldir}}/db + +Slice=exim.slice + +[Install] +WantedBy=multi-user.target diff --git a/configs/system-integration/systemd/maintenance/exim-maintenance.timer b/configs/system-integration/systemd/maintenance/exim-maintenance.timer new file mode 100644 index 000000000..bd192cd07 --- /dev/null +++ b/configs/system-integration/systemd/maintenance/exim-maintenance.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Exim MTA (maintenance timer) +Documentation=man:exim +Documentation=https://exim.org/docs.html + +[Timer] +OnActiveSec=1h +OnUnitActiveSec=1d + +[Install] +WantedBy=timers.target diff --git a/configs/system-integration/systemd/queuerunner/exim-queuerunner.service b/configs/system-integration/systemd/queuerunner/exim-queuerunner.service new file mode 100644 index 000000000..e6e9ca799 --- /dev/null +++ b/configs/system-integration/systemd/queuerunner/exim-queuerunner.service @@ -0,0 +1,21 @@ +[Unit] +Description=Exim MTA (queue runner service) +Documentation=man:exim +Documentation=https://exim.org/docs.html + +[Service] +Type=oneshot + +ExecStart={{exim}} -q +KillMode=process + +# If you do not need local deliveries, enabling the +# next option can improve security +#NoNewPrivileges=yes + +ProtectSystem=strict +ReadWriteDirectories={{spooldir}} +ReadWriteDirectories={{logdir}} +ReadWriteDirectories=/var/mail /var/spool/mail + +Slice=exim.slice diff --git a/configs/system-integration/systemd/queuerunner/exim-queuerunner.timer b/configs/system-integration/systemd/queuerunner/exim-queuerunner.timer new file mode 100644 index 000000000..6988b7c29 --- /dev/null +++ b/configs/system-integration/systemd/queuerunner/exim-queuerunner.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Exim MTA (queue runner timer) +Documentation=man:exim +Documentation=https://exim.org/docs.html + +[Timer] +OnActiveSec=120 +OnUnitActiveSec=15m + +[Install] +WantedBy=timers.target diff --git a/configs/system-integration/systemd/socket/exim.service b/configs/system-integration/systemd/socket/exim.service new file mode 100644 index 000000000..a4576ae24 --- /dev/null +++ b/configs/system-integration/systemd/socket/exim.service @@ -0,0 +1,26 @@ +[Unit] +Description=Exim MTA (socket activated) +Documentation=man:exim +Documentation=https://exim.org/docs.html +PartOf=exim.socket + +[Service] +Type=exec +Environment=INACTIVITY_TIMEOUT=5m +EnvironmentFile=-/etc/default/exim + +ExecStart=exim -bw${INACTIVITY_TIMEOUT} + +StandardInput=socket +StandardError=journal + +# If you do not need local deliveries, enabling the +# next option can improve security +#NoNewPrivileges=yes + +ProtectSystem=strict +ReadWriteDirectories={{spooldir}} +ReadWriteDirectories={{logdir}} +ReadWriteDirectories=/var/mail /var/spool/mail + +Slice=exim.slice diff --git a/configs/system-integration/systemd/socket/exim.socket b/configs/system-integration/systemd/socket/exim.socket new file mode 100644 index 000000000..8b3876663 --- /dev/null +++ b/configs/system-integration/systemd/socket/exim.socket @@ -0,0 +1,10 @@ +[Unit] +Description=Exim MTA (socket) +Documentation=man:exim +Documentation=https://exim.org/docs.html + +[Socket] +ListenStream=25 + +[Install] +WantedBy=sockets.target diff --git a/doc/doc-docbook/filter.xfpt b/doc/doc-docbook/filter.xfpt index 3129e6056..c1e1d8fce 100644 --- a/doc/doc-docbook/filter.xfpt +++ b/doc/doc-docbook/filter.xfpt @@ -48,7 +48,7 @@ . Copyright year. Update this (only) when changing content. .macro copyyear -2021 +2023 .endmacro . =========================================================================== diff --git a/doc/doc-docbook/spec.xfpt b/doc/doc-docbook/spec.xfpt index 70988384d..202c27659 100644 --- a/doc/doc-docbook/spec.xfpt +++ b/doc/doc-docbook/spec.xfpt @@ -46,7 +46,7 @@ . Update the Copyright year (only) when changing content. . ///////////////////////////////////////////////////////////////////////////// -.set previousversion "4.96" +.set previousversion "4.97" .include ./local_params .set ACL "access control lists (ACLs)" @@ -55,7 +55,7 @@ .set drivernamemax "64" .macro copyyear -2022 +2023 .endmacro . ///////////////////////////////////////////////////////////////////////////// @@ -996,12 +996,9 @@ contains the number of seconds since the start of the epoch (the normal Unix way of representing the date and time of day). .next After the first hyphen, the next -.new eleven -.wen characters are the id of the process that received the message. .next -.new There are two different possibilities for the final four characters: .olist .oindex "&%localhost_number%&" @@ -1017,7 +1014,6 @@ If &%localhost_number%& is set, it is multiplied by 500000 (250000) and added to the fractional part of the time, which in this case is in units of 2 us (4 us). .endlist -.wen .endlist After a message has been received, Exim waits for the clock to tick at the @@ -1809,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" @@ -1820,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, @@ -1837,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. @@ -2846,13 +2849,11 @@ of Exim is installed. It is not necessary to do this when other files that are referenced from the configuration (for example, alias files) are changed, because these are reread each time they are used. -.new Either a SIGTERM or a SIGINT signal should be used to cause the daemon to cleanly shut down. Subprocesses handling recceiving or delivering messages, or for scanning the queue, will not be affected by the termination of the daemon process. -.wen .cmdopt -bdf This option has the same effect as &%-bd%& except that it never disconnects @@ -2890,11 +2891,14 @@ defined and macros will be expanded. Because macros in the config file are often used for secrets, those are only available to admin users. -.new The word &"set"& at the start of a line, followed by a single space, is recognised specially as defining a value for a variable. -The syntax is otherwise the same as the ACL modifier &"set ="&. +.new +.cindex "tainted data" "expansion testing" +If the sequence &",t"& is inserted before the space, +the value is marked as tainted. .wen +The syntax is otherwise the same as the ACL modifier &"set ="&. .cmdopt -bem <&'filename'&> .cindex "testing" "string expansion" @@ -3104,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 &<>& for details. +the non-SMTP ACL. See section &<>& for details. .cindex "return code" "for &%-bm%&" The return code is zero if the message is successfully accepted. Otherwise, the @@ -3380,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 &<>&). +messages can be checked using the non-SMTP ACL (see section &<>&). Unqualified addresses are automatically qualified using &%qualify_domain%& and &%qualify_recipient%&, as appropriate, unless the &%-bnq%& option is used. @@ -4450,7 +4454,6 @@ It is only relevant when the &%-bd%& (start listening daemon) option is also given. Normally the daemon creates this socket, unless a &%-oX%& and &*no*& &%-oP%& option is also present. -.new If this option is given then the socket will not be created. This is required if the system is running multiple daemons, in which case it should be used on all. @@ -4464,7 +4467,6 @@ caching compiled regexes .next obtaining a current queue size .endlist -.wen .cmdopt -pd .cindex "Perl" "starting the interpreter" @@ -4569,12 +4571,10 @@ delivered down a single SMTP .cindex "multiple SMTP deliveries" connection because of the hints that were set up during the first queue scan. -.new Two-phase queue runs should be used on systems which, even intermittently, have a large queue (such as mailing-list operators). They may also be useful for hosts that are connected to the Internet intermittently. -.wen .vitem &%-q[q]i...%& .oindex "&%-qi%&" @@ -4660,14 +4660,12 @@ combined daemon at system boot time is to use a command such as Such a daemon listens for incoming SMTP calls, and also starts a queue runner process every 30 minutes. -.new .cindex "named queues" "queue runners" It is possible to set up runners for multiple named queues within one daemon, For example: .code exim -qGhipri/2m -q10m -qqGmailinglist/1h .endd -.wen When a daemon is started by &%-q%& with a time value, but without &%-bd%&, no pid file is written unless one is explicitly requested by the &%-oP%& option. @@ -4724,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 &<>&), its default +command ETRN is accepted by its ACL (see section &<>&), its default effect is to run Exim with the &%-R%& option, but it can be configured to run an arbitrary command instead. @@ -6756,11 +6754,11 @@ Exim variables you need to construct the database query. For the string-expansion kind of lookups, the query is given in the first bracketed argument of the &${lookup ...}$& expansion. -For the list-argument kind of lookup the quury is given by the remainder of the +For the list-argument kind of lookup the query is given by the remainder of the list item after the first semicolon. .cindex "tainted data" "quoting for lookups" -If tainted data is used in the query then it should be quuted by +If tainted data is used in the query then it should be quoted by using the &*${quote_*&<&'lookup-type'&>&*:*&<&'string'&>&*}*& expansion operator appropriate for the lookup. .endlist @@ -6855,7 +6853,10 @@ by default, but has an option to omit them (see section &<>&). .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. @@ -6864,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: @@ -6872,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: @@ -6881,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 &<>&. @@ -6910,8 +6920,8 @@ key is found. The first key that matches is used; there is no attempt to find a lookup types support only literal keys. &*Warning 2*&: In a host list, you must always use &(net-iplsearch)& so that -the implicit key is the host's IP address rather than its name (see section -&<>&). +the implicit key is the host's IP address rather than its name +(see section &<>&). &*Warning 3*&: Do not use an IPv4-mapped IPv6 address for a key; use the IPv4, in dotted-quad form. (Exim converts IPv4-mapped IPv6 addresses to this @@ -7409,10 +7419,8 @@ For example, the way to write the NIS+ query is [name="${quote_nisplus:$local_part}"] .endd .cindex "tainted data" "in lookups" -.new &*All*& tainted data used in a query-style lookup must be quoted using a mechanism appropriate for the lookup type. -.wen See chapter &<>& for full coverage of string expansions. The quote operator can be used for all lookup types, but has no effect for single-key lookups, since no quoting is ever needed in their key strings. @@ -8172,13 +8180,20 @@ option, you can still update it by a query of this form: ${lookup pgsql,servers=master/db/name/pw {UPDATE ...} } .endd -An older syntax places the servers specification before the query, +.new +A now-deprecated syntax places the servers specification before the query, semicolon separated: .code ${lookup mysql{servers=master; UPDATE ...} } .endd -The new version avoids potential issues with tainted -arguments in the query, for explicit expansion. +The new version avoids issues with tainted +arguments explicitly expanded as part of the query. +The entire string within the braces becomes tainted, +including the server sepcification - which is not permissible. +If the older sytax is used, a warning message will be logged. +This syntax will be removed in a future release. +.wen + &*Note*&: server specifications in list-style lookups are still problematic. @@ -8206,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. @@ -8234,7 +8254,7 @@ daemon as in the other SQL databases. .oindex &%sqlite_dbfile%& There are two ways of specifying the file. -The first is is by using the &%sqlite_dbfile%& main option. +The first is by using the &%sqlite_dbfile%& main option. The second, which allows separate files for each query, is to use an option appended, comma-separated, to the &"sqlite"& lookup type word. The option is the word &"file"&, then an equals, @@ -8355,6 +8375,9 @@ type of match and is given below as the &*value*& information. .section "Expansion of lists" "SECTlistexpand" .cindex "expansion" "of lists" Each list is expanded as a single string before it is used. +.cindex "tainted data" tracking +&*Note*&: As a result, if any componend was tainted then the +entire result string becomes tainted. &'Exception: the router headers_remove option, where list-item splitting is done before string-expansion.'& @@ -9236,8 +9259,9 @@ is not used. &*Reminder*&: With this kind of pattern, you must have host &'names'& as keys in the file, not IP addresses. If you want to do lookups based on IP -addresses, you must precede the search type with &"net-"& (see section -&<>&). There is, however, no reason why you could not use +addresses, you must precede the search type with &"net-"& +(see section &<>&). +There is, however, no reason why you could not use two items in the same list, one doing an address lookup and one doing a name lookup, both using the same file. @@ -9550,6 +9574,9 @@ start of a portion of the string that is interpreted and replaced as described below in section &<>& onwards. Backslash is used as an escape character, as described in the following section. +.cindex "tainted data" tracking +If any porttion of the result string is tainted, the entire result is. + Whether a string is expanded depends upon the context. Usually this is solely dependent upon the option for which a value is sought; in this documentation, options for which string expansion is performed are marked with † after @@ -9622,7 +9649,6 @@ value. Nevertheless the &%-be%& option can be useful for checking out file and database lookups, and the use of expansion operators such as &%sg%&, &%substr%& and &%nhash%&. -.new When reading lines from the standard input, macros can be defined and ACL variables can be set. For example: @@ -9631,7 +9657,6 @@ MY_MACRO = foo set acl_m_myvar = bar .endd Such macros and variables can then be used in later input lines. -.wen Exim gives up its root privilege when it is called with the &%-be%& option, and instead runs under the uid and gid it was called with, to prevent users from @@ -9748,9 +9773,7 @@ Example use (as an ACL modifier): add_header = :at_start:${authresults {$primary_hostname}} .endd This is safe even if no authentication results are available -.new and would generally be placed in the DATA ACL. -.wen .vitem "&*${certextract{*&<&'field'&>&*}{*&<&'certificate'&>&*}&&& @@ -10010,9 +10033,7 @@ default, but the separator can be changed in the usual way (&<>& above. -.vitem "&*${run<&'options'&> {*&<&'command&~arg&~list'&>&*}{*&<&'string1'&>&*}&&& +.vitem "&*${run<&'options'&> {*&<&'command&~string'&>&*}{*&<&'string1'&>&*}&&& {*&<&'string2'&>&*}}*&" .cindex "expansion" "running a command" .cindex "&%run%& expansion item" @@ -10642,8 +10663,8 @@ One option is supported after the word &'run'&, comma-separated and without whitespace. If the option &'preexpand'& is not used, -the command string is split into individual arguments by spaces -and then each argument is expanded. +the command string before expansion is split into individual arguments by spaces +and then each argument is separately expanded. Then the command is run in a separate process, but under the same uid and gid. As in other command executions from Exim, a shell is not used by default. If the command requires @@ -10655,9 +10676,9 @@ potential attacker; a careful assessment for security vulnerabilities should be done. If the option &'preexpand'& is used, -the command and its arguments are first expanded as one string. The result is -split apart into individual arguments by spaces, and then the command is run -as above. +the command string is first expanded as a whole. +The expansion result is split apart into individual arguments by spaces, +and then the command is run as above. Since the arguments are split by spaces, when there is a variable expansion which has an empty result, it will cause the situation that the argument will simply be omitted when the program is actually executed by Exim. If the @@ -11122,7 +11143,6 @@ abbreviation &%h%& can be used when &%hash%& is used as an operator. -.new .vitem &*${headerwrap_*&<&'cols'&>&*_*&<&'limit'&>&*:*&<&'string'&>&*}*& .cindex header "wrapping operator" .cindex expansion "header wrapping" @@ -11136,7 +11156,6 @@ column number is reached. Whitespace at a chosen wrap point is removed. A line-wrap consists of a newline followed by a tab, and the tab is counted as 8 columns. -.wen @@ -11573,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 &<>&. + + +.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 @@ -12062,7 +12094,8 @@ where the first item in the list is the empty string. .next The item @[] matches any of the local host's interface addresses. .next -Single-key lookups are assumed to be like &"net-"& style lookups in host lists, +Single-key lookups are assumed to be like &"net-"& style lookups in host lists +(see section &<>&), even if &`net-`& is not specified. There is never any attempt to turn the IP address into a host name. The most common type of linear search for &*match_ip*& is likely to be &*iplsearch*&, in which the file can contain CIDR @@ -13436,7 +13469,6 @@ The main use of this variable is expected to be to distinguish between rejections of MAIL and rejections of RCPT. .tvar &$recipients$& -.new .tvar &$recipients_list$& These variables both contain the envelope recipients for a message. @@ -13445,7 +13477,6 @@ The first uses a comma and a space separate the addresses in the replacement tex this variable is not intended for further processing. The second is a proper Exim list; colon-separated. -.wen However, the variables are not generally available, to prevent exposure of Bcc recipients in @@ -14825,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,11 +15017,13 @@ See also the &'Policy controls'& section above. .row &%dsn_advertise_hosts%& "advertise DSN extensions to these hosts" .row &%ignore_fromline_hosts%& "allow &""From ""& from these hosts" .row &%ignore_fromline_local%& "allow &""From ""& from local SMTP" +.row &%limits_advertise_hosts%& "advertise LIMITS to these hosts" .row &%pipelining_advertise_hosts%& "advertise pipelining to these hosts" .row &%pipelining_connect_advertise_hosts%& "advertise pipelining to these hosts" .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 @@ -15113,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 &<>& for +read and is on the point of being accepted. See section &<>& for further details. .option acl_not_smtp_mime main string&!! unset @@ -15125,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 &<>& for further details. +non-SMTP message. See section &<>& 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 &<>& for further details. +received. +See chapter &<>& for general information on ACLs, and chapter +&<>& 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 &<>& for further details. +See section &<>& 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 &<>& for further details. +acknowledgment is sent. See section &<>& for further details. .option acl_smtp_data_prdr main string&!! accept .cindex "PRDR" "ACL for" @@ -15153,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 &<>& for further details. +acknowledgment is sent. See section &<>& for further details. .option acl_smtp_dkim main string&!! unset .cindex DKIM "ACL for" @@ -15176,7 +15212,7 @@ received. See chapter &<>& 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 &<>& for further details. +command is received. See section &<>& for further details. .option acl_smtp_mail main string&!! unset @@ -15187,7 +15223,8 @@ received. See chapter &<>& 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 &<>& for details of ACLs, and chapter +a MAIL command. +See chapter &<>& for general information on ACLs, and chapter &<>& for details of authentication. .option acl_smtp_mime main string&!! unset @@ -15200,7 +15237,7 @@ section &<>& 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 &<>& for further details. +See section &<>& for further details. .option acl_smtp_predata main string&!! unset This option defines the ACL that is run when an SMTP DATA command is @@ -15215,7 +15252,7 @@ received. See chapter &<>& 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 &<>& for further details. +received. See section &<>& for further details. .option acl_smtp_starttls main string&!! unset .cindex "STARTTLS, ACL for" @@ -15227,6 +15264,13 @@ received. See chapter &<>& for further details. This option defines the ACL that is run when an SMTP VRFY command is received. See chapter &<>& 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 &<>& for further details. +.wen + .option add_environment main "string list" empty .cindex "environment" "set values" This option adds individual environment variables that the @@ -15732,9 +15776,9 @@ the ACL once for each signature in the message. See section &<>&. -.option dmarc_forensic_sender main string&!! unset -.option dmarc_history_file main string unset -.option dmarc_tld_file main string unset +.option dmarc_forensic_sender main string&!! unset &&& + dmarc_history_file main string unset &&& + dmarc_tld_file main string unset .cindex DMARC "main section options" These options control DMARC processing. See section &<>& for details. @@ -15754,10 +15798,8 @@ by a setting such as this: dns_again_means_nonexist = *.in-addr.arpa .endd This option applies to all DNS lookups that Exim does, -.new except for TLSA lookups (where knowing about such failures is security-relevant). -.wen It also applies when the &[gethostbyname()]& or &[getipnodebyname()]& functions give temporary errors, since these are most likely to be caused by DNS lookup problems. The @@ -16203,11 +16245,13 @@ set. .cindex "EHLO" "underscores in" .cindex "underscore in EHLO/HELO" This option can be set to a string of rogue characters that are permitted in -all EHLO and HELO names in addition to the standard letters, digits, -hyphens, and dots. If you really must allow underscores, you can set +non-ip-literal EHLO and HELO names in addition to the standard letters, digits, +hyphens, and dots. For examplem if you really must allow underscores, +you can set .code helo_allow_chars = _ .endd +This option does not apply to names that look like ip-literals. Note that the value is one string, not a list. @@ -16337,10 +16381,8 @@ This option is obsolete, and retained only for backward compatibility, because nowadays the ACL specified by &%acl_smtp_connect%& can also reject incoming connections immediately. -.new If the connection is on a TLS-on-connect port then the TCP connection is just dropped. Otherwise, an SMTP error is sent first. -.wen The ability to give an immediate rejection (either by this option or using an ACL) is provided for use in unusual cases. Many hosts will just try again, @@ -16361,10 +16403,8 @@ local processes, you must create a host list with an empty item. For example: .code hosts_connection_nolog = : .endd -.new The hosts affected by this option also do not log "no MAIL in SMTP connection" lines, as may commonly be produced by a monitoring system. -.wen .option hosts_require_alpn main "host list&!!" unset @@ -16575,6 +16615,18 @@ has been built with LDAP support. +.new +.option limits_advertise_hosts main "host list&!!" * +.cindex LIMITS "suppressing advertising" +.cindex "ESMTP extensions" LIMITS +This option can be used to suppress the advertisement of the SMTP +LIMITS extension (RFC 9422) to specific hosts. +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 + .option local_from_check main boolean true .cindex "&'Sender:'& header line" "disabling addition of" .cindex "&'From:'& header line" "disabling checking of" @@ -16672,15 +16724,21 @@ See also the ACL modifier &`control = suppress_local_fixups`&. Section .option localhost_number main string&!! unset .cindex "host" "locally unique number for" .cindex "message ids" "with multiple hosts" +.cindex multiple "systems sharing a spool" +.cindex "multiple hosts" "sharing a spool" +.cindex "shared spool directory" +.cindex "spool directory" sharing .vindex "&$localhost_number$&" Exim's message ids are normally unique only within the local host. If -uniqueness among a set of hosts is required, each host must set a different +uniqueness among a set of hosts is required +(eg. because they share a spool directory), +each host must set a different value for the &%localhost_number%& option. The string is expanded immediately after reading the configuration file (so that a number can be computed from the host name, for example) and the result of the expansion must be a number in the range 0&--16 (or 0&--10 on operating systems with case-insensitive file systems). This is available in subsequent string expansions via the variable -&$localhost_number$&. When &%localhost_number is set%&, the final two +&$localhost_number$&. When &%localhost_number%& is set, the final four characters of the message id, instead of just being a fractional part of the time, are computed from the time and the local host number as described in section &<>&. @@ -17036,7 +17094,6 @@ to be used in conjunction with &(oracle)& lookups (see section &<>&). The option is available only if Exim has been built with Oracle support. -.new .option panic_coredump main boolean false This option is rarely needed but can help for some debugging investigations. If set, when an internal error is detected by Exim which is sufficient @@ -17047,7 +17104,6 @@ then a coredump is requested. Note that most systems require additional administrative configuration to permit write a core file for a setuid program, which is Exim's common installed configuration. -.wen .option percent_hack_domains main "domain list&!!" unset .cindex "&""percent hack""&" @@ -17474,16 +17530,26 @@ or if the message was submitted locally (not using TCP/IP), and the &%-bnq%& option was not set. -.option recipients_max main integer 50000 +.option recipients_max main integer&!! 50000 .cindex "limit" "number of recipients" .cindex "recipient" "maximum number" -If this option is set greater than zero, it specifies the maximum number of +If the value resulting from expanding this option +is set greater than zero, it specifies the maximum number of original recipients for any message. Additional recipients that are generated by aliasing or forwarding do not count. SMTP messages get a 452 response for all recipients over the limit; earlier recipients are delivered as normal. Non-SMTP messages with too many recipients are failed, and no deliveries are done. +.new +For SMTP message the expansion is done after the connection is +accepted (but before any SMTP conversation) and may depend on +the IP addresses and port numbers of the connection. +&*Note*&: If an expansion is used for the option, +care should be taken that a resonable value results for +non-SMTP messages. +.wen + .cindex "RCPT" "maximum number of incoming" &*Note*&: The RFCs specify that an SMTP server should accept at least 100 RCPT commands in a single message. @@ -17830,10 +17896,8 @@ positive response to an SMTP connection. The default setting is: smtp_banner = $smtp_active_hostname ESMTP Exim \ $version_number $tod_full .endd -.new Failure to expand the string causes a panic error; a forced fail just closes the connection. -.wen If you want to create a multiline response to the initial SMTP connection, use &"\n"& in the string at appropriate points, but not at the end. Note that the 220 code is not included @@ -18579,9 +18643,7 @@ It has no effect when Exim is used with GnuTLS &%tls_require_ciphers%& option). After expansion it must contain -.new one or (only for OpenSSL versiona 1.1.1 onwards) more -.wen EC curve names, such as &`prime256v1`&, &`secp384r1`&, or &`P-521`&. Consult your OpenSSL manual for valid curve names. @@ -18589,9 +18651,7 @@ For OpenSSL versions before (and not including) 1.0.2, the string &`auto`& selects &`prime256v1`&. For more recent OpenSSL versions &`auto`& tells the library to choose. -.new If the option expands to an empty string, the effect is undefined. -.wen .option tls_ocsp_file main string&!! unset @@ -18882,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 (&<>&). +.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. @@ -22832,8 +22900,11 @@ If unset, or expanding to an empty string, no filtering is done. When the message is about to be written out, the command specified by &%transport_filter%& is started up in a separate, parallel process, and the entire message, including the header lines, is passed to it on its standard -input (this in fact is done from a third process, to avoid deadlock). The -command must be specified as an absolute path. +input (this in fact is done from a third process, to avoid deadlock). +The command must be specified as an absolute path. + +The process run by the command must use its standard input as the message +data to be transformed, and write the results on its standard output. The lines of the message that are written to the transport filter are terminated by newline (&"\n"&). The message is passed to the filter before any @@ -24868,7 +24939,7 @@ Exim, and each argument is separately expanded, as described in section No part of the resulting command may be tainted. -.option environment pipe string&!! unset +.option environment pipe "string list&!!" unset .cindex "&(pipe)& transport" "environment for command" .cindex "environment" "&(pipe)& transport" This option is used to add additional variables to the environment in which the @@ -25374,6 +25445,13 @@ over a single TCP/IP connection. If the value is zero, there is no limit. For testing purposes, this value can be overridden by the &%-oB%& command line option. +.new +.cindex "ESMTP extensions" LIMITS +If the peer advertises a LIMITS extension with a MAILMAX value, +and either TLSS is in use or was not advertised, +that value also constrains the result of this option. +.wen + .option dane_require_tls_ciphers smtp string&!! unset .cindex "TLS" "requiring specific ciphers for DANE" @@ -25586,15 +25664,24 @@ load-balancer, matching the session stored in the client's cache. Exim can pull out a server name, if there is one, from the response to the client's SMTP EHLO command. -The default value of this option: +For normal STARTTLS use, the default value of this option: .code ${if and { {match {$host} {.outlook.com\$}} \ {match {$item} {\N^250-([\w.]+)\s\N}} \ } {$1}} .endd suffices for one known case. + During the expansion of this option the &$item$& variable will have the server's EHLO response. + +.new +For TLS-on-connect connections we do not have an EHLO +response to use. Because of this the default value of this option is +set to a static string for those cases, meaning that resumption will +always be attempted if permitted by the &%tls_resumption_hosts%& option. +.wen + The result of the option expansion is included in the key used to store and retrieve the TLS session, for session resumption. @@ -25783,11 +25870,9 @@ Exim will request a Certificate Status on a TLS session for any host that matches this list. &%tls_verify_certificates%& should also be set for the transport. -.new The default is &"**"& if DANE is not in use for the connection, or if DANE-TA us used. It is empty if DANE-EE is used. -.wen .option hosts_require_alpn smtp "host list&!!" unset .cindex ALPN "require negotiation in client" @@ -25933,25 +26018,30 @@ has advertised support for IGNOREQUOTA in its response to the LHLO command. .option max_rcpt smtp integer&!! 100 .cindex "RCPT" "maximum number of outgoing" This option, -.new after expansion, -.wen limits the number of RCPT commands that are sent in a single SMTP message transaction. A value setting of zero disables the limit. -.new If a constant is given, -.wen each set of addresses is treated independently, and so can cause parallel connections to the same host if &%remote_max_parallel%& permits this. +.new +.cindex "ESMTP extensions" LIMITS +If the peer advertises a LIMITS extension with a RCPTMAX value, +and either TLSS is in use or was not advertised, +that value also constrains the result of this option +and no parallel connections will be caused on meeting the RCPTMAX limit. +.wen + .option message_linelength_limit smtp integer 998 .cindex "line length" limit This option sets the maximum line length, in bytes, that the transport will send. Any messages with lines exceeding the given value +(before a transport filter, if any) will fail and a failure-DSN ("bounce") message will if possible be returned to the sender. The default value is that defined by the SMTP standards. @@ -25977,6 +26067,14 @@ If the connection is DANE-enabled then this option is ignored; only messages having the domain used for the DANE TLSA lookup are sent on the connection. +.new +.cindex "ESMTP extensions" LIMITS +If the peer advertises a LIMITS extension with a RCPTDOMAINMAX value, +and either TLSS is in use or was not advertised, +this option is regarded as being false. +.wen + + .option port smtp string&!! "see below" .cindex "port" "sending TCP/IP" .cindex "TCP/IP" "setting outgoing port" @@ -27753,7 +27851,6 @@ no successful authentication. Successful authentication sets up information used by the &%authresults%& expansion item. -.new .cindex authentication "failure event, server" If an authenticator is run and does not succeed, an event (see &<>&) of type "auth:fail" is raised. @@ -27764,7 +27861,6 @@ will be valid. If the event is serviced and a string is returned then the string will be logged instead of the default log line. See <> for details on events. -.wen .section "Testing server authentication" "SECID169" @@ -27843,7 +27939,6 @@ Exim abandons trying to send the message to the host for the moment. It will try again later. If there are any backup hosts available, they are tried in the usual way. -.new .next .cindex authentication "failure event, client" If the response to authentication is a permanent error (5&'xx'& code), @@ -27853,7 +27948,6 @@ While the event is being processed the variable will be valid. If the event is serviced and a string is returned then the string will be logged. See <> for details on events. -.wen .next If the response to authentication is a permanent error (5&'xx'& code), Exim @@ -28433,11 +28527,9 @@ dovecot_ntlm: server_set_id = $auth1 .endd -.new &*Note*&: plaintext authentication methods such as PLAIN and LOGIN should not be advertised on cleartext SMTP connections. See the discussion in section &<>&. -.wen If the SMTP connection is encrypted, or if &$sender_host_address$& is equal to &$received_ip_address$& (that is, the connection is local), the &"secured"& @@ -29246,8 +29338,8 @@ When using OpenSSL, this option is ignored. (If an API is found to let OpenSSL be configured in this way, let the Exim Maintainers know and we'll likely use it). .next -With GnuTLS, if an explicit list is used for the &%tls_privatekey%& main option -main option, it must be ordered to match the &%tls_certificate%& list. +With GnuTLS, if an explicit list is used for the &%tls_privatekey%& main option, +it must be ordered to match the &%tls_certificate%& list. .next Some other recently added features may only be available in one or the other. This should be documented with the feature. If the documentation does not @@ -30341,7 +30433,7 @@ DNSSEC. .next Add TLSA DNS records. These say what the server certificate for a TLS connection should be. .next -Offer a server certificate, or certificate chain, in TLS connections which is is anchored by one of the TLSA records. +Offer a server certificate, or certificate chain, in TLS connections which is anchored by one of the TLSA records. .endlist There are no changes to Exim specific to server-side operation of DANE. @@ -30509,12 +30601,17 @@ Section 4.3 of that document. .subsection General Under GnuTLS, DANE is only supported from version 3.0.0 onwards. -DANE is specified in published RFCs and decouples certificate authority trust +DANE is specified in RFC 6698. It decouples certificate authority trust selection from a "race to the bottom" of "you must trust everything for mail to get through". -There is an alternative technology called MTA-STS, which -instead publishes MX trust anchor information on an HTTPS website. At the -time this text was last updated, MTA-STS was still a draft, not yet an RFC. +It does retain the need to trust the assurances provided by the DNSSEC tree. + +There is an alternative technology called MTA-STS (RFC 8461), which +instead publishes MX trust anchor information on an HTTPS website. +The discovery of the address for that website does not (per standard) +require DNSSEC, and could be regarded as being less secure than DANE +as a result. + Exim has no support for MTA-STS as a client, but Exim mail server operators can choose to publish information describing their TLS configuration using MTA-STS to let those clients who do use that protocol derive trust @@ -30585,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" @@ -30611,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 @@ -30626,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 @@ -30660,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 @@ -30670,14 +30769,12 @@ accepted by an &%accept%& verb that has a &%message%& modifier, the contents of the message override the banner message that is otherwise specified by the &%smtp_banner%& option. -.new For tls-on-connect connections, the ACL is run before the TLS connection is accepted; if the ACL does not accept then the TCP connection is dropped without any TLS startup attempt and without any SMTP response being transmitted. -.wen -.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 @@ -30698,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. @@ -30741,6 +30838,10 @@ and the &%acl_smtp_mime%& ACLs. The &%acl_smtp_dkim%& ACL is available only when Exim is compiled with DKIM support enabled (which is the default). +If, for a specific message, an ACL control +&*dkim_disable_verify*& +has been set, this &%acl_smtp_dkim%& ACL is not called. + The ACL test specified by &%acl_smtp_dkim%& happens after a message has been received, and is executed for each DKIM signature found in a message. If not otherwise specified, the default action is to accept. @@ -30791,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:} +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 @@ -30961,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. @@ -31038,7 +31198,8 @@ option to do this.) .section "Format of an ACL" "SECID199" .cindex "&ACL;" "format of" .cindex "&ACL;" "verbs, definition of" -An individual ACL consists of a number of statements. Each statement starts +An individual ACL definition consists of a number of statements. +Each statement starts with a verb, optionally followed by a number of conditions and &"modifiers"&. Modifiers can change the way the verb operates, define error and log messages, set variables, insert delays, and vary the processing of accepted messages. @@ -31057,6 +31218,9 @@ happens then depends on the verb (and in one case, on a special modifier). Not all the conditions make sense at every testing point. For example, you cannot test a sender address in the ACL that is run for a VRFY command. +The definition of an ACL ends where another starts, +or a different configuration section starts. + .section "ACL verbs" "SECID200" The ACL verbs are as follows: @@ -32067,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 &<>&. + +.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 &<>&. +.wen .endlist vlist @@ -32211,7 +32382,6 @@ DATA, MIME or DKIM ACLs for a message delivered by cutthrough routing. More than one header can be removed at the same time by using a colon separated list of header specifiers. -.new If a specifier does not start with a circumflex (^) then it is treated as a header name. The header name matching is case insensitive. @@ -32225,7 +32395,6 @@ Example: .code remove_header = \N^(?i)Authentication-Results\s*::\s*example.org;\N .endd -.wen List expansion is not performed, so you cannot use hostlists to create a list of headers, however both connection and message variable expansion @@ -35379,9 +35548,10 @@ The arguments are as follows: (the -D file). The file is open for reading and writing, but updating it is not recommended. &*Warning*&: You must &'not'& close this file descriptor. -The descriptor is positioned at character 19 of the file, which is the first -character of the body itself, because the first 19 characters are the message -id followed by &`-D`& and a newline. If you rewind the file, you should use the +The descriptor is positioned at character 26 of the file, which is the first +character of the body itself, because the first 26 characters (19 characters +before Exim 4.97) are the message id followed by &`-D`& and a newline. +If you rewind the file, you should use the macro SPOOL_DATA_START_OFFSET to reset to the start of the data, just in case this changes in some future version. .next @@ -36497,8 +36667,6 @@ other MTAs, the way Exim handles line endings for all messages is now as follows: .ilist -LF not preceded by CR is treated as a line ending. -.next CR is treated as a line ending; if it is immediately followed by LF, the LF is ignored. .next @@ -36513,7 +36681,10 @@ people trying to play silly games. .next If the first header line received in a message ends with CRLF, a subsequent bare LF in a header line is treated in the same way as a bare CR in a header -line. +line and a bare LF in a body line is replaced with a space. +.next +If the first header line received in a message does not end with CRLF, a subsequent +LF not preceded by CR is treated as a line ending. .endlist @@ -39096,7 +39267,7 @@ selection marked by asterisks: .irow &`deliver_time`&   "time taken to attempt delivery" .irow &`delivery_size`&   "add &`S=`&&'nnn'& to => lines" .irow &`dkim`& * "DKIM verified domain on <= lines" -.irow &`dkim_verbose`&   "separate full DKIM verification result line, per signature" +.irow &`dkim_verbose`&   "separate full DKIM verification result line, per signature; DKIM signing" .irow &`dnslist_defer`& * "defers of DNS list (aka RBL) lookups" .irow &`dnssec`&   "DNSSEC secured lookups" .irow &`etrn`& * "ETRN commands" @@ -39140,7 +39311,7 @@ selection marked by asterisks: .irow &`tls_peerdn`&   "TLS peer DN on <= and => lines" .irow &`tls_resumption`&   "append * to cipher field" .irow &`tls_sni`&   "TLS SNI on <= lines" -.irow &`unknown_in_list`&   "DNS lookup failed in list match" +.irow &`unknown_in_list`&   "lookup failed in list match" .irow &`all`&   "&*all of the above*&" .endtable See also the &%slow_lookup_log%& main configuration option, @@ -39187,12 +39358,10 @@ only way to log such cases is to interpose a script such as &_util/logargs.sh_& between the caller and Exim. .next .cindex "log" "connection identifier" -.new &%connection_identifier%&: An identifier for the accepted connection is added to connection start and end lines and to message accept lines. The identifier is tagged by Ci=. The value is PID-based, so will reset on reboot and will wrap. -.wen .next .cindex "log" "connection rejections" &%connection_reject%&: A log entry is written whenever an incoming SMTP @@ -39224,6 +39393,10 @@ verifies successfully a tag of DKIM is added, with one of the verified domains. .cindex log "DKIM verification" .cindex DKIM "verification logging" &%dkim_verbose%&: A log entry is written for each attempted DKIM verification. +.new +Also, on message delivery lines signing information (domain and selector) +is added, tagged with DKIM=. +.wen .next .cindex "log" "dnslist defer" .cindex "DNS list" "logging defer" @@ -39561,7 +39734,8 @@ added to the log line, preceded by SNI=. .next .cindex "log" "DNS failure in list" &%unknown_in_list%&: This setting causes a log entry to be written when the -result of a list match is failure because a DNS lookup failed. +result of a list match is failure because a DNS lookup failed, or because +a bad IP address was in the list. .endlist @@ -41569,8 +41743,11 @@ Exim's DKIM implementation allows for .olist Signing outgoing messages: This function is implemented in the SMTP transport. It can co-exist with all other Exim features -(including transport filters) -except cutthrough delivery. +(including transport filters) except cutthrough delivery. +.new +However, signing options may not depend on headers modified by +routers, the transport or a transport filter. +.wen .next Verifying signatures in incoming messages: This is implemented by an additional ACL (acl_smtp_dkim), which can be called several times per message, with @@ -41756,7 +41933,7 @@ variables here. .option dkim_sign_headers smtp string&!! "see below" If set, this option must expand to a colon-separated list of header names. -Headers with these names, or the absence or such a header, will be included +Headers with these names, or the absence of such a header, will be included in the message signature. When unspecified, the header names listed in RFC4871 will be used, whether or not each header is present in the message. @@ -41778,10 +41955,11 @@ name will be appended. .option dkim_timestamps smtp integer&!! unset This option controls the inclusion of timestamp information in the signature. If not set, no such information will be included. -Otherwise, must be an unsigned number giving an offset in seconds from the current time -for the expiry tag -(eg. 1209600 for two weeks); -both creation (t=) and expiry (x=) tags will be included. +.new +Otherwise, must be an unsigned number giving an offset in seconds from the +current time for the expiry tag (e.g. 1209600 for two weeks); both creation +(t=) and expiry (x=) tags will be included unless the offset is 0 (no expiry). +.wen RFC 6376 lists these tags as RECOMMENDED. @@ -42279,10 +42457,16 @@ The lookup will return the same result strings as can appear in .subsection "SRS (Sender Rewriting Scheme)" SECTSRS .cindex SRS "sender rewriting scheme" +.cindex VERP "variable envelope return path" SRS can be used to modify sender addresses when forwarding so that SPF verification does not object to them. -It operates by encoding the original envelope sender in a new +It can also be used to identify a received bounce message as +likely (or not) having been trigged by a message from the +local system, and for identifying dead addresses in mailing lists. +It is one implementation of a VERP (Variable Envelope Return Path) method. + +SRS operates by encoding the original envelope sender in a new sender local part and using a domain run by the forwarding site as the new domain for the sender. Any DSN message should be returned to this new sender at the forwarding site, which can extract the @@ -42335,11 +42519,9 @@ return false. If it is, the condition will return true and the variable &$srs_recipient$& will be set to the decoded (original) value. -.new If the second argument is empty then the condition returns true if the first argument is in valid SRS formet, else false. The variable &$srs_recipient$& is not set for this case. -.wen .endlist Example usage: @@ -42374,7 +42556,8 @@ Example usage: allow_fail data = :fail: Invalid SRS recipient address - #... further routers here + #... further routers here get inbound_srs-redirected recipients + # and any that were not SRS'd # transport; should look like the non-forward outbound @@ -42960,10 +43143,13 @@ Events have names which correspond to the point in process at which they fire. The name is placed in the variable &$event_name$& and the event action expansion must check this, as it will be called for every possible event type. +.new The current list of events is: +.wen .itable all 0 0 4 25* left 10* center 15* center 50* left .row auth:fail after both "per driver per authentication attempt" .row dane:fail after transport "per connection" +.row dns:fail after both "per lookup" .row msg:complete after main "per message" .row msg:defer after transport "per message per delivery try" .row msg:delivery after transport "per recipient" @@ -42997,6 +43183,7 @@ with the event type: .itable all 0 0 2 20* left 80* left .row auth:fail "smtp response" .row dane:fail "failure reason" +.row dns:fail "failure reason, key and lookup-type" .row msg:defer "error string" .row msg:delivery "smtp confirmation message" .row msg:fail:internal "failure reason" @@ -43038,14 +43225,19 @@ All other message types ignore the result string, and no other use is made of it. For a tcp:connect event, if the connection is being made to a proxy -then the address and port variables will be that of the proxy and not -the target system. +then the &$host_address$& and &$host_port$& variables +will be that of the proxy and not the target system. For tls:cert events, if GnuTLS is in use this will trigger only per chain element received on the connection. For OpenSSL it will trigger for every chain element including those loaded locally. +.new +For dns:fail events from dnsdb lookups, a &"defer_never"& option does not +affect the reporting of DNS_AGAIN. +.wen + . //////////////////////////////////////////////////////////////////////////// . //////////////////////////////////////////////////////////////////////////// diff --git a/doc/doc-scripts/g2t b/doc/doc-scripts/g2t index c840ac64f..5916e9149 100755 --- a/doc/doc-scripts/g2t +++ b/doc/doc-scripts/g2t @@ -294,7 +294,7 @@ my($new_lastwasitem) = 0; # Chapter directives just require . => @; however, dequoting the # line thereafter will remove the first @, so just force it back -# afterwards. If the chapter is is one describing a driver, set +# afterwards. If the chapter is one describing a driver, set # the driver name. if (/\.chapter/) diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index c1b577f62..4c2412b9c 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -2,15 +2,175 @@ This document describes *changes* to previous versions, that might affect Exim's operation, with an unchanged configuration file. For new options, and new features, see the NewStuff file next to this ChangeLog. -Since 4.97 +Since version 4.98 +------------------ + +JH/01 Use fewer forks & execs for sending many messages to a single host. + By passing back the next message-id from the transport to the delivery + process, we can loop there. A two-phase queue run will benefit, + particularly for mailinglist and smarthost cases. + +Exim version 4.98 ----------------- -JH/01 Handle error on close of the spool data file during reception. Previously - This was only logged, on the assumption that errors would be seen for - a previous fflush(). However, a fuse filesystem has been reported as - showing this an error for the fclose(). The spool is now in an uncertain - state, and we have logged and responded acceptance. Change this to - respond with a temp-reject, wipe spoolfiles, and log the error detail. +JH/01 Support list of dkim results in the dkim_status ACL condition, making + it more usable in the data ACL. + +JH/02 Bug 3040: Handle error on close of the spool data file during reception. + Previously This was only logged, on the assumption that errors would be + seen for a previous fflush(). However, a fuse filesystem has been + reported as showing this an error for the fclose(). The spool is now in + an uncertain state, and we have logged and responded acceptance. Change + this to respond with a temp-reject, wipe spoolfiles, and log the error + detail. + +JH/03 Bug 3030: Fix handling of DNS servfail respons for DANE TLSA. When hit + during a recipient verify callout, a QUIT command was attempted on the + now-closed callout channel, causing a paniclog entry. + +JH/04 Bug 3039: Fix handling of of an empty log_reject_target, with + a connection_reject log_selector, under tls_on_connect. Previously + with this combination, when the connect ACL rejected, a spurious + paniclog entry was made. + +JH/05 Fix TLS resumption for TLS-on-connect. This was broken by the advent + of loadbalancer-detection for resumption, in 4.96 - which tries to + use the EHLO response. SMTPS does not have one at the time it is starting + TLS. Change the default for the smtp transport host_name_extract option + to be a static string, for TLS-on-connect cases; meaning that resumption + will always be attempted (unless deliberately overriden). + +JH/06 Bug 3054: Fix dnsdb lookup for a TXT record with multiple chunks, with a + chunk-separator specification. This was broken by hardening introduced + for Bug 3031. + +JH/07 Bug 3050: Fix -bp for old message_id format spoolfiles. Previously it + included the -H with the id; this also messed up exiqgrep. + +JH/08 Bug 3056: Tighten up parsing of DKIM DNS records. Previously, whitespace + was not properly skipped and empty elements would cause mis-parsing. + Tighten parsing of DKIM header records. Previously, all but lowercase + alpha chars would be ignored in potential tag names. + +JH/09 Bug 3057: Add heuristic for spotting mistyped IPv6 addresses in lists + being searched. Previously we only had one for IPv4 addresses. Per the + documentation, the error results by default in a no-match result for the + list. It is logged if the unknown_in_list log_selector is used. + +JH/10 Bug 3058: Ensure that a failing expansion in a router "set" option defers + the routing operation. Previously it would silently stop routing the + message. + +JH/11 Bug 3046: Fix queue-runs. Previously, the arrivel of a notification or + info-request event close in time to a scheduled run timer could result in + the latter being missed, and no further queue scheduled runs being + initiated. This ouwld be more likely on high-load systems. + +JH/12 Refuse to accept a line "dot, LF" as end-of-DATA unless operating in + LF-only mode (as detected from the first header line). Previously we did + accept that in (normal) CRLF mode; this has been raised as a possible + attack scenario (under the name "smtp smuggling"). + +JH/13 Add an fdatasync call for the received message data file in spool, before + loggging reception and sending the SMTP ack. Previously we only flushed + the stdio buffer so there was still the possibility of a disk error. + +JH/14 Bug 3061: Avoid a split log line when trying to rewrite a malformed + address. Previously, for the last address in a header line (commonly + there is only one) the terminating newline was part of the logged + information. + +JH/15 Bug 3061: Ensure a log line is written for a malformed address in a + header, when parsing for address-qualification. Previously one was only + written if there were rewrite rules. + +JH/16 Two-phase queue runs are now reported in the daemon startup log line and + in exiwhat output. + +JH/17 Bug 3064: Fix combination of "-q -R ". Introduction of + the multiple-queue-runners facility for 4.97 broke this, giving only a + one-time run of the queue. + +JH/18 Bug 3068: Log a warning for use of deprecated syntax in query-style + lookups. + +JH/19 Fix TLS startup. When the last expansion done before the initiation of a + TLS session resulted in a forced-fail, a misleading error was logged for + the expansino of tls_certificates. This would affect the common case of + that option being set (main-section options) but not having any variable + parts. It could also potentially affect tls_privatekeys. The underlyding + coding errors go back to 4.90 but were only exposed in 4.97. + +JH/20 Bug 3047: A recent (somewhere between 10.34 and 10.42) version of the + pcre2 library starting allocating 20kB rather than 112 bytes per match + call, which broke the 2GB total limitation on Exim's memory management + when a user had over 104207 messages stored and the appendfile + maildir_quota_directory_regex option is in use. Release the allocated + memory every thosand files to avoid this. + The same issue arises with the ACL regex condition, which is applied + to every line of a received message. + +JH/21 Bug 3059: Fix crash in smtp transport. When running for a message for + which all recipients had been handled (itself an issue) a null-pointer + deref was done on trying to write a retry record. Fix that by counting + the outstanding recipients before trying to transmit the message. + The situation arose for a second MX try within a transport run, when the + first had perm-rejected a recipient (the only one for the connection, in + the case seen) during pipelining, and then closed the TCP connection. + The transport classified that as an I/O error, leaving the message + outstanding but having marked up the recipient as dealt-with. It then + tried another MX because of the I/O error. Fix this by converting the + message-level status to ok if there was a close but all recipients were + dealt with. Thanks to Wolfgand Breyha for debug runs. + +JH/22 The ESMTP_LIMITS facility (RFC 9422) is promoted from experimental status + and is now controlled by the build-time option DISABLE_ESMTP_LIMITS. + +JH/23 Bug 3066: Avoid leaking lookup database credentials to log. + +JH/24 Bug 3081: Fix a delivery process crash. When the router "errors_to" + option specified a fixed address, later rewriting on that address would + trip on the configuration data being readonly. Instead of modifying + in-place, copy data. Found and fixed by Peter Benie. + +JH/25 Bug 3079: Fix crash in dbmnz. When a key was present for zero-length + data a null pointer was followed. Find and testcase by Sebastian Bugge. + +JH/26 Fix encoding for an AUTH parameter on a MAIL FROM command. Previously + decimal 127 chars were not encoded, and lowercase hex was used for + encoded values. Outstanding since at least 1999. + +JH/27 Fix crash in logging. When a message with a large number of recipients + had been received, and logging of recipients is enabled, the buffer used + for logging could reach limit. A read using a null pointer would then + be done, resulting in a crash of the receiving process before an SMTP + ACK for the message was returned to the sending system. Duplicate + messages were created as a result. + Find and debug help by Mateusz Krawczyk + +JH/28 Bug 3086: Fix exinext for ipv6. Change the format of keys in the retry + DB, wrapping transport record bare-ip "host names" and ipv6 + "host addresses" in square-brackets. This makes the parsing that + exinext does more reliable. + +JH/29 Bug 3087: Fix SRS encode. A zero-length quoted element in the local-part + would cause a crash. + +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 + 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. + +JH/34 Fix delivery ordering for 2-phase queue run combined with + queue_run_in_order. Exim version 4.97 @@ -99,7 +259,7 @@ JH/18 Fix a fencepost error in logging. Previously (since 4.92) when a log line JH/19 Bug 2911: Fix a recursion in DNS lookups. Previously, if the main option dns_again_means_nonexist included an element causing a DNS lookup which - iteslf returned DNS_AGAIN, unbounded recursion occurred. Possible results + itself returned DNS_AGAIN, unbounded recursion occurred. Possible results included (though probably not limited to) a process crash from stack memory limit, or from excessive open files. Replace this with a paniclog whine (as this is likely a configuration error), and returning @@ -204,8 +364,26 @@ JH/38 Taint-track intermediate values from the peer in multi-stage authentation JH/39 Bug 3023: Fix crash induced by some combinations of zero-length strings and ${tr...}. Found and diagnosed by Heiko Schlichting. -JH/40 Support list of dkim results in the dkim_status ACL condition, making - it more usable in the data ACL. +JH/40 Bug 2999: Fix a possible OOB write in the external authenticator, which + could be triggered by externally-supplied input. Found by Trend Micro. + CVE-2023-42115 + +JH/41 Bug 3000: Fix a possible OOB write in the SPA authenticator, which could + be triggered by externally-controlled input. Found by Trend Micro. + CVE-2023-42116 + +JH/42 Bug 3001: Fix a possible OOB read in the SPA authenticator, which could + be triggered by externally-controlled input. Found by Trend Micro. + CVE-2023-42114 + +JH/43 Bug 2903: avoid exit on an attempt to rewrite a malformed address. + Make the rewrite never match and keep the logging. Trust the + admin to be using verify=header-syntax (to actually reject the message). + +JH/44 Bug 3033: Harden dnsdb lookups against crafted DNS responses. + CVE-2023-42219 + +HS/02 Fix string_is_ip_address() CVE-2023-42117 (Bug 3031) Exim version 4.96 @@ -569,7 +747,7 @@ JH/44 Bug 2701: Fix list-expansion of dns_ipv4_lookup. Previously, it did mx_fail_domains. JH/45 Use a (new) separate store pool-pair for DKIM verify working data. - Previously the permanent pool was used, so the sore could not be freed. + Previously the permanent pool was used, so the store could not be freed. This meant a connection with many messages would use continually-growing memory. diff --git a/doc/doc-txt/NewStuff b/doc/doc-txt/NewStuff index beca9748c..778c3259e 100644 --- a/doc/doc-txt/NewStuff +++ b/doc/doc-txt/NewStuff @@ -6,9 +6,31 @@ Before a formal release, there may be quite a lot of detail so that people can test from the snapshots or the Git before the documentation is updated. Once the documentation is updated, this file is reduced to a short list. -Since 4.97 +Version 4.98 ------------ - 1. The dkim_status ACL condition may not be used in data ACLs + 1. The dkim_status ACL condition may now be used in data ACLs + + 2. The dkim_verbose logging control also enables logging of signing + + 3. The dkim_timestamps signing option now accepts zero to include a current + timestamp but no expiry timestamp. Code by Simon Arlott; testsuite + additions by jgh. + + 4. The recipients_max main option is now expanded. + + 5. Setting variables for "exim -be" can set a tainted value. + + 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- file. Version 4.97 ------------ @@ -1194,7 +1216,7 @@ Version 4.68 9. There is a new ACL, specified by acl_smtp_notquit, which is run in most cases when an SMTP session ends without sending QUIT. However, when Exim - itself is is bad trouble, such as being unable to write to its log files, + itself is in bad trouble, such as being unable to write to its log files, this ACL is not run, because it might try to do things (such as write to log files) that make the situation even worse. diff --git a/doc/doc-txt/OptionLists.txt b/doc/doc-txt/OptionLists.txt index ee62cad48..987f096ba 100644 --- a/doc/doc-txt/OptionLists.txt +++ b/doc/doc-txt/OptionLists.txt @@ -343,6 +343,7 @@ keep_malformed time 4d main keepalive boolean true smtp 2.05 ldap_default_servers string list unset main 3.02 ldap_version int 2 or 3 main 4.14 +limits_advertise_hosts host list * main 4.98 local_from_check boolean true main 3.14 local_from_prefix string unset main 3.14 local_from_suffix string unset main 3.14 @@ -474,7 +475,7 @@ receive_timeout time 0s main received_header_text string* + main received_headers_max integer 30 main recipient_unqualified_hosts host list unset main 4.00 replacing receiver_unqualified_hosts -recipients_max integer 50000 main 1.60 default changed in 4.95 (was 0) +recipients_max integer* 50000 main 1.60 default changed in 4.95 (was 0) recipients_max_reject boolean false main 1.70 redirect_router string unset routers 4.00 remote_max_parallel integer 1 main diff --git a/doc/doc-txt/cve-2023-51766 b/doc/doc-txt/cve-2023-51766 new file mode 100644 index 000000000..d066d8714 --- /dev/null +++ b/doc/doc-txt/cve-2023-51766 @@ -0,0 +1,69 @@ +CVE ID: CVE-2023-51766 +Date: 2016-12-15 +Credits: https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/ +Version(s): all up to 4.97 inclusive +Issue: Given a buggy relay, Exim can be induced to accept a second message embedded + as part of the body of a first message + +Conditions +========== + +If *all* the following conditions are met + + Runtime options + --------------- + + * Exim offers PIPELINING on incoming connections + + * Exim offers CHUNKING on incoming connections + + Operation + --------- + + * DATA (as opposed to BDAT) is used for a message reception + + * The relay host sends to the Exim MTA message data including + one of "LF . LF" or "CR LF . LF" or "LF . CR LF". + + * Exim interprets the sequence as signalling the end of data for + the SMTP DATA command, and hence a first message. + + * Exim interprets further input which the relay had as message body + data, as SMTP commands and data. This could include a MAIL, RCPT, + BDAT (etc) sequence, resulting in a further message acceptance. + +Impact +====== + +One or more messages can be accepted by Exim that have not been +properly validated by the buggy relay. + +Fix +=== + +Install a fixed Exim version: + + 4.98 (once available) + 4.97.1 + +If you can't install one of the above versions, ask your package +maintainer for a version containing the backported fix. On request and +depending on our resources we will support you in backporting the fix. +(Please note, that Exim project officially doesn't support versions +prior the current stable version.) + + +Workaround +========== + + Disable CHUNKING advertisement for incoming connections. + + An attempt to "smuggle" a DATA command will trip a syncronisation + check. + +*or* + + Disable PIPELINING advertisement for incoming connections. + + The "smuggled" MAIL FROM command will then trip a syncronisation + check. diff --git a/doc/doc-txt/experimental-spec.txt b/doc/doc-txt/experimental-spec.txt index f61db629e..56ee10f82 100644 --- a/doc/doc-txt/experimental-spec.txt +++ b/doc/doc-txt/experimental-spec.txt @@ -616,7 +616,7 @@ and a whitespace-separated port number must be given. Logging protocol unusual states --------------------------------------------------------------- An extra log_selector, "protocol_detail" has been added in the default build. -The name may change in future, hence the Experimenal status. +The name may change in future, hence the Experimental status. Currrently the only effect is to enable logging, under TLS, of a TCP RST received directly after a QUIT (in server mode). @@ -628,43 +628,6 @@ being logged. -Limits ESMTP extension ---------------------------------------------------------------- -Per https://datatracker.ietf.org/doc/html/draft-freed-smtp-limits-01 -(as of 2023/08/04, version -05 has been published. It does not seems -to be substantively different.) - -If compiled with EXPERIMENTAL_ESMTP_LIMITS=yes :- - -As a server, Exim will advertise, in the EHLO response, the limit for RCPT -commands set by the recipients_max main-section config option (if it is set), -and the limit for MAIL commands set by the smtp_accept_max_per_connection -option. - -Note that as of writing, smtp_accept_max_per_connection is expanded but -recipients_max is not. - -A new main-section option "limits_advertise_hosts" controls whether -the limits are advertised; the default for the option is "*". - -As a client, Exim will: - - - note an advertised MAILMAX; the lower of the value given and the - value from the transport connection_max_messages option is used. - - - note an advertised RCPTMAX; the lower of the - value given and the value from the transport max_rcpt option is used. - Parallisation of transactions is not done if due to a RCPTMAX, unlike - max_rcpt. - - - note an advertised RCPTDOMAINMAX, and behave as if the transport - multi_domains option was set to false. The value advertised is ignored. - -Values advertised are only noted for TLS connections and ones for which -the server does not advertise TLS support. - - - XCLIENT proxy support --------------------------------------------------------------- Per https://www.postfix.org/XCLIENT_README.html @@ -695,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 index 000000000..79e71582c --- /dev/null +++ b/doc/doc-txt/id-wellknown.txt @@ -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 + +The 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. diff --git a/release-process/scripts/docs_strip_changebars b/release-process/scripts/docs_strip_changebars new file mode 100755 index 000000000..cb6e21827 --- /dev/null +++ b/release-process/scripts/docs_strip_changebars @@ -0,0 +1,5 @@ +#!/bin/awk -f +BEGIN {seen = 0} +/^\.(new|wen)/ && $seen != 0 {next} +/^\.wen$/ {seen = 1;next} +{print} diff --git a/release-process/scripts/mk_exim_release b/release-process/scripts/mk_exim_release index 47051dff1..ed075b42b 100755 --- a/release-process/scripts/mk_exim_release +++ b/release-process/scripts/mk_exim_release @@ -1,5 +1,5 @@ #!/usr/bin/env perl -# Copyright (c) The Exim Maintainers 2016 - 2021 +# Copyright (c) The Exim Maintainers 2016 - 2023 use strict; use warnings; diff --git a/src/Makefile b/src/Makefile index b8d88054d..7b1434a59 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2,7 +2,7 @@ # appropriate links, and then creating and running the main makefile in that # directory. -# Copyright (c) The Exim Maintainers 2022 +# Copyright (c) The Exim Maintainers 2022 - 2023 # Copyright (c) University of Cambridge, 1995 - 2018 # SPDX-License-Identifier: GPL-2.0-or-later # See the file NOTICE for conditions of use and distribution. diff --git a/src/OS/Makefile-Base b/src/OS/Makefile-Base index 6778331c7..afa2a7a23 100644 --- a/src/OS/Makefile-Base +++ b/src/OS/Makefile-Base @@ -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 - 2022 +# Copyright (c) The Exim Maintainers 1995 - 2024 # SPDX-License-Identifier: GPL-2.0-or-later SHELL = $(MAKE_SHELL) @@ -108,7 +108,7 @@ config.h: Makefile buildconfig ../src/config.h.defaults $(EDITME) # Build the builtin-macros data struct -MACRO_HSRC = macro_predef.h os.h globals.h config.h macros.h \ +MACRO_HSRC = macro_predef.h os.h globals.h config.h macros.h path_max.h \ routers/accept.h routers/dnslookup.h routers/ipliteral.h \ routers/iplookup.h routers/manualroute.h routers/queryprogram.h \ routers/redirect.h @@ -664,7 +664,7 @@ OBJ_MONBIN = util-host_address.o \ $(MONBIN) eximon.bin: $(EXIMON_EDITME) eximon $(OBJ_MONBIN) ../exim_monitor/em_version.c \ - mytypes.h store.h macros.h + mytypes.h store.h path_max.h macros.h @echo "$(CC) exim_monitor/em_version.c" $(FE)$(CC) -o em_version.o -c \ $(CFLAGS) $(XINCLUDE) -I. ../exim_monitor/em_version.c @@ -698,6 +698,7 @@ HDRS = blob.h \ local_scan.h \ macros.h \ mytypes.h \ + path_max.h \ sha_ver.h \ structs.h \ os.h @@ -711,6 +712,7 @@ PHDRS = ../config.h \ ../local_scan.h \ ../macros.h \ ../mytypes.h \ + ../path_max.h \ ../structs.h \ ../os.h diff --git a/src/OS/Makefile-FreeBSD b/src/OS/Makefile-FreeBSD index f0fb8f2c9..ca1073e11 100644 --- a/src/OS/Makefile-FreeBSD +++ b/src/OS/Makefile-FreeBSD @@ -1,6 +1,6 @@ # Exim: OS-specific make file for FreeBSD # -# Copyright (c) The Exim Maintainers 2020 +# Copyright (c) The Exim Maintainers 2020 - 2023 # SPDX-License-Identifier: GPL-2.0-or-later CHOWN_COMMAND=/usr/sbin/chown diff --git a/src/OS/Makefile-OpenBSD b/src/OS/Makefile-OpenBSD index da648df43..b6c374cec 100644 --- a/src/OS/Makefile-OpenBSD +++ b/src/OS/Makefile-OpenBSD @@ -1,5 +1,5 @@ # Exim: OS-specific make file for OpenBSD -# Copyright (c) The Exim Maintainers 2022 +# Copyright (c) The Exim Maintainers 2022 - 2023 # SPDX-License-Identifier: GPL-2.0-or-later CHOWN_COMMAND=/usr/sbin/chown diff --git a/src/OS/Makefile-SunOS5 b/src/OS/Makefile-SunOS5 index e8b0d9506..3e8523f4c 100644 --- a/src/OS/Makefile-SunOS5 +++ b/src/OS/Makefile-SunOS5 @@ -1,5 +1,5 @@ # Exim: OS-specific make file for SunOS5 -# Copyright (c) The Exim Maintainers 2020 +# Copyright (c) The Exim Maintainers 2020 - 2023 # SPDX-License-Identifier: GPL-2.0-or-later HAVE_ICONV=yes diff --git a/src/OS/os.h-FreeBSD b/src/OS/os.h-FreeBSD index 6756d42f6..57ea82265 100644 --- a/src/OS/os.h-FreeBSD +++ b/src/OS/os.h-FreeBSD @@ -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. */ @@ -78,5 +78,7 @@ extern ssize_t os_sendfile(int, int, off_t *, size_t); /*******************/ #define EXIM_HAVE_KEVENT +#define EXIM_HAVE_STRCHRNUL + /* End */ diff --git a/src/OS/os.h-Linux b/src/OS/os.h-Linux index 25a12862b..dcd9ec02d 100644 --- a/src/OS/os.h-Linux +++ b/src/OS/os.h-Linux @@ -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. */ @@ -102,4 +102,6 @@ then change the 0 to 1 in the next block. */ # define NS_MAXMSG 65535 #endif +#define EXIM_HAVE_STRCHRNUL + /* End */ diff --git a/src/exim_monitor/em_globals.c b/src/exim_monitor/em_globals.c index cf9b1075e..b23accc65 100644 --- a/src/exim_monitor/em_globals.c +++ b/src/exim_monitor/em_globals.c @@ -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 */ @@ -204,7 +204,7 @@ recipient_item *recipients_list = NULL; int recipients_list_max = 0; BOOL running_in_test_harness=FALSE; -uschar *sender_address = NULL; +const uschar *sender_address = NULL; uschar *sender_fullhost = NULL; uschar *sender_helo_name = NULL; uschar *sender_host_address = NULL; diff --git a/src/exim_monitor/em_hdr.h b/src/exim_monitor/em_hdr.h index 61f390d2c..315c1d250 100644 --- a/src/exim_monitor/em_hdr.h +++ b/src/exim_monitor/em_hdr.h @@ -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 */ @@ -99,6 +99,7 @@ this interface so that this kind of kludge isn't needed. */ typedef void * hctx; #include "local_scan.h" +#include "path_max.h" #include "macros.h" #include "structs.h" #include "blob.h" @@ -190,7 +191,7 @@ typedef struct queue_item { int update_time; int size; uschar *sender; - uschar name[17]; + uschar name[MESSAGE_ID_LENGTH + 1]; uschar seen; uschar frozen; uschar dir_char; @@ -309,7 +310,7 @@ extern uschar *copystring(uschar *); extern void create_dialog(uschar *, uschar *); extern void create_stripchart(Widget, uschar *); extern void debug(char *, ...); -extern dest_item *find_dest(queue_item *, uschar *, int, BOOL); +extern dest_item *find_dest(queue_item *, const uschar *, int, BOOL); extern queue_item *find_queue(uschar *, int, int); extern void init(int, uschar **); extern void menu_create(Widget, XEvent *, String *, Cardinal *); diff --git a/src/exim_monitor/em_log.c b/src/exim_monitor/em_log.c index 55925d786..55dad0bae 100644 --- a/src/exim_monitor/em_log.c +++ b/src/exim_monitor/em_log.c @@ -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 */ @@ -108,7 +108,9 @@ length = Ustrlen(buffer); #ifdef ANONYMIZE { uschar *p = buffer + 9; - if (p[6] == '-' && p[13] == '-') p += 17; + if ( p[MESSAGE_ID_TIME_LEN] == '-' + && p[MESSAGE_ID_TIME_LEN + MESSAGE_ID_PID_LEN + 1] == '-') + p += MESSAGE_ID_LENGTH + 1; while (p < buffer + length) { @@ -292,7 +294,7 @@ if (LOG != NULL) if ((p = Ustrstr(buffer, "==")) != NULL) { - queue_item *qq = find_queue(id, queue_noop, 0); + queue_item * qq = find_queue(id, queue_noop, 0); if (qq) { dest_item *d; @@ -300,14 +302,12 @@ if (LOG != NULL) p += 2; while (isspace(*p)) p++; q = p; - while (*p != 0 && !isspace(*p)) + while (*p && !isspace(*p)) { if (*p++ != '\"') continue; - while (*p != 0) - { + while (*p) if (*p == '\\') p += 2; - else if (*p++ == '\"') break; - } + else if (*p++ == '\"') break; } *p++ = 0; if ((r = strstric(q, qualify_domain, FALSE)) != NULL && diff --git a/src/exim_monitor/em_main.c b/src/exim_monitor/em_main.c index 50b8cd8bd..973e4a525 100644 --- a/src/exim_monitor/em_main.c +++ b/src/exim_monitor/em_main.c @@ -3,7 +3,7 @@ *************************************************/ /* Copyright (c) University of Cambridge 1995 - 2018 */ -/* Copyright (c) The Exim Maintainers 2021 - 2022 */ +/* Copyright (c) The Exim Maintainers 2021 - 2023 */ /* See the file NOTICE for conditions of use and distribution. */ /* SPDX-License-Identifier: GPL-2.0-or-later */ diff --git a/src/exim_monitor/em_menu.c b/src/exim_monitor/em_menu.c index 926dbd95b..03f925f52 100644 --- a/src/exim_monitor/em_menu.c +++ b/src/exim_monitor/em_menu.c @@ -3,7 +3,7 @@ *************************************************/ /* Copyright (c) University of Cambridge 1995 - 2018 */ -/* Copyright (c) The Exim Maintainers 2021 */ +/* Copyright (c) The Exim Maintainers 2023 */ /* See the file NOTICE for conditions of use and distribution. */ /* SPDX-License-Identifier: GPL-2.0-or-later */ diff --git a/src/exim_monitor/em_queue.c b/src/exim_monitor/em_queue.c index accc93652..892b4f856 100644 --- a/src/exim_monitor/em_queue.c +++ b/src/exim_monitor/em_queue.c @@ -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 - 2022 */ /* See the file NOTICE for conditions of use and distribution. */ /* SPDX-License-Identifier: GPL-2.0-or-later */ @@ -66,18 +66,16 @@ address is lowercased to start with, unless it begins with "*", which it does for error messages. */ dest_item * -find_dest(queue_item *q, uschar *name, int action, BOOL caseless) +find_dest(queue_item * q, const uschar * name, int action, BOOL caseless) { -dest_item *dd; -dest_item **d = &(q->destinations); +dest_item * dd; +dest_item ** d = &q->destinations; -while (*d != NULL) +while (*d) { if ((caseless? strcmpic(name,(*d)->address) : Ustrcmp(name,(*d)->address)) == 0) { - dest_item *ddd; - if (action != dest_remove) return *d; dd = *d; *d = dd->next; @@ -85,14 +83,12 @@ while (*d != NULL) /* Unset any parent pointers that were to this address */ - for (ddd = q->destinations; ddd != NULL; ddd = ddd->next) - { + for (dest_item * ddd = q->destinations; ddd; ddd = ddd->next) if (ddd->parent == dd) ddd->parent = NULL; - } return NULL; } - d = &((*d)->next); + d = &(*d)->next; } if (action != dest_add) return NULL; @@ -207,8 +203,9 @@ if it's there. */ else { q->update_time = q->input_time = received_time.tv_sec; - if ((p = strstric(sender_address+1, qualify_domain, FALSE)) != NULL && - *(--p) == '@') *p = 0; + /* deconst ok; strstric is actually safe */ + if ((p = strstric(US sender_address+1, qualify_domain, FALSE)) != NULL && + *--p == '@') *p = 0; } /* If we didn't read the whole header successfully, generate an error @@ -279,10 +276,11 @@ been delivered, and removing visible names. */ if (recipients_list) for (i = 0; i < recipients_count; i++) { - uschar * r = recipients_list[i].address; + const uschar * r = recipients_list[i].address; if (tree_search(tree_nonrecipients, r) == NULL) { - if ((p = strstric(r+1, qualify_domain, FALSE)) != NULL && + /* deconst ok; strstric is actually safe */ + if ((p = strstric(US r+1, qualify_domain, FALSE)) != NULL && *(--p) == '@') *p = 0; (void)find_dest(q, r, dest_add, FALSE); } @@ -663,13 +661,14 @@ if (recipients_list) for (i = 0; i < recipients_count; i++) { uschar * pp; - uschar * r = recipients_list[i].address; + const uschar * r = recipients_list[i].address; tree_node * node; if (!(node = tree_search(tree_nonrecipients, r))) node = tree_search(tree_nonrecipients, string_copylc(r)); - if ((pp = strstric(r+1, qualify_domain, FALSE)) && *(--pp) == '@') + /* deconst ok; strstric is actually safe */ + if ((pp = strstric(US r+1, qualify_domain, FALSE)) && *(--pp) == '@') *pp = 0; if (!node) (void)find_dest(p, r, dest_add, FALSE); diff --git a/src/exim_monitor/em_version.c b/src/exim_monitor/em_version.c index 4c562925c..066ccab56 100644 --- a/src/exim_monitor/em_version.c +++ b/src/exim_monitor/em_version.c @@ -2,26 +2,16 @@ * 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 */ #define EM_VERSION_C -/* Needed by macros.h */ -/* Some systems have PATH_MAX and some have MAX_PATH_LEN. */ - -#ifndef PATH_MAX -# ifdef MAX_PATH_LEN -# define PATH_MAX MAX_PATH_LEN -# else -# define PATH_MAX 1024 -# endif -#endif - #include "mytypes.h" #include "store.h" +#include "path_max.h" #include "macros.h" #include #include diff --git a/src/scripts/MakeLinks b/src/scripts/MakeLinks index 0694af4c0..ddb237980 100755 --- a/src/scripts/MakeLinks +++ b/src/scripts/MakeLinks @@ -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 - 2022 +# Copyright (c) The Exim Maintainers 1995 - 2024 # SPDX-License-Identifier: GPL-2.0-or-later test ! -d ../src && \ @@ -98,7 +98,8 @@ cd .. for f in blob.h dbfunctions.h exim.h functions.h globals.h \ hash.h hintsdb.h hintsdb_structs.h local_scan.h \ - macros.h mytypes.h osfunctions.h store.h structs.h lookupapi.h sha_ver.h \ + macros.h mytypes.h osfunctions.h path_max.h store.h \ + structs.h lookupapi.h sha_ver.h \ \ acl.c buildconfig.c base64.c child.c crypt16.c daemon.c dbfn.c debug.c \ deliver.c directory.c dns.c dnsbl.c drtables.c dummies.c enq.c exim.c \ diff --git a/src/scripts/exim_install b/src/scripts/exim_install index 90eb09661..85e444377 100755 --- a/src/scripts/exim_install +++ b/src/scripts/exim_install @@ -1,6 +1,6 @@ #! /bin/sh -# Copyright (c) The Exim Maintainters 2022 +# Copyright (c) The Exim Maintainters 2022 - 2023 # SPDX-License-Identifier: GPL-2.0-or-later # Script to install Exim binaries in BIN_DIRECTORY, which is defined in diff --git a/src/src/EDITME b/src/src/EDITME index ac323fe18..ebfaf640a 100644 --- a/src/src/EDITME +++ b/src/src/EDITME @@ -1,7 +1,7 @@ ################################################## # The Exim mail transport agent # ################################################## -# Copyright (c) The Exim Maintainers 2022 +# 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,11 +47,13 @@ # 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 # versions 1.85, 2.x, 3.x, or the current 4.x version) and also for gdbm. +# See definitions for DBMLIB below. # For some operating systems, a default DBM library (other than ndbm) is # selected by a setting in the OS-specific Makefile. Most modern OS now have @@ -59,8 +61,8 @@ # for you by the OS-specific configuration. If Exim compiles without any # problems, you probably do not have to worry about the DBM library. If you # do want or need to change it, you should first read the discussion in the -# file doc/dbm.discuss.txt, which also contains instructions for testing Exim's -# interface to the DBM library. +# file doc/doc-txt/dbm.discuss.txt, which also contains instructions for testing +# Exim's interface to the DBM library. # In Local/Makefiles blank lines and lines starting with # are ignored. It is # also permitted to use the # character to add a comment to a setting, for @@ -590,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 @@ -672,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 diff --git a/src/src/acl.c b/src/src/acl.c index 8431efc84..0aa789dbf 100644 --- a/src/src/acl.c +++ b/src/src/acl.c @@ -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 */ @@ -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 }; @@ -800,16 +806,16 @@ return TRUE; static BOOL acl_data_to_cond(const uschar * s, acl_condition_block * cond, - const uschar * name, uschar ** error) + const uschar * name, BOOL taint, uschar ** error) { 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 = string_copy(s); +cond->arg = taint ? string_copy_taint(s, GET_TAINTED) : string_copy(s); return TRUE; } @@ -959,7 +965,7 @@ while ((s = (*func)())) "endpass" has no data */ if (c != ACLC_ENDPASS) - if (!acl_data_to_cond(s, cond, name, error)) return NULL; + if (!acl_data_to_cond(s, cond, name, FALSE, error)) return NULL; } return yield; @@ -1146,9 +1152,9 @@ Returns: nothing */ static void -acl_warn(int where, uschar *user_message, uschar *log_message) +acl_warn(int where, uschar * user_message, uschar * log_message) { -if (log_message != NULL && log_message != user_message) +if (log_message && log_message != user_message) { uschar *text; string_item *logged; @@ -1159,9 +1165,9 @@ if (log_message != NULL && log_message != user_message) /* If a sender verification has failed, and the log message is "sender verify failed", add the failure message. */ - if (sender_verified_failed != NULL && - sender_verified_failed->message != NULL && - strcmpic(log_message, US"sender verify failed") == 0) + if ( sender_verified_failed + && sender_verified_failed->message + && strcmpic(log_message, US"sender verify failed") == 0) text = string_sprintf("%s: %s", text, sender_verified_failed->message); /* Search previously logged warnings. They are kept in malloc @@ -1366,7 +1372,7 @@ uschar * target = store_get(TARGET_SIZE, GET_TAINTED); client's HELO domain. If the client has not said HELO, use its IP address instead. If it's a local client (exim -bs), CSA isn't applicable. */ -while (isspace(*domain) && *domain != '\0') ++domain; +while (isspace(*domain) && *domain) ++domain; if (*domain == '\0') domain = sender_helo_name; if (!domain) domain = sender_host_address; if (!sender_host_address) return CSA_UNKNOWN; @@ -1441,6 +1447,7 @@ for (rr = dns_next_rr(dnsa, &dnss, RESET_ANSWERS); /* Extract the numerical SRV fields (p is incremented) */ + if (rr_bad_size(rr, 3 * sizeof(uint16_t))) continue; GETSHORT(priority, p); GETSHORT(weight, p); GETSHORT(port, p); @@ -1710,10 +1717,10 @@ BOOL no_details = FALSE; BOOL success_on_redirect = FALSE; BOOL quota = FALSE; int quota_pos_cache = QUOTA_POS_DEFAULT, quota_neg_cache = QUOTA_NEG_DEFAULT; -address_item *sender_vaddr = NULL; -uschar *verify_sender_address = NULL; -uschar *pm_mailfrom = NULL; -uschar *se_mailfrom = NULL; +address_item * sender_vaddr = NULL; +const uschar * verify_sender_address = NULL; +uschar * pm_mailfrom = NULL; +uschar * se_mailfrom = NULL; /* Some of the verify items have slash-separated options; some do not. Diagnose an error if options are given for items that don't expect them. @@ -1866,9 +1873,10 @@ switch(vp->value) verify_sender_address = sender_address; else { - while (isspace(*s)) s++; - if (*s++ != '=') goto BAD_VERIFY; - while (isspace(*s)) s++; + if (Uskip_whitespace(&s) != '=') + goto BAD_VERIFY; + s++; + Uskip_whitespace(&s); verify_sender_address = string_copy(s); } } @@ -1910,13 +1918,13 @@ while ((ss = string_nextinlist(&list, &sep, NULL, 0))) callout = CALLOUT_TIMEOUT_DEFAULT; if (*(ss += 7)) { - while (isspace(*ss)) ss++; + Uskip_whitespace(&ss); if (*ss++ == '=') { const uschar * sublist = ss; int optsep = ','; - while (isspace(*sublist)) sublist++; + Uskip_whitespace(&sublist); for (uschar * opt; opt = string_nextinlist(&sublist, &optsep, NULL, 0); ) { callout_opt_t * op; @@ -1930,14 +1938,14 @@ while ((ss = string_nextinlist(&list, &sep, NULL, 0))) if (op->has_option) { opt += Ustrlen(op->name); - while (isspace(*opt)) opt++; + Uskip_whitespace(&opt); if (*opt++ != '=') { *log_msgptr = string_sprintf("'=' expected after " "\"%s\" in ACL verify condition \"%s\"", op->name, arg); return ERROR; } - while (isspace(*opt)) opt++; + Uskip_whitespace(&opt); } if (op->timeval && (period = v_period(opt, arg, log_msgptr)) < 0) return ERROR; @@ -1980,14 +1988,14 @@ while ((ss = string_nextinlist(&list, &sep, NULL, 0))) quota = TRUE; if (*(ss += 5)) { - while (isspace(*ss)) ss++; + Uskip_whitespace(&ss); if (*ss++ == '=') { const uschar * sublist = ss; int optsep = ','; int period; - while (isspace(*sublist)) sublist++; + Uskip_whitespace(&sublist); for (uschar * opt; opt = string_nextinlist(&sublist, &optsep, NULL, 0); ) if (Ustrncmp(opt, "cachepos=", 9) == 0) if ((period = v_period(opt += 9, arg, log_msgptr)) < 0) @@ -3120,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 * *************************************************/ @@ -3309,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 */ @@ -3321,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: @@ -3666,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; } @@ -3891,7 +3979,7 @@ for (; cb; cb = cb->next) } s++; } - while (isspace(*s)) s++; + Uskip_whitespace(&s); if (logbits == 0) logbits = LOG_MAIN; log_write(0, logbits, "%s", string_printing(s)); @@ -3954,11 +4042,11 @@ for (; cb; cb = cb->next) CUSS &recipient_data); break; - #ifdef WITH_CONTENT_SCAN +#ifdef WITH_CONTENT_SCAN case ACLC_REGEX: rc = regex(&arg, textonly); break; - #endif +#endif case ACLC_REMOVE_HEADER: setup_remove_header(arg); @@ -4315,19 +4403,17 @@ if (!s) /* At top level, we expand the incoming string. At lower levels, it has already been expanded as part of condition processing. */ -if (acl_level == 0) +if (acl_level != 0) + ss = s; +else if (!(ss = expand_string(s))) { - if (!(ss = expand_string(s))) - { - if (f.expand_string_forcedfail) return OK; - *log_msgptr = string_sprintf("failed to expand ACL string \"%s\": %s", s, - expand_string_message); - return ERROR; - } + if (f.expand_string_forcedfail) return OK; + *log_msgptr = string_sprintf("failed to expand ACL string \"%s\": %s", s, + expand_string_message); + return ERROR; } -else ss = s; -while (isspace(*ss)) ss++; +Uskip_whitespace(&ss); /* If we can't find a named ACL, the default is to parse it as an inline one. (Unless it begins with a slash; non-existent files give rise to an error.) */ @@ -4450,7 +4536,7 @@ while ((acl_current = acl)) verbs[acl->verb], acl_name); if (basic_errno != ERRNO_CALLOUTDEFER) { - if (search_error_message != NULL && *search_error_message != 0) + if (search_error_message && *search_error_message) *log_msgptr = search_error_message; if (smtp_return_error_details) f.acl_temp_details = TRUE; } @@ -4616,8 +4702,8 @@ if (!(tmp = string_dequote(&s)) || !(name = expand_string(tmp))) for (i = 0; i < 9; i++) { - while (*s && isspace(*s)) s++; - if (!*s) break; + if (!Uskip_whitespace(&s)) + break; if (!(tmp = string_dequote(&s)) || !(tmp_arg[i] = expand_string(tmp))) { tmp = name; @@ -4712,8 +4798,8 @@ Returns: OK access is granted by an ACCEPT verb int acl_where = ACL_WHERE_UNKNOWN; int -acl_check(int where, uschar *recipient, uschar *s, uschar **user_msgptr, - uschar **log_msgptr) +acl_check(int where, const uschar * recipient, uschar * s, + uschar ** user_msgptr, uschar ** log_msgptr) { int rc; address_item adb; @@ -4940,7 +5026,7 @@ fprintf(f, "acl%c %s %d\n%s\n", name[0], name+1, Ustrlen(value), value); uschar * -acl_standalone_setvar(const uschar * s) +acl_standalone_setvar(const uschar * s, BOOL taint) { acl_condition_block * cond = store_get(sizeof(acl_condition_block), GET_UNTAINTED); uschar * errstr = NULL, * log_msg = NULL; @@ -4950,7 +5036,7 @@ int e; cond->next = NULL; cond->type = ACLC_SET; if (!acl_varname_to_cond(&s, cond, &errstr)) return errstr; -if (!acl_data_to_cond(s, cond, US"'-be'", &errstr)) return errstr; +if (!acl_data_to_cond(s, cond, US"'-be'", taint, &errstr)) return errstr; if (acl_check_condition(ACL_WARN, cond, ACL_WHERE_UNKNOWN, NULL, 0, &endpass_seen, &errstr, &log_msg, &e) != OK) diff --git a/src/src/arc.c b/src/src/arc.c index 611697021..48f69a8cf 100644 --- a/src/src/arc.c +++ b/src/src/arc.c @@ -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 - 2022 License: GPL SPDX-License-Identifier: GPL-2.0-or-later */ @@ -2011,7 +2011,7 @@ if (arc_state) g = string_catn(g, US" ]\n", 3); } else - g = string_fmt_append(g, "arc %d\narc_policy $d json:[]\n", + g = string_fmt_append(g, "arc %d\narc_policy %d json:[]\n", ARES_RESULT_UNKNOWN, DMARC_ARC_POLICY_RESULT_UNUSED); return g; } diff --git a/src/src/auths/auth-spa.c b/src/src/auths/auth-spa.c index bcf88c84d..fd3099034 100644 --- a/src/src/auths/auth-spa.c +++ b/src/src/auths/auth-spa.c @@ -9,7 +9,7 @@ * All the original code used here was torn by Marc Prud'hommeaux out of the * Samba project (by Andrew Tridgell, Jeremy Allison, and others). * - * Copyright (c) The Exim Maintainers 2021 + * Copyright (c) The Exim Maintainers 2021 - 2023 * SPDX-License-Identifier: GPL-2.0-or-later * Tom Kistner provided additional code, adding spa_build_auth_challenge() to @@ -156,6 +156,9 @@ int main (int argc, char ** argv) up with a different answer to the one above) */ +#ifndef MACRO_PREDEF + + #define DEBUG_X(a,b) ; extern int DEBUGLEVEL; @@ -1212,7 +1215,9 @@ char versionString[] = "libntlm version 0.21"; #define spa_bytes_add(ptr, header, buf, count) \ { \ -if (buf && (count) != 0) /* we hate -Wint-in-bool-contex */ \ +if ( buf && (count) != 0 /* we hate -Wint-in-bool-contex */ \ + && ptr->bufIndex + count < sizeof(ptr->buffer) \ + ) \ { \ SSVAL(&ptr->header.len,0,count); \ SSVAL(&ptr->header.maxlen,0,count); \ @@ -1230,35 +1235,30 @@ else \ #define spa_string_add(ptr, header, string) \ { \ -char *p = string; \ +uschar * p = string; \ int len = 0; \ -if (p) len = strlen(p); \ -spa_bytes_add(ptr, header, (US p), len); \ +if (p) len = Ustrlen(p); \ +spa_bytes_add(ptr, header, p, len); \ } #define spa_unicode_add_string(ptr, header, string) \ { \ -char *p = string; \ -uschar *b = NULL; \ +uschar * p = string; \ +uschar * b = NULL; \ int len = 0; \ if (p) \ { \ - len = strlen(p); \ - b = strToUnicode(p); \ + len = Ustrlen(p); \ + b = US strToUnicode(CS p); \ } \ spa_bytes_add(ptr, header, b, len*2); \ } -#define GetUnicodeString(structPtr, header) \ -unicodeToString(((char*)structPtr) + IVAL(&structPtr->header.offset,0) , SVAL(&structPtr->header.len,0)/2) -#define GetString(structPtr, header) \ -toString(((CS structPtr) + IVAL(&structPtr->header.offset,0)), SVAL(&structPtr->header.len,0)) - #ifdef notdef #define DumpBuffer(fp, structPtr, header) \ -dumpRaw(fp,(US structPtr)+IVAL(&structPtr->header.offset,0),SVAL(&structPtr->header.len,0)) + dumpRaw(fp,(US structPtr)+IVAL(&structPtr->header.offset,0),SVAL(&structPtr->header.len,0)) static void @@ -1322,8 +1322,33 @@ buf[len] = 0; return buf; } +static inline uschar * +get_challenge_unistr(SPAAuthChallenge * challenge, SPAStrHeader * hdr) +{ +int off = IVAL(&hdr->offset, 0); +int len = SVAL(&hdr->len, 0); +return off + len < sizeof(SPAAuthChallenge) + ? US unicodeToString(CS challenge + off, len/2) : US""; +} + +static inline uschar * +get_challenge_str(SPAAuthChallenge * challenge, SPAStrHeader * hdr) +{ +int off = IVAL(&hdr->offset, 0); +int len = SVAL(&hdr->len, 0); +return off + len < sizeof(SPAAuthChallenge) + ? US toString(CS challenge + off, len) : US""; +} + #ifdef notdef +#define GetUnicodeString(structPtr, header) \ + unicodeToString(((char*)structPtr) + IVAL(&structPtr->header.offset,0) , SVAL(&structPtr->header.len,0)/2) + +#define GetString(structPtr, header) \ + toString(((CS structPtr) + IVAL(&structPtr->header.offset,0)), SVAL(&structPtr->header.len,0)) + + void dumpSmbNtlmAuthRequest (FILE * fp, SPAAuthRequest * request) { @@ -1367,15 +1392,15 @@ fprintf (fp, " Flags = %08x\n", IVAL (&response->flags, 0)); #endif void -spa_build_auth_request (SPAAuthRequest * request, char *user, char *domain) +spa_build_auth_request (SPAAuthRequest * request, uschar * user, uschar * domain) { -char *u = strdup (user); -char *p = strchr (u, '@'); +uschar * u = string_copy(user); +uschar * p = Ustrchr(u, '@'); if (p) { if (!domain) - domain = p + 1; + domain = p + 1; *p = '\0'; } @@ -1385,7 +1410,6 @@ SIVAL (&request->msgType, 0, 1); SIVAL (&request->flags, 0, 0x0000b207); /* have to figure out what these mean */ spa_string_add (request, user, u); spa_string_add (request, domain, domain); -free (u); } @@ -1476,16 +1500,16 @@ free (u); void spa_build_auth_response (SPAAuthChallenge * challenge, - SPAAuthResponse * response, char *user, - char *password) + SPAAuthResponse * response, uschar * user, + uschar * password) { uint8x lmRespData[24]; uint8x ntRespData[24]; uint32x cf = IVAL(&challenge->flags, 0); -char *u = strdup (user); -char *p = strchr (u, '@'); -char *d = NULL; -char *domain; +uschar * u = string_copy(user); +uschar * p = Ustrchr(u, '@'); +uschar * d = NULL; +uschar * domain; if (p) { @@ -1493,33 +1517,33 @@ if (p) *p = '\0'; } -else domain = d = strdup((cf & 0x1)? - CCS GetUnicodeString(challenge, uDomain) : - CCS GetString(challenge, uDomain)); +else domain = d = string_copy(cf & 0x1 + ? CUS get_challenge_unistr(challenge, &challenge->uDomain) + : CUS get_challenge_str(challenge, &challenge->uDomain)); -spa_smb_encrypt (US password, challenge->challengeData, lmRespData); -spa_smb_nt_encrypt (US password, challenge->challengeData, ntRespData); +spa_smb_encrypt(password, challenge->challengeData, lmRespData); +spa_smb_nt_encrypt(password, challenge->challengeData, ntRespData); response->bufIndex = 0; memcpy (response->ident, "NTLMSSP\0\0\0", 8); SIVAL (&response->msgType, 0, 3); -spa_bytes_add (response, lmResponse, lmRespData, (cf & 0x200) ? 24 : 0); -spa_bytes_add (response, ntResponse, ntRespData, (cf & 0x8000) ? 24 : 0); +spa_bytes_add(response, lmResponse, lmRespData, cf & 0x200 ? 24 : 0); +spa_bytes_add(response, ntResponse, ntRespData, cf & 0x8000 ? 24 : 0); if (cf & 0x1) { /* Unicode Text */ - spa_unicode_add_string (response, uDomain, domain); - spa_unicode_add_string (response, uUser, u); - spa_unicode_add_string (response, uWks, u); + spa_unicode_add_string(response, uDomain, domain); + spa_unicode_add_string(response, uUser, u); + spa_unicode_add_string(response, uWks, u); } else { /* OEM Text */ - spa_string_add (response, uDomain, domain); - spa_string_add (response, uUser, u); - spa_string_add (response, uWks, u); + spa_string_add(response, uDomain, domain); + spa_string_add(response, uUser, u); + spa_string_add(response, uWks, u); } -spa_string_add (response, sessionKey, NULL); +spa_string_add(response, sessionKey, NULL); response->flags = challenge->flags; - -if (d != NULL) free (d); -free (u); } + + +#endif /*!MACRO_PREDEF*/ diff --git a/src/src/auths/auth-spa.h b/src/src/auths/auth-spa.h index db93891ab..629f50af5 100644 --- a/src/src/auths/auth-spa.h +++ b/src/src/auths/auth-spa.h @@ -9,6 +9,7 @@ * All the code used here was torn by Marc Prud'hommeaux out of the * Samba project (by Andrew Tridgell, Jeremy Allison, and others). */ +/* Copyright (c) The Exim Maintainers 2023 */ /* SPDX-License-Identifier: GPL-2.0-or-later */ /* December 2004: The spa_base64_to_bits() function has no length checking in @@ -80,10 +81,10 @@ typedef struct void spa_bits_to_base64 (unsigned char *, const unsigned char *, int); int spa_base64_to_bits(char *, int, const char *); -void spa_build_auth_response (SPAAuthChallenge *challenge, - SPAAuthResponse *response, char *user, char *password); -void spa_build_auth_request (SPAAuthRequest *request, char *user, - char *domain); +void spa_build_auth_response (SPAAuthChallenge * challenge, + SPAAuthResponse * response, uschar * user, uschar * password); +void spa_build_auth_request (SPAAuthRequest * request, uschar * user, + uschar * domain); extern void spa_smb_encrypt (unsigned char * passwd, unsigned char * c8, unsigned char * p24); extern void spa_smb_nt_encrypt (unsigned char * passwd, unsigned char * c8, diff --git a/src/src/auths/check_serv_cond.c b/src/src/auths/check_serv_cond.c index 1b0430ab1..16aeebdcb 100644 --- a/src/src/auths/check_serv_cond.c +++ b/src/src/auths/check_serv_cond.c @@ -2,6 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ +/* Copyright (c) The Exim Maintainers 2023 */ /* Copyright (c) University of Cambridge 1995 - 2012 */ /* See the file NOTICE for conditions of use and distribution. */ /* SPDX-License-Identifier: GPL-2.0-or-later */ diff --git a/src/src/auths/cram_md5.c b/src/src/auths/cram_md5.c index 583080211..6d31d4b1d 100644 --- a/src/src/auths/cram_md5.c +++ b/src/src/auths/cram_md5.c @@ -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 */ @@ -13,15 +13,17 @@ in the MD5 computation functions, without their own stand-alone main program. */ #ifdef STAND_ALONE -#define CRAM_STAND_ALONE -#include "md5.c" +# define CRAM_STAND_ALONE +# include "md5.c" /* This is the normal, non-stand-alone case */ #else -#include "../exim.h" -#include "cram_md5.h" +# include "../exim.h" + +# ifdef AUTH_CRAM_MD5 +# include "cram_md5.h" /* Options specific to the cram_md5 authentication mechanism. */ @@ -49,7 +51,7 @@ auth_cram_md5_options_block auth_cram_md5_option_defaults = { }; -#ifdef MACRO_PREDEF +# ifdef MACRO_PREDEF /* Dummy values */ void auth_cram_md5_init(auth_instance *ablock) {} @@ -57,7 +59,7 @@ int auth_cram_md5_server(auth_instance *ablock, uschar *data) {return 0;} int auth_cram_md5_client(auth_instance *ablock, void *sx, int timeout, uschar *buffer, int buffsize) {return 0;} -#else /*!MACRO_PREDEF*/ +# else /*!MACRO_PREDEF*/ /************************************************* @@ -81,8 +83,9 @@ if (ob->client_secret != NULL) } } -#endif /*!MACRO_PREDEF*/ -#endif /* STAND_ALONE */ +# endif /*!MACRO_PREDEF*/ +# endif /*AUTH_CRAM_MD5*/ +#endif /*!STAND_ALONE*/ @@ -154,7 +157,8 @@ md5_end(&base, md5secret, 16, digestptr); } -#ifndef STAND_ALONE +# ifndef STAND_ALONE +# ifdef AUTH_CRAM_MD5 /************************************************* * Server entry point * @@ -194,7 +198,7 @@ The former is now the preferred variable; the latter is the original one. Then check that the remaining length is 32. */ auth_vars[0] = expand_nstring[1] = clear; -while (*clear && !isspace(*clear)) clear++; +Uskip_nonwhite(&clear); if (!isspace(*clear)) return FAIL; *clear++ = 0; @@ -329,7 +333,8 @@ if (smtp_write_command(sx, SCMD_FLUSH, "%s\r\n", b64encode(CUS big_buffer, return smtp_read_response(sx, US buffer, buffsize, '2', timeout) ? OK : FAIL; } -#endif /* STAND_ALONE */ +# endif /*AUTH_CRAM_MD5*/ +# endif /*!STAND_ALONE*/ /************************************************* @@ -338,7 +343,7 @@ return smtp_read_response(sx, US buffer, buffsize, '2', timeout) ************************************************** *************************************************/ -#ifdef STAND_ALONE +# ifdef STAND_ALONE int main(int argc, char **argv) { @@ -355,7 +360,7 @@ printf("\n"); return 0; } -#endif +# endif /*STAND_ALONE*/ #endif /*!MACRO_PREDEF*/ /* End of cram_md5.c */ diff --git a/src/src/auths/cyrus_sasl.c b/src/src/auths/cyrus_sasl.c index a3d3906b8..8488fba19 100644 --- a/src/src/auths/cyrus_sasl.c +++ b/src/src/auths/cyrus_sasl.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) The Exim Maintainers 2020 - 2022 */ +/* Copyright (c) The Exim Maintainers 2020 - 2023 */ /* 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 */ diff --git a/src/src/auths/dovecot.c b/src/src/auths/dovecot.c index 85d029c9c..8b80f2c3f 100644 --- a/src/src/auths/dovecot.c +++ b/src/src/auths/dovecot.c @@ -1,5 +1,5 @@ /* - * Copyright (c) The Exim Maintainers 2006 - 2022 + * Copyright (c) The Exim Maintainers 2006 - 2024 * Copyright (c) 2004 Andrey Panin * SPDX-License-Identifier: GPL-2.0-or-later * @@ -23,6 +23,8 @@ because using C buffered I/O gives problems on some operating systems. PH */ */ #include "../exim.h" + +#ifdef AUTH_DOVECOT /* Remainder of file */ #include "dovecot.h" #define VERSION_MAJOR 1 @@ -533,4 +535,6 @@ return ret; } -#endif /*!MACRO_PREDEF*/ +#endif /*!MACRO_PREDEF*/ +#endif /*AUTH_DOVECOT*/ +/* end of auths/dovecot.c */ diff --git a/src/src/auths/external.c b/src/src/auths/external.c index 078aad0fa..a8e04310f 100644 --- a/src/src/auths/external.c +++ b/src/src/auths/external.c @@ -2,6 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ +/* 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 */ @@ -13,6 +14,8 @@ method defined in RFC 4422 Appendix A. #include "../exim.h" + +#ifdef AUTH_EXTERNAL /* Remainder of file */ #include "external.h" /* Options specific to the external authentication mechanism. */ @@ -104,7 +107,7 @@ if (expand_nmax == 0) /* skip if rxd data */ if (ob->server_param2) { uschar * s = expand_string(ob->server_param2); - auth_vars[expand_nmax] = s; + auth_vars[expand_nmax = 1] = s; expand_nstring[++expand_nmax] = s; expand_nlength[expand_nmax] = Ustrlen(s); if (ob->server_param3) @@ -152,5 +155,6 @@ return OK; -#endif /*!MACRO_PREDEF*/ +#endif /*!MACRO_PREDEF*/ +#endif /*AUTH_EXTERNAL*/ /* End of external.c */ diff --git a/src/src/auths/get_data.c b/src/src/auths/get_data.c index b52de6aba..4b79cbfa4 100644 --- a/src/src/auths/get_data.c +++ b/src/src/auths/get_data.c @@ -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 */ diff --git a/src/src/auths/get_no64_data.c b/src/src/auths/get_no64_data.c index ae11ae5dc..3f9ac2f3c 100644 --- a/src/src/auths/get_no64_data.c +++ b/src/src/auths/get_no64_data.c @@ -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 */ diff --git a/src/src/auths/gsasl_exim.c b/src/src/auths/gsasl_exim.c index 2c39d0f21..07b91e790 100644 --- a/src/src/auths/gsasl_exim.c +++ b/src/src/auths/gsasl_exim.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) The Exim Maintainers 2019 - 2022 */ +/* Copyright (c) The Exim Maintainers 2019 - 2023 */ /* 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 */ diff --git a/src/src/auths/heimdal_gssapi.c b/src/src/auths/heimdal_gssapi.c index 59884ef58..686b2d98d 100644 --- a/src/src/auths/heimdal_gssapi.c +++ b/src/src/auths/heimdal_gssapi.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) The Exim Maintainers 2020 - 2022 */ +/* Copyright (c) The Exim Maintainers 2020 - 2023 */ /* 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 */ diff --git a/src/src/auths/plaintext.c b/src/src/auths/plaintext.c index 1392b369f..7f59e4c7d 100644 --- a/src/src/auths/plaintext.c +++ b/src/src/auths/plaintext.c @@ -2,12 +2,14 @@ * 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 */ #include "../exim.h" + +#ifdef AUTH_PLAINTEXT /* Remainder of file */ #include "plaintext.h" @@ -176,5 +178,6 @@ while ((s = string_nextinlist(&text, &sep, NULL, 0))) return FAIL; } -#endif /*!MACRO_PREDEF*/ +#endif /*!MACRO_PREDEF*/ +#endif /*AUTH_PLAINTEST*/ /* End of plaintext.c */ diff --git a/src/src/auths/spa.c b/src/src/auths/spa.c index 222ccea86..7ec3974e1 100644 --- a/src/src/auths/spa.c +++ b/src/src/auths/spa.c @@ -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 */ @@ -34,6 +34,8 @@ References: #include "../exim.h" + +#ifdef AUTH_SPA /* Remainder of file */ #include "spa.h" /* #define DEBUG_SPA */ @@ -285,14 +287,13 @@ SPAAuthRequest request; SPAAuthChallenge challenge; SPAAuthResponse response; char msgbuf[2048]; -char *domain = NULL; -char *username, *password; +uschar * domain = NULL, * username, * password; /* Code added by PH to expand the options */ *buffer = 0; /* Default no message when cancelled */ -if (!(username = CS expand_string(ob->spa_username))) +if (!(username = expand_string(ob->spa_username))) { if (f.expand_string_forcedfail) return CANCELLED; string_format(buffer, buffsize, "expansion of \"%s\" failed in %s " @@ -301,7 +302,7 @@ if (!(username = CS expand_string(ob->spa_username))) return ERROR; } -if (!(password = CS expand_string(ob->spa_password))) +if (!(password = expand_string(ob->spa_password))) { if (f.expand_string_forcedfail) return CANCELLED; string_format(buffer, buffsize, "expansion of \"%s\" failed in %s " @@ -311,7 +312,7 @@ if (!(password = CS expand_string(ob->spa_password))) } if (ob->spa_domain) - if (!(domain = CS expand_string(ob->spa_domain))) + if (!(domain = expand_string(ob->spa_domain))) { if (f.expand_string_forcedfail) return CANCELLED; string_format(buffer, buffsize, "expansion of \"%s\" failed in %s " @@ -331,7 +332,7 @@ if (!smtp_read_response(sx, US buffer, buffsize, '3', timeout)) DSPA("\n\n%s authenticator: using domain %s\n\n", ablock->name, domain); -spa_build_auth_request(&request, CS username, domain); +spa_build_auth_request(&request, username, domain); spa_bits_to_base64(US msgbuf, US &request, spa_request_length(&request)); DSPA("\n\n%s authenticator: sending request (%s)\n\n", ablock->name, msgbuf); @@ -348,7 +349,7 @@ if (!smtp_read_response(sx, US buffer, buffsize, '3', timeout)) DSPA("\n\n%s authenticator: challenge (%s)\n\n", ablock->name, buffer + 4); spa_base64_to_bits(CS (&challenge), sizeof(challenge), CCS (buffer + 4)); -spa_build_auth_response(&challenge, &response, CS username, CS password); +spa_build_auth_response(&challenge, &response, username, password); spa_bits_to_base64(US msgbuf, US &response, spa_request_length(&response)); DSPA("\n\n%s authenticator: challenge response (%s)\n\n", ablock->name, msgbuf); @@ -373,5 +374,6 @@ if (errno != 0 || buffer[0] != '3') return FAIL; } -#endif /*!MACRO_PREDEF*/ +#endif /*!MACRO_PREDEF*/ +#endif /*AUTH_SPA*/ /* End of spa.c */ diff --git a/src/src/auths/tls.c b/src/src/auths/tls.c index 72ad56c4e..85b9a6722 100644 --- a/src/src/auths/tls.c +++ b/src/src/auths/tls.c @@ -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 */ @@ -12,6 +13,8 @@ a server to verify a client SSL certificate #include "../exim.h" + +#ifdef AUTH_TLS /* Remainder of file */ #include "tls.h" /* Options specific to the tls authentication mechanism. */ @@ -91,5 +94,6 @@ return auth_check_serv_cond(ablock); } -#endif /*!MACRO_PREDEF*/ +#endif /*!MACRO_PREDEF*/ +#endif /*AUTH_TLS*/ /* End of tls.c */ diff --git a/src/src/auths/xtextdecode.c b/src/src/auths/xtextdecode.c index edd2282d0..d261801ae 100644 --- a/src/src/auths/xtextdecode.c +++ b/src/src/auths/xtextdecode.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) The Exim Maintainers 2022 */ +/* Copyright (c) The Exim Maintainers 2022 - 2023 */ /* 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 */ diff --git a/src/src/auths/xtextencode.c b/src/src/auths/xtextencode.c index c08288831..04cd302de 100644 --- a/src/src/auths/xtextencode.c +++ b/src/src/auths/xtextencode.c @@ -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 */ @@ -29,31 +29,16 @@ Returns: a pointer to the zero-terminated xtext string, which uschar * auth_xtextencode(uschar *clear, int len) { -uschar *code; -uschar *p = US clear; -uschar *pp; -int c = len; -int count = 1; -register int x; - -/* We have to do a prepass to find out how many specials there are, -in order to get the right amount of store. */ - -while (c -- > 0) - count += ((x = *p++) < 33 || x > 127 || x == '+' || x == '=')? 3 : 1; - -pp = code = store_get(count, clear); - -p = US clear; -c = len; -while (c-- > 0) - if ((x = *p++) < 33 || x > 127 || x == '+' || x == '=') - pp += sprintf(CS pp, "+%.02x", x); /* There's always room */ - else - *pp++ = x; - -*pp = 0; -return code; +gstring * g = NULL; +for(uschar ch; len > 0; len--, clear++) + g = (ch = *clear) < 33 || ch > 126 || ch == '+' || ch == '=' + ? string_fmt_append(g, "+%.02X", ch) + : string_catn(g, clear, 1); +gstring_release_unused(g); +return string_from_gstring(g); } + /* End of xtextencode.c */ +/* vi: aw ai sw=2 +*/ diff --git a/src/src/base64.c b/src/src/base64.c index 591ea3d5b..f14ecc30a 100644 --- a/src/src/base64.c +++ b/src/src/base64.c @@ -2,12 +2,12 @@ * Exim - an Internet mail transport agent * *************************************************/ +/* Copyright (c) The Exim Maintainers 2020 - 2023 */ +/* Copyright (c) University of Cambridge 1995 - 2018 */ /* Copyright (c) Tom Kistner 2004, 2015 */ /* License: GPL */ /* SPDX-License-Identifier: GPL-2.0-or-later */ -/* Copyright (c) University of Cambridge 1995 - 2018 */ -/* Copyright (c) The Exim Maintainers 2020 - 2022 */ /* See the file NOTICE for conditions of use and distribution. */ diff --git a/src/src/buildconfig.c b/src/src/buildconfig.c index 8f37e508a..bfd267929 100644 --- a/src/src/buildconfig.c +++ b/src/src/buildconfig.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) The Exim Maintainers 2022 */ +/* Copyright (c) The Exim Maintainers 2022 - 2023 */ /* 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 */ @@ -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); } diff --git a/src/src/config.h.defaults b/src/src/config.h.defaults index fb5fe3603..13b203e80 100644 --- a/src/src/config.h.defaults +++ b/src/src/config.h.defaults @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) The Exim Maintainers 2018 - 2022 */ +/* Copyright (c) The Exim Maintainers 2018 - 2024 */ /* Copyright (c) University of Cambridge 1995 - 2018 */ /* See the file NOTICE for conditions of use and distribution. */ @@ -51,6 +51,7 @@ Do not put spaces between # and the 'define'. #define DISABLE_D_OPTION #define DISABLE_DNSSEC #define DISABLE_DKIM +#define DISABLE_ESMTP_LIMITS #define DISABLE_EVENT #define DISABLE_OCSP #define DISABLE_PIPE_CONNECT @@ -58,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 @@ -186,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 @@ -209,7 +212,6 @@ Do not put spaces between # and the 'define'. #define EXPERIMENTAL_BRIGHTMAIL #define EXPERIMENTAL_DCC #define EXPERIMENTAL_DSN_INFO -#define EXPERIMENTAL_ESMTP_LIMITS #define EXPERIMENTAL_QUEUEFILE #define EXPERIMENTAL_XCLIENT diff --git a/src/src/daemon.c b/src/src/daemon.c index b0938cbaa..16137f9f6 100644 --- a/src/src/daemon.c +++ b/src/src/daemon.c @@ -2,8 +2,8 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) The Exim Maintainers 2020 - 2022 */ -/* Copyright (c) University of Cambridge 1995 - 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 */ @@ -298,9 +298,10 @@ to provide host-specific limits according to $sender_host address, but because this is in the daemon mainline, only fast expansions (such as inline address checks) should be used. The documentation is full of warnings. */ +GET_OPTION("smtp_accept_max_per_host"); if (smtp_accept_max_per_host) { - uschar *expanded = expand_string(smtp_accept_max_per_host); + uschar * expanded = expand_string(smtp_accept_max_per_host); if (!expanded) { if (!f.expand_string_forcedfail) @@ -310,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) @@ -319,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) { @@ -434,6 +435,7 @@ if (pid == 0) likely what it depends on.) */ smtp_active_hostname = primary_hostname; + GET_OPTION("smtp_active_hostname"); if (raw_active_hostname) { uschar * nah = expand_string(raw_active_hostname); @@ -918,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 */ @@ -1165,6 +1167,7 @@ return offsetof(struct sockaddr_un, sun_path) ssize_t daemon_notifier_sockname(struct sockaddr_un * sup) { +GET_OPTION("notifier_socket"); #ifdef EXIM_HAVE_ABSTRACT_UNIX_SOCKETS sup->sun_path[0] = 0; /* Abstract local socket addr - Linux-specific? */ return offsetof(struct sockaddr_un, sun_path) + 1 @@ -1258,10 +1261,9 @@ static const uschar * queuerun_msg_qname; /* The notifier socket has something to read. Pull the message from it, decode and do the action. +*/ -Return TRUE if a sigalrm should be emulated */ - -static BOOL +static void daemon_notification(void) { uschar buf[256], cbuf[256]; @@ -1277,8 +1279,8 @@ struct msghdr msg = { .msg_name = &sa_un, ssize_t sz; buf[sizeof(buf)-1] = 0; -if ((sz = recvmsg(daemon_notifier_fd, &msg, 0)) <= 0) return FALSE; -if (sz >= sizeof(buf)) return FALSE; +if ((sz = recvmsg(daemon_notifier_fd, &msg, 0)) <= 0) return; +if (sz >= sizeof(buf)) return; #ifdef notdef debug_printf("addrlen %d\n", msg.msg_namelen); @@ -1351,7 +1353,7 @@ switch (buf[0]) : !buf[1+MESSAGE_ID_LENGTH+1] ) { queuerun_msg_qname = q->name; break; } - return TRUE; + return; #endif case NOTIFY_QUEUE_SIZE_REQ: @@ -1373,7 +1375,7 @@ switch (buf[0]) regex_at_daemon(buf); break; } -return FALSE; +return; } @@ -1432,7 +1434,7 @@ for (qrunner * q = qrunners, * next; q; q = next) if (sorted) { qrunner ** p = &sorted; - for (qrunner * qq; qq = *p; p = &(qq->next)) + for (qrunner * qq; qq = *p; p = &qq->next) if ( q->next_tick < qq->next_tick || q->next_tick == qq->next_tick && q->interval < qq->interval ) @@ -1451,6 +1453,13 @@ qrunners = sorted; return qrunners ? qrunners->next_tick - time(NULL) : 0; } +/* See if we can do a queue run. If policy limit permit, kick one off. +If both notification and timer events are present, handle the former +and leave the timer outstanding. + +Return the number of seconds until the next due runner. +*/ + static int daemon_qrun(int local_queue_run_max, struct pollfd * fd_polls, int listen_socket_count) { @@ -1464,13 +1473,16 @@ DEBUG(D_any) debug_printf("%s received\n", enough queue runners on the go. If we are not running as root, a re-exec is required. In the calling process, restart the alamr timer for the next run. */ -if (is_multiple_qrun()) +if (is_multiple_qrun()) /* we are managing periodic runs */ if (local_queue_run_max <= 0 || queue_run_count < local_queue_run_max) { qrunner * q = NULL; #ifndef DISABLE_QUEUE_RAMP - if (*queuerun_msgid) /* See if we can start another runner for this queue */ + /* If this is a triggered run for a specific message, see if we can start + another runner for this queue. */ + + if (*queuerun_msgid) { for (qrunner * qq = qrunners; qq; qq = qq->next) if (qq->name == queuerun_msg_qname) @@ -1481,13 +1493,13 @@ if (is_multiple_qrun()) } else #endif - /* In order of run priority, find the first queue for which we can start - a runner */ + /* Normal periodic run: in order of run priority, find the first queue + for which we can start a runner */ for (q = qrunners; q; q = q->next) if (q->run_count < q->run_max) break; - if (q) + if (q) /* found a queue to run */ { pid_t pid; @@ -1619,19 +1631,23 @@ if (is_multiple_qrun()) } } -sigalrm_seen = FALSE; +/* The queue run has been initiated (unless we were already running enough) */ + #ifndef DISABLE_QUEUE_RAMP -if (*queuerun_msgid) /* it was a fast-ramp kick */ +if (*queuerun_msgid) /* it was a fast-ramp kick; dealt with */ *queuerun_msgid = 0; else /* periodic or one-time queue run */ #endif - { /* Impose a minimum 1s tick, even when a run was outstanding */ + /* Set up next timer callback. Impose a minimum 1s tick, + even when a run was outstanding */ + { int interval = next_qrunner_interval(); if (interval <= 0) interval = 1; + sigalrm_seen = FALSE; if (qrunners) /* there are still periodic qrunners */ { - ALARM(interval); + ALARM(interval); /* set up next qrun tick */ return interval; } } @@ -1641,7 +1657,7 @@ return 0; -const uschar * +static const uschar * describe_queue_runners(void) { gstring * g = NULL; @@ -1651,6 +1667,7 @@ if (!is_multiple_qrun()) return US"no queue runs"; for (qrunner * q = qrunners; q; q = q->next) { g = string_catn(g, US"-q", 2); + if (q->queue_2stage) g = string_catn(g, US"q", 1); if (q->name) g = string_append(g, 3, US"G", q->name, US"/"); g = string_cat(g, readconf_printtime(q->interval)); g = string_catn(g, US" ", 1); @@ -1695,12 +1712,13 @@ time_t last_connection_time = (time_t)0; int local_queue_run_max = 0; if (is_multiple_qrun()) - + { /* Nuber of runner-tracking structs needed: If the option queue_run_max has no expandable elements then it is the overall maximum; else we assume it depends on the queue name, and add them up to get the maximum. Evaluate both that and the individual limits. */ + GET_OPTION("queue_run_max"); if (Ustrchr(queue_run_max, '$') != NULL) { for (qrunner * q = qrunners; q; q = q->next) @@ -1717,6 +1735,7 @@ if (is_multiple_qrun()) for (qrunner * q = qrunners; q; q = q->next) q->run_max = local_queue_run_max; } + } process_purpose = US"daemon"; @@ -2138,7 +2157,7 @@ if (f.background_daemon) pid_t pid = exim_fork(US"daemon"); if (pid < 0) log_write(0, LOG_MAIN|LOG_PANIC_DIE, "fork() failed when starting daemon: %s", strerror(errno)); - if (pid > 0) exit(EXIT_SUCCESS); /* in parent process, just exit */ + if (pid > 0) exim_exit(EXIT_SUCCESS); /* in parent process, just exit */ (void)setsid(); /* release controlling terminal */ f.daemon_listen = daemon_listen; } @@ -2612,7 +2631,7 @@ for (;;) The other option is that we have an inetd wait timeout specified to -bw. */ - if (sigalrm_seen) + if (sigalrm_seen || *queuerun_msgid) if (inetd_wait_timeout > 0) daemon_inetd_wtimeout(last_connection_time); /* Might not return */ else @@ -2641,7 +2660,9 @@ for (;;) select() was interrupted so that we reap the child. This might still leave a small window when a SIGCHLD could get lost. However, since we use SIGCHLD only to do the reaping more quickly, it shouldn't result in anything other - than a delay until something else causes a wake-up. */ + than a delay until something else causes a wake-up. + For the normal case, wait for either a pollable fd (eg. new connection) or + or a SIGALRM (for a periodic queue run) */ if (sigchld_seen) { @@ -2706,10 +2727,13 @@ for (;;) break; /* to top of daemon loop */ } #endif + /* Handle the daemon-notifier socket. If it was a fast-ramp + notification then queuerun_msgid will have a nonzerolength string. */ + if (dnotify_poll && dnotify_poll->revents & POLLIN) { dnotify_poll->revents = 0; - sigalrm_seen = daemon_notification(); + daemon_notification(); break; /* to top of daemon loop */ } for (struct pollfd * p = fd_polls; p < fd_polls + listen_socket_count; diff --git a/src/src/dbfn.c b/src/src/dbfn.c index 3c51162a4..2b5ec908b 100644 --- a/src/src/dbfn.c +++ b/src/src/dbfn.c @@ -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/ */ 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 +*/ @@ -43,6 +61,68 @@ arrange to hold the locks for the bare minimum of time. */ * Open and lock a database file * *************************************************/ +/* Ensure the directory for the DB is present */ + +static inline void +db_dir_make(BOOL panic) +{ +(void) directory_make(spool_directory, US"db", EXIMDB_DIRECTORY_MODE, panic); +} + + +/* Lock a file to protect the DB. Return TRUE for success */ + +static inline BOOL +lockfile_take(open_db * dbblock, const uschar * filename, BOOL rdonly, BOOL panic) +{ +flock_t lock_data; +int rc, * fdp = &dbblock->lockfd; + +priv_drop_temp(exim_uid, exim_gid); +if ((*fdp = Uopen(filename, O_RDWR, EXIMDB_LOCKFILE_MODE)) < 0) + { + db_dir_make(panic); + *fdp = Uopen(filename, O_RDWR|O_CREAT, EXIMDB_LOCKFILE_MODE); + } +priv_restore(); + +if (*fdp < 0) + { + log_write(0, LOG_MAIN, "%s", + string_open_failed("database lock file %s", filename)); + errno = 0; /* Indicates locking failure */ + return FALSE; + } + +/* Now we must get a lock on the opened lock file; do this with a blocking +lock that times out. */ + +lock_data.l_type = rdonly ? F_RDLCK : F_WRLCK; +lock_data.l_whence = lock_data.l_start = lock_data.l_len = 0; + +DEBUG(D_hints_lookup|D_retry|D_route|D_deliver) + debug_printf_indent("locking %s\n", filename); + +sigalrm_seen = FALSE; +ALARM(EXIMDB_LOCK_TIMEOUT); +rc = fcntl(*fdp, F_SETLKW, &lock_data); +ALARM_CLR(0); + +if (sigalrm_seen) errno = ETIMEDOUT; +if (rc < 0) + { + log_write(0, LOG_MAIN|LOG_PANIC, "Failed to get %s lock for %s: %s", + rdonly ? "read" : "write", filename, + errno == ETIMEDOUT ? "timed out" : strerror(errno)); + (void)close(*fdp); *fdp = -1; + errno = 0; /* Indicates locking failure */ + return FALSE; + } + +DEBUG(D_hints_lookup) debug_printf_indent("locked %s\n", filename); +return TRUE; +} + /* Used for accessing Exim's hints databases. Arguments: @@ -59,17 +139,13 @@ 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; flock_t lock_data; uschar dirname[PATHLEN], filename[PATHLEN]; @@ -91,51 +167,18 @@ exists, there is no error. */ snprintf(CS dirname, sizeof(dirname), "%s/db", spool_directory); snprintf(CS filename, sizeof(filename), "%s/%s.lockfile", dirname, name); -priv_drop_temp(exim_uid, exim_gid); -if ((dbblock->lockfd = Uopen(filename, O_RDWR, EXIMDB_LOCKFILE_MODE)) < 0) - { - (void)directory_make(spool_directory, US"db", EXIMDB_DIRECTORY_MODE, panic); - dbblock->lockfd = Uopen(filename, O_RDWR|O_CREAT, EXIMDB_LOCKFILE_MODE); - } -priv_restore(); - -if (dbblock->lockfd < 0) +dbblock->lockfd = -1; +if (!exim_lockfile_needed()) + db_dir_make(panic); +else { - log_write(0, LOG_MAIN, "%s", - string_open_failed("database lock file %s", filename)); - errno = 0; /* Indicates locking failure */ - DEBUG(D_hints_lookup) acl_level--; - return NULL; - } - -/* Now we must get a lock on the opened lock file; do this with a blocking -lock that times out. */ - -lock_data.l_type = read_only? F_RDLCK : F_WRLCK; -lock_data.l_whence = lock_data.l_start = lock_data.l_len = 0; - -DEBUG(D_hints_lookup|D_retry|D_route|D_deliver) - debug_printf_indent("locking %s\n", filename); - -sigalrm_seen = FALSE; -ALARM(EXIMDB_LOCK_TIMEOUT); -rc = fcntl(dbblock->lockfd, F_SETLKW, &lock_data); -ALARM_CLR(0); - -if (sigalrm_seen) errno = ETIMEDOUT; -if (rc < 0) - { - log_write(0, LOG_MAIN|LOG_PANIC, "Failed to get %s lock for %s: %s", - read_only ? "read" : "write", filename, - errno == ETIMEDOUT ? "timed out" : strerror(errno)); - (void)close(dbblock->lockfd); - errno = 0; /* Indicates locking failure */ - DEBUG(D_hints_lookup) acl_level--; - return NULL; + if (!lockfile_take(dbblock, filename, flags == O_RDONLY, panic)) + { + DEBUG(D_hints_lookup) acl_level--; + return NULL; + } } -DEBUG(D_hints_lookup) debug_printf_indent("locked %s\n", filename); - /* 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. If we are expected to create it, don't do so at first, again so that we can detect @@ -145,6 +188,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); @@ -173,6 +217,7 @@ if (!dbblock->dbptr) debug_printf_indent("%s\n", CS string_open_failed("DB file %s", filename)); (void)close(dbblock->lockfd); + dbblock->lockfd = -1; errno = save_errno; DEBUG(D_hints_lookup) acl_level--; return NULL; @@ -182,7 +227,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 @@ -199,7 +243,7 @@ return dbblock; *************************************************/ /* Closing a file automatically unlocks it, so after closing the database, just -close the lock file. +close the lock file if there was one. Argument: a pointer to an open database block Returns: nothing @@ -208,10 +252,17 @@ Returns: nothing void dbfn_close(open_db *dbblock) { +int * fdp = &dbblock->lockfd; + exim_dbclose(dbblock->dbptr); -(void)close(dbblock->lockfd); +if (*fdp >= 0) (void)close(*fdp); DEBUG(D_hints_lookup) - { debug_printf_indent("closed hints database and lockfile\n"); acl_level--; } + { + debug_printf_indent("closed hints database%s\n", + *fdp < 0 ? "" : " and lockfile"); + acl_level--; + } +*fdp = -1; } @@ -239,12 +290,13 @@ Returns: a pointer to the retrieved record, or */ void * -dbfn_read_with_length(open_db *dbblock, const uschar *key, int *length) +dbfn_read_with_length(open_db * dbblock, const uschar * key, int * length) { -void *yield; +void * yield; EXIM_DATUM key_datum, result_datum; int klen = Ustrlen(key) + 1; uschar * key_copy = store_get(klen, key); +unsigned dlen; memcpy(key_copy, key, klen); @@ -255,14 +307,20 @@ 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. */ -yield = store_get(exim_datum_size_get(&result_datum), GET_TAINTED); -memcpy(yield, exim_datum_data_get(&result_datum), exim_datum_size_get(&result_datum)); -if (length) *length = exim_datum_size_get(&result_datum); +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 */ return yield; @@ -324,7 +382,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. */ @@ -367,6 +426,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 * *************************************************/ @@ -406,6 +470,7 @@ yield = exim_dbscan(dbblock->dbptr, &key_datum, &value_datum, start, *cursor) if (!yield) exim_dbdelete_cursor(*cursor); return yield; } +#endif @@ -488,7 +553,7 @@ while (Ufgets(buffer, 256, stdin) != NULL) { count = Uatoi(cmd); while (isdigit((uschar)*cmd)) cmd++; - while (isspace((uschar)*cmd)) cmd++; + Uskip_whitespace(&cmd); } if (Ustrncmp(cmd, "open", 4) == 0) @@ -496,7 +561,7 @@ while (Ufgets(buffer, 256, stdin) != NULL) int i; open_db *odb; uschar *s = cmd + 4; - while (isspace((uschar)*s)) s++; + Uskip_whitespace(&s); for (i = 0; i < max_db; i++) if (dbblock[i].dbptr == NULL) break; @@ -532,8 +597,7 @@ while (Ufgets(buffer, 256, stdin) != NULL) else if (Ustrncmp(cmd, "write", 5) == 0) { int rc = 0; - uschar *key = cmd + 5; - uschar *data; + uschar * key = cmd + 5, * data; if (current < 0) { @@ -541,11 +605,11 @@ while (Ufgets(buffer, 256, stdin) != NULL) continue; } - while (isspace((uschar)*key)) key++; + Uskip_whitespace(&key); data = key; - while (*data != 0 && !isspace((uschar)*data)) data++; - *data++ = 0; - while (isspace((uschar)*data)) data++; + Uskip_nonwhite(&data); + *data++ = '\0'; + Uskip_whitespace(&data); dbwait = (dbdata_wait *)(&structbuffer); Ustrcpy(dbwait->text, data); @@ -560,13 +624,13 @@ while (Ufgets(buffer, 256, stdin) != NULL) else if (Ustrncmp(cmd, "read", 4) == 0) { - uschar *key = cmd + 4; + uschar * key = cmd + 4; if (current < 0) { printf("No current database\n"); continue; } - while (isspace((uschar)*key)) key++; + Uskip_whitespace(&key); start = clock(); while (count-- > 0) dbwait = (dbdata_wait *)dbfn_read_with_length(dbblock+ current, key, NULL); @@ -576,13 +640,13 @@ while (Ufgets(buffer, 256, stdin) != NULL) else if (Ustrncmp(cmd, "delete", 6) == 0) { - uschar *key = cmd + 6; + uschar * key = cmd + 6; if (current < 0) { printf("No current database\n"); continue; } - while (isspace((uschar)*key)) key++; + Uskip_whitespace(&key); dbfn_delete(dbblock + current, key); } @@ -612,8 +676,8 @@ while (Ufgets(buffer, 256, stdin) != NULL) else if (Ustrncmp(cmd, "close", 5) == 0) { - uschar *s = cmd + 5; - while (isspace((uschar)*s)) s++; + uschar * s = cmd + 5; + Uskip_whitespace(&s); i = Uatoi(s); if (i >= max_db || dbblock[i].dbptr == NULL) printf("Not open\n"); else { @@ -627,8 +691,8 @@ while (Ufgets(buffer, 256, stdin) != NULL) else if (Ustrncmp(cmd, "file", 4) == 0) { - uschar *s = cmd + 4; - while (isspace((uschar)*s)) s++; + uschar * s = cmd + 4; + Uskip_whitespace(&s); i = Uatoi(s); if (i >= max_db || dbblock[i].dbptr == NULL) printf("Not open\n"); else current = i; @@ -680,3 +744,5 @@ return 0; #endif /* End of dbfn.c */ +/* vi: aw ai sw=2 +*/ diff --git a/src/src/dbfunctions.h b/src/src/dbfunctions.h index 1f0dec1f7..0b0bcab22 100644 --- a/src/src/dbfunctions.h +++ b/src/src/dbfunctions.h @@ -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 **); diff --git a/src/src/dcc.c b/src/src/dcc.c index e7a932426..8939bbef6 100644 --- a/src/src/dcc.c +++ b/src/src/dcc.c @@ -2,12 +2,13 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) Wolfgang Breyha 2005 - 2019 +/* + * Copyright (c) The Exim Maintainers 2015 - 2023 + * Copyright (c) Wolfgang Breyha 2005 - 2019 * Vienna University Computer Center * wbreyha@gmx.net * See the file NOTICE for conditions of use and distribution. * - * Copyright (c) The Exim Maintainers 2015 - 2022 * SPDX-License-Identifier: GPL-2.0-or-later */ diff --git a/src/src/debug.c b/src/src/debug.c index dac738470..1d48f1395 100644 --- a/src/src/debug.c +++ b/src/src/debug.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) The Exim Maintainers 2015 - 2022 */ +/* Copyright (c) The Exim Maintainers 2015 - 2023 */ /* 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 */ diff --git a/src/src/deliver.c b/src/src/deliver.c index fa624f9de..d2b2c3ab2 100644 --- a/src/src/deliver.c +++ b/src/src/deliver.c @@ -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 */ @@ -27,7 +27,7 @@ typedef struct pardata { int transport_count; /* returned transport count value */ BOOL done; /* no more data needed */ uschar *msg; /* error message */ - uschar *return_path; /* return_path for these addresses */ + const uschar *return_path; /* return_path for these addresses */ } pardata; /* Values for the process_recipients variable */ @@ -77,7 +77,7 @@ static pardata *parlist = NULL; static struct pollfd *parpoll; static int return_count; static uschar *frozen_info = US""; -static uschar *used_return_path = NULL; +static const uschar * used_return_path = NULL; @@ -144,7 +144,7 @@ Returns: a pointer to an initialized address_item */ address_item * -deliver_make_addr(uschar *address, BOOL copy) +deliver_make_addr(const uschar * address, BOOL copy) { address_item * addr = store_get(sizeof(address_item), GET_UNTAINTED); *addr = address_defaults; @@ -575,7 +575,7 @@ Returns: TRUE or FALSE */ static BOOL -same_strings(uschar *one, uschar *two) +same_strings(const uschar * one, const uschar * two) { if (one == two) return TRUE; /* Includes the case where both NULL */ if (!one || !two) return FALSE; @@ -859,9 +859,10 @@ Return: string expansion from listener, or NULL */ uschar * -event_raise(uschar * action, const uschar * event, uschar * ev_data, int * errnop) +event_raise(const uschar * action, const uschar * event, const uschar * ev_data, + int * errnop) { -uschar * s; +const uschar * s; if (action) { DEBUG(D_deliver) @@ -872,7 +873,7 @@ if (action) event_name = event; event_data = ev_data; - if (!(s = expand_string(action)) && *expand_string_message) + if (!(s = expand_cstring(action)) && *expand_string_message) log_write(0, LOG_MAIN|LOG_PANIC, "failed to expand event_action %s in %s: %s\n", event, transport_name ? transport_name : US"main", expand_string_message); @@ -880,7 +881,8 @@ if (action) event_name = event_data = NULL; /* If the expansion returns anything but an empty string, flag for - the caller to modify his normal processing + the caller to modify his normal processing. Copy the string to + de-const it. */ if (s && *s) { @@ -888,7 +890,7 @@ if (action) debug_printf("Event(%s): event_action returned \"%s\"\n", event, s); if (errnop) *errnop = ERRNO_EVENT; - return s; + return string_copy(s); } } return NULL; @@ -898,9 +900,10 @@ void msg_event_raise(const uschar * event, const address_item * addr) { const uschar * save_domain = deliver_domain; -uschar * save_local = deliver_localpart; +const uschar * save_local = deliver_localpart; const uschar * save_host = deliver_host; const uschar * save_address = deliver_host_address; +uschar * save_rn = router_name, * save_tn = transport_name; const int save_port = deliver_host_port; router_name = addr->router ? addr->router->name : NULL; @@ -937,7 +940,8 @@ deliver_host_address = save_address; deliver_host = save_host; deliver_localpart = save_local; deliver_domain = save_domain; -router_name = transport_name = NULL; +router_name = save_rn; +transport_name = save_tn; } #endif /*DISABLE_EVENT*/ @@ -950,13 +954,13 @@ router_name = transport_name = NULL; * Generate local part for logging * *************************************************/ -static uschar * -string_get_lpart_sub(const address_item * addr, uschar * s) +static const uschar * +string_get_lpart_sub(const address_item * addr, const uschar * s) { #ifdef SUPPORT_I18N if (testflag(addr, af_utf8_downcvt)) { - uschar * t = string_localpart_utf8_to_alabel(s, NULL); + const uschar * t = string_localpart_utf8_to_alabel(s, NULL); return t ? t : s; /* t is NULL on a failed conversion */ } #endif @@ -975,7 +979,7 @@ Returns: the new value of the buffer pointer static gstring * string_get_localpart(address_item * addr, gstring * yield) { -uschar * s; +const uschar * s; if (testflag(addr, af_include_affixes) && (s = addr->prefix)) yield = string_cat(yield, string_get_lpart_sub(addr, s)); @@ -1245,6 +1249,14 @@ else g = string_catn(g, US" K", 2); } +#ifndef DISABLE_DKIM + if (addr->dkim_used && LOGGING(dkim_verbose)) + { + g = string_catn(g, US" DKIM=", 6); + g = string_cat(g, addr->dkim_used); + } +#endif + /* confirmation message (SMTP (host_used) and LMTP (driver_name)) */ if ( LOGGING(smtp_confirmation) @@ -1850,8 +1862,9 @@ if (tp->gid_set) } else if (tp->expand_gid) { + GET_OPTION("group"); if (!route_find_expanded_group(tp->expand_gid, tp->name, US"transport", gidp, - &(addr->message))) + &addr->message)) { common_error(FALSE, addr, ERRNO_GIDFAIL, NULL); return FALSE; @@ -1877,6 +1890,7 @@ it does not provide a passwd value from which a gid can be taken. */ else if (tp->expand_uid) { struct passwd *pw; + GET_OPTION("user"); if (!route_find_expanded_user(tp->expand_uid, tp->name, US"transport", &pw, uidp, &(addr->message))) { @@ -1980,6 +1994,7 @@ check_message_size(transport_instance *tp, address_item *addr) int rc = OK; int size_limit; +GET_OPTION("message_size_limit"); deliver_set_expansions(addr); size_limit = expand_string_integer(tp->message_size_limit, TRUE); deliver_set_expansions(NULL); @@ -2028,7 +2043,7 @@ static BOOL previously_transported(address_item *addr, BOOL testing) { uschar * s = string_sprintf("%s/%s", - addr->unique + (testflag(addr, af_homonym)? 3:0), addr->transport->name); + addr->unique + (testflag(addr, af_homonym) ? 3:0), addr->transport->name); if (tree_search(tree_nonrecipients, s) != 0) { @@ -2142,6 +2157,7 @@ if(addr->prop.errors_address) else return_path = sender_address; +GET_OPTION("return_path"); if (tp->return_path) { uschar * new_return_path = expand_string(tp->return_path); @@ -2171,6 +2187,7 @@ if (!findugid(addr, tp, &uid, &gid, &use_initgroups)) return; home directory set in the address may already be expanded; a flag is set to indicate that. In other cases we must expand it. */ +GET_OPTION("home_directory"); if ( (deliver_home = tp->home_dir) /* Set in transport, or */ || ( (deliver_home = addr->home_dir) /* Set in address and */ && !testflag(addr, af_home_expanded) /* not expanded */ @@ -2200,6 +2217,7 @@ all users have access. It is necessary to be in a visible directory for some operating systems when running pipes, as some commands (e.g. "rm" under Solaris 2.5) require this. */ +GET_OPTION("current_directory"); working_directory = tp->current_dir ? tp->current_dir : addr->current_dir; if (working_directory) { @@ -2444,8 +2462,7 @@ if ((pid = exim_fork(US"delivery-local")) == 0) and close the pipe we were writing down before exiting. */ (void)close(pfd[pipe_write]); - search_tidyup(); - exit(EXIT_SUCCESS); + exim_exit(EXIT_SUCCESS); } /* Back in the main process: panic if the fork did not succeed. This seems @@ -2597,36 +2614,40 @@ if ((status & 0xffff) != 0) /* If SPECIAL_WARN is set in the top address, send a warning message. */ -if (addr->special_action == SPECIAL_WARN && addr->transport->warn_message) +if (addr->special_action == SPECIAL_WARN) { - int fd; - uschar *warn_message; - pid_t pid; + uschar * warn_message = addr->transport->warn_message; + GET_OPTION("quota_warn_message"); + if (warn_message) + { + int fd; + pid_t pid; - DEBUG(D_deliver) debug_printf("Warning message requested by transport\n"); + DEBUG(D_deliver) debug_printf("Warning message requested by transport\n"); - if (!(warn_message = expand_string(addr->transport->warn_message))) - log_write(0, LOG_MAIN|LOG_PANIC, "Failed to expand \"%s\" (warning " - "message for %s transport): %s", addr->transport->warn_message, - addr->transport->name, expand_string_message); + if (!(warn_message = expand_string(warn_message))) + log_write(0, LOG_MAIN|LOG_PANIC, "Failed to expand \"%s\" (warning " + "message for %s transport): %s", addr->transport->warn_message, + addr->transport->name, expand_string_message); - else if ((pid = child_open_exim(&fd, US"tpt-warning-message")) > 0) - { - FILE *f = fdopen(fd, "wb"); - if (errors_reply_to && !contains_header(US"Reply-To", warn_message)) - fprintf(f, "Reply-To: %s\n", errors_reply_to); - fprintf(f, "Auto-Submitted: auto-replied\n"); - if (!contains_header(US"From", warn_message)) - moan_write_from(f); - fprintf(f, "%s", CS warn_message); + else if ((pid = child_open_exim(&fd, US"tpt-warning-message")) > 0) + { + FILE * f = fdopen(fd, "wb"); + if (errors_reply_to && !contains_header(US"Reply-To", warn_message)) + fprintf(f, "Reply-To: %s\n", errors_reply_to); + fprintf(f, "Auto-Submitted: auto-replied\n"); + if (!contains_header(US"From", warn_message)) + moan_write_from(f); + fprintf(f, "%s", CS warn_message); - /* Close and wait for child process to complete, without a timeout. */ + /* Close and wait for child process to complete, without a timeout. */ - (void)fclose(f); - (void)child_close(pid, 0); - } + (void)fclose(f); + (void)child_close(pid, 0); + } - addr->special_action = SPECIAL_NONE; + addr->special_action = SPECIAL_NONE; + } } } @@ -2642,6 +2663,7 @@ tpt_parallel_check(transport_instance * tp, address_item * addr, uschar ** key) { unsigned max_parallel; +GET_OPTION("max_parallel"); if (!tp->max_parallel) return FALSE; max_parallel = (unsigned) expand_string_integer(tp->max_parallel, TRUE); @@ -2765,6 +2787,7 @@ while (addr_local) /* Expand the batch_id string for comparison with other addresses. Expansion failure suppresses batching. */ + GET_OPTION("batch_id"); if (tp->batch_id) { deliver_set_expansions(addr); @@ -2819,11 +2842,12 @@ while (addr_local) if (ok && batch_id) { - uschar *bid; - address_item *save_nextnext = next->next; + uschar * bid; + address_item * save_nextnext = next->next; next->next = NULL; /* Expansion for a single address */ deliver_set_expansions(next); next->next = save_nextnext; + GET_OPTION("batch_id"); bid = expand_string(tp->batch_id); deliver_set_expansions(NULL); if (!bid) @@ -3121,7 +3145,7 @@ while (addr_local) if (result == DEFER || testflag(addr2, af_lt_retry_exists)) { int flags = result == DEFER ? 0 : rf_delete; - uschar *retry_key = string_copy(tp->retry_use_local_part + uschar * retry_key = string_copy(tp->retry_use_local_part ? addr2->address_retry_key : addr2->domain_retry_key); *retry_key = 'T'; retry_add_item(addr2, retry_key, flags); @@ -3571,7 +3595,14 @@ while (!done) switch (*subid) { - case 3: /* explicit notification of continued-connection (non)use; +#ifndef DISABLE_DKIM + case '4': /* DKIM information */ + addr->dkim_used = string_copy(ptr); + while(*ptr++); + break; +#endif + + case '3': /* explicit notification of continued-connection (non)use; overrides caller's knowlege. */ if (*ptr & BIT(1)) setflag(addr, af_new_conn); else if (*ptr & BIT(2)) setflag(addr, af_cont_conn); @@ -3653,20 +3684,37 @@ while (!done) while (*ptr++) ; break; - /* Z marks the logical end of the data. It is followed by '0' if + /* Z0 marks the logical end of the data. It is followed by '0' if continue_transport was NULL at the end of transporting, otherwise '1'. We need to know when it becomes NULL during a delivery down a passed SMTP channel so that we don't try to pass anything more down it. Of course, for - most normal messages it will remain NULL all the time. */ + most normal messages it will remain NULL all the time. + + Z1 is a suggested message_id to handle next, used during a + continued-transport sequence. */ case 'Z': - if (*ptr == '0') + switch (*subid) { - continue_transport = NULL; - continue_hostname = NULL; + case '0': + if (*ptr == '0') + { + continue_transport = NULL; + continue_hostname = NULL; + } + done = TRUE; + DEBUG(D_deliver) debug_printf("Z0%c item read\n", *ptr); + break; + case '1': + if (continue_hostname) + { + Ustrncpy(continue_next_id, ptr, MESSAGE_ID_LENGTH); + continue_sequence++; + } + DEBUG(D_deliver) debug_printf("continue_next_id: %s%s\n", + continue_next_id, continue_hostname ? "" : " (ignored)"); + break; } - done = TRUE; - DEBUG(D_deliver) debug_printf("Z0%c item read\n", *ptr); break; /* Anything else is a disaster. */ @@ -4439,9 +4487,10 @@ nonmatch domains else return_path = sender_address; + GET_OPTION("return_path"); if (tp->return_path) { - uschar *new_return_path = expand_string(tp->return_path); + uschar * new_return_path = expand_string(tp->return_path); if (new_return_path) return_path = new_return_path; else if (!f.expand_string_forcedfail) @@ -4743,7 +4792,11 @@ all pipes, so I do not see a reason to use non-blocking IO here is flagged by an identifying byte, and is then in a fixed format (with strings terminated by zeros), and there is a final terminator at the end. The host information and retry information is all attached to - the first address, so that gets sent at the start. */ + the first address, so that gets sent at the start. + + Result item tags: + A C D H I K L P R S T X Z + */ /* Host unusability information: for most success cases this will be null. */ @@ -4752,7 +4805,7 @@ all pipes, so I do not see a reason to use non-blocking IO here { if (!h->address || h->status < hstatus_unusable) continue; sprintf(CS big_buffer, "%c%c%s", h->status, h->why, h->address); - rmt_dlv_checked_write(fd, 'H', '0', big_buffer, Ustrlen(big_buffer+2) + 3); + rmt_dlv_checked_write(fd, 'H','0', big_buffer, Ustrlen(big_buffer+2) + 3); } /* The number of bytes written. This is the same for each address. Even @@ -4886,6 +4939,15 @@ all pipes, so I do not see a reason to use non-blocking IO here rmt_dlv_checked_write(fd, 'R', '0', big_buffer, ptr - big_buffer); } +#ifndef DISABLE_DKIM + if (addr->dkim_used && LOGGING(dkim_verbose)) + { + DEBUG(D_deliver) debug_printf("dkim used: %s\n", addr->dkim_used); + ptr = big_buffer + sprintf(CS big_buffer, "%.128s", addr->dkim_used) + 1; + rmt_dlv_checked_write(fd, 'A', '4', big_buffer, ptr - big_buffer); + } +#endif + if (testflag(addr, af_new_conn) || testflag(addr, af_cont_conn)) { DEBUG(D_deliver) debug_printf("%scontinued-connection\n", @@ -4976,15 +5038,19 @@ all pipes, so I do not see a reason to use non-blocking IO here rmt_dlv_checked_write(fd, 'I', '0', big_buffer, ptr - big_buffer); } + /* Continuation message-id */ + if (*continue_next_id) + rmt_dlv_checked_write(fd, 'Z', '1', continue_next_id, MESSAGE_ID_LENGTH); + /* Add termination flag, close the pipe, and that's it. The character - after 'Z' indicates whether continue_transport is now NULL or not. + after "Z0" indicates whether continue_transport is now NULL or not. A change from non-NULL to NULL indicates a problem with a continuing connection. */ big_buffer[0] = continue_transport ? '1' : '0'; rmt_dlv_checked_write(fd, 'Z', '0', big_buffer, 1); (void)close(fd); - exit(EXIT_SUCCESS); + exim_exit(EXIT_SUCCESS); } /* Back in the mainline: close the unwanted half of the pipe. */ @@ -5086,7 +5152,7 @@ Returns: OK int deliver_split_address(address_item * addr) { -uschar * address = addr->address; +const uschar * address = addr->address; uschar * domain; uschar * t; int len; @@ -5103,7 +5169,7 @@ where they are locally interpreted. [The new draft "821" is more explicit on this, Jan 1999.] We know the syntax is valid, so this can be done by simply removing quoting backslashes and any unquoted doublequotes. */ -t = addr->cc_local_part = store_get(len+1, address); +addr->cc_local_part = t = store_get(len+1, address); while(len-- > 0) { int c = *address++; @@ -5115,7 +5181,7 @@ while(len-- > 0) } else *t++ = c; } -*t = 0; +*t = '\0'; /* We do the percent hack only for those domains that are listed in percent_hack_domains. A loop is required, to copy with multiple %-hacks. */ @@ -5123,8 +5189,8 @@ percent_hack_domains. A loop is required, to copy with multiple %-hacks. */ if (percent_hack_domains) { int rc; - uschar *new_address = NULL; - uschar *local_part = addr->cc_local_part; + uschar * new_address = NULL; + const uschar * local_part = addr->cc_local_part; deliver_domain = addr->domain; /* set $domain */ @@ -5261,12 +5327,12 @@ Returns: TRUE if the address is not hidden */ static BOOL -print_address_information(address_item *addr, FILE *f, uschar *si, uschar *sc, - uschar *se) +print_address_information(address_item * addr, FILE * f, uschar * si, + uschar * sc, uschar * se) { BOOL yield = TRUE; -uschar *printed = US""; -address_item *ancestor = addr; +const uschar * printed = US""; +address_item * ancestor = addr; while (ancestor->parent) ancestor = ancestor->parent; fprintf(f, "%s", CS si); @@ -5281,8 +5347,8 @@ else if (!testflag(addr, af_pfr) || !addr->parent) else { - uschar *s = addr->address; - uschar *ss; + const uschar * s = addr->address; + const uschar * ss; if (addr->address[0] == '>') { ss = US"mail"; s++; } else if (addr->address[0] == '|') ss = US"pipe"; @@ -5296,7 +5362,7 @@ fprintf(f, "%s", CS string_printing(printed)); if (ancestor != addr) { - uschar *original = ancestor->onetime_parent; + const uschar * original = ancestor->onetime_parent; if (!original) original= ancestor->address; if (strcmpic(original, printed) != 0) fprintf(f, "%s(%sgenerated from %s)", sc, @@ -5460,16 +5526,14 @@ Returns: nothing */ static void -do_duplicate_check(address_item **anchor) +do_duplicate_check(address_item ** anchor) { -address_item *addr; +address_item * addr; while ((addr = *anchor)) { - tree_node *tnode; + tree_node * tnode; if (testflag(addr, af_pfr)) - { - anchor = &(addr->next); - } + anchor = &addr->next; else if ((tnode = tree_search(tree_duplicates, addr->unique))) { DEBUG(D_deliver|D_route) @@ -5482,7 +5546,7 @@ while ((addr = *anchor)) else { tree_add_duplicate(addr->unique, addr); - anchor = &(addr->next); + anchor = &addr->next; } } } @@ -5533,18 +5597,18 @@ return actual_time; static FILE * expand_open(const uschar * filename, - const uschar * varname, const uschar * reason) + const uschar * optname, const uschar * reason) { const uschar * s = expand_cstring(filename); FILE * fp = NULL; if (!s || !*s) log_write(0, LOG_MAIN|LOG_PANIC, - "Failed to expand %s: '%s'\n", varname, filename); + "Failed to expand %s: '%s'\n", optname, filename); else if (*s != '/' || is_tainted(s)) log_write(0, LOG_MAIN|LOG_PANIC, "%s is not %s after expansion: '%s'\n", - varname, *s == '/' ? "untainted" : "absolute", s); + optname, *s == '/' ? "untainted" : "absolute", s); else if (!(fp = Ufopen(s, "rb"))) log_write(0, LOG_MAIN|LOG_PANIC, "Failed to open %s for %s " "message texts: %s", s, reason, strerror(errno)); @@ -5675,6 +5739,7 @@ else /* Open a template file if one is provided. Log failure to open, but carry on - default texts will be used. */ + GET_OPTION("bounce_message_file"); if (bounce_message_file) emf = expand_open(bounce_message_file, US"bounce_message_file", US"error"); @@ -6034,6 +6099,7 @@ transport_ctx tctx = {{0}}; if (pid <= 0) return FALSE; +GET_OPTION("warn_message_file"); if (warn_message_file) wmf = expand_open(warn_message_file, US"warn_message_file", US"warning"); @@ -6388,18 +6454,21 @@ Returns: When the global variable mua_wrapper is FALSE: */ int -deliver_message(uschar * id, BOOL forced, BOOL give_up) +deliver_message(const uschar * id, BOOL forced, BOOL give_up) { -int i, rc; -int final_yield = DELIVER_ATTEMPTED_NORMAL; -time_t now = time(NULL); -address_item *addr_last = NULL; -uschar *filter_message = NULL; -int process_recipients = RECIP_ACCEPT; -open_db dbblock; -open_db *dbm_file; +int i, rc, final_yield, process_recipients; +time_t now; +address_item * addr_last; +uschar * filter_message, * info; +open_db dbblock, * dbm_file; extern int acl_where; -uschar *info; +CONTINUED_ID: + +final_yield = DELIVER_ATTEMPTED_NORMAL; +now = time(NULL); +addr_last = NULL; +filter_message = NULL; +process_recipients = RECIP_ACCEPT; #ifdef MEASURE_TIMING report_time_since(×tamp_startup, US"delivery start"); /* testcase 0022, 2100 */ @@ -6474,7 +6543,7 @@ opening the data file, message_subdir gets set. */ if ((deliver_datafile = spool_open_datafile(id)) < 0) return continue_closedown(); /* yields DELIVER_NOT_ATTEMPTED */ -/* tHe value of message_size at this point has been set to the data length, +/* The value of message_size at this point has been set to the data length, plus one for the blank line that notionally precedes the data. */ /* Now read the contents of the header file, which will set up the headers in @@ -6733,6 +6802,7 @@ else if (system_filter && process_recipients != RECIP_FAIL_TIMEOUT) /* Any error in the filter file causes a delivery to be abandoned. */ + GET_OPTION("system_filter"); redirect.string = system_filter; redirect.isfile = TRUE; redirect.check_owner = redirect.check_group = FALSE; @@ -6912,12 +6982,14 @@ else if (system_filter && process_recipients != RECIP_FAIL_TIMEOUT) if (p->address[0] == '|') { type = US"pipe"; + GET_OPTION("system_filter_pipe_transport"); tpname = system_filter_pipe_transport; address_pipe = p->address; } else if (p->address[0] == '>') { type = US"reply"; + GET_OPTION("system_filter_reply_transport"); tpname = system_filter_reply_transport; } else @@ -6925,11 +6997,13 @@ else if (system_filter && process_recipients != RECIP_FAIL_TIMEOUT) if (p->address[Ustrlen(p->address)-1] == '/') { type = US"directory"; + GET_OPTION("system_filter_directory_transport"); tpname = system_filter_directory_transport; } else { type = US"file"; + GET_OPTION("system_filter_file_transport"); tpname = system_filter_file_transport; } address_file = p->address; @@ -6973,7 +7047,7 @@ else if (system_filter && process_recipients != RECIP_FAIL_TIMEOUT) if (!p->transport) { - address_item *badp = p; + address_item * badp = p; p = p->next; if (!addr_last) addr_new = p; else addr_last->next = p; badp->local_part = badp->address; /* Needed for log line */ @@ -7114,9 +7188,10 @@ if (process_recipients != RECIP_IGNORE) #ifndef DISABLE_EVENT if (process_recipients != RECIP_ACCEPT && event_action) { - uschar * save_local = deliver_localpart; + const uschar * save_local = deliver_localpart; const uschar * save_domain = deliver_domain; - uschar * addr = new->address, * errmsg = NULL; + const uschar * addr = new->address; + uschar * errmsg = NULL; int start, end, dom; if (!parse_extract_address(addr, &errmsg, &start, &end, &dom, TRUE)) @@ -7196,9 +7271,13 @@ while (addr_new) /* Loop until all addresses dealt with */ address_item * addr, * parent; /* Failure to open the retry database is treated the same as if it does - not exist. In both cases, dbm_file is NULL. */ + not exist. In both cases, dbm_file is NULL. For the first stage of a 2-phase + queue run don't bother checking domain- or address-retry info; they will take + effect on the second stage. */ - if (!(dbm_file = dbfn_open(US"retry", O_RDONLY, &dbblock, FALSE, TRUE))) + if (f.queue_2stage) + dbm_file = NULL; + else if (!(dbm_file = dbfn_open(US"retry", O_RDONLY, &dbblock, FALSE, TRUE))) DEBUG(D_deliver|D_retry|D_route|D_hints_lookup) debug_printf("no retry data available\n"); @@ -7246,7 +7325,7 @@ while (addr_new) /* Loop until all addresses dealt with */ addr->unique = string_sprintf("%s:%s", addr->address, addr->parent->unique + - (testflag(addr->parent, af_homonym)? 3:0)); + (testflag(addr->parent, af_homonym) ? 3:0)); addr->address_retry_key = addr->domain_retry_key = string_sprintf("T:%s", addr->unique); @@ -7683,7 +7762,7 @@ while (addr_new) /* Loop until all addresses dealt with */ else if (testflag(addr, af_dr_retry_exists)) { - uschar *altkey = string_sprintf("%s:<%s>", addr->address_retry_key, + uschar * altkey = string_sprintf("%s:<%s>", addr->address_retry_key, sender_address); retry_add_item(addr, altkey, rf_delete); retry_add_item(addr, addr->address_retry_key, rf_delete); @@ -8365,7 +8444,7 @@ else if (addr_defer != (address_item *)(+1)) for (i = 0; i < recipients_count; i++) { - uschar *r = recipients_list[i].address; + const uschar * r = recipients_list[i].address; if (Ustrcmp(otaddr->onetime_parent, r) == 0) t = i; if (Ustrcmp(otaddr->address, r) == 0) break; } @@ -8393,7 +8472,7 @@ else if (addr_defer != (address_item *)(+1)) if (sender_address[0]) { - uschar * s = addr->prop.errors_address; + const uschar * s = addr->prop.errors_address; if (!s) s = sender_address; if (Ustrstr(recipients, s) == NULL) recipients = string_sprintf("%s%s%s", recipients, @@ -8412,54 +8491,57 @@ else if (addr_defer != (address_item *)(+1)) || addr_defer->dsn_flags & rf_notify_delay ) && delay_warning[1] > 0 - && sender_address[0] != 0 - && ( !delay_warning_condition - || expand_check_condition(delay_warning_condition, - US"delay_warning", US"option") - ) - ) + && sender_address[0] != 0) { - int count; - int show_time; - int queue_time = time(NULL) - received_time.tv_sec; - - queue_time = test_harness_fudged_queue_time(queue_time); + GET_OPTION("delay_warning_condition"); + if ( ( !delay_warning_condition + || expand_check_condition(delay_warning_condition, + US"delay_warning", US"option") + ) + ) + { + int count; + int show_time; + int queue_time = time(NULL) - received_time.tv_sec; - /* See how many warnings we should have sent by now */ + queue_time = test_harness_fudged_queue_time(queue_time); - for (count = 0; count < delay_warning[1]; count++) - if (queue_time < delay_warning[count+2]) break; + /* See how many warnings we should have sent by now */ - show_time = delay_warning[count+1]; + for (count = 0; count < delay_warning[1]; count++) + if (queue_time < delay_warning[count+2]) break; - if (count >= delay_warning[1]) - { - int extra; - int last_gap = show_time; - if (count > 1) last_gap -= delay_warning[count]; - extra = (queue_time - delay_warning[count+1])/last_gap; - show_time += last_gap * extra; - count += extra; - } + show_time = delay_warning[count+1]; - DEBUG(D_deliver) - { - debug_printf("time on queue = %s id %s addr %s\n", - readconf_printtime(queue_time), message_id, addr_defer->address); - debug_printf("warning counts: required %d done %d\n", count, - warning_count); - } - - /* We have computed the number of warnings there should have been by now. - If there haven't been enough, send one, and up the count to what it should - have been. */ + if (count >= delay_warning[1]) + { + int extra; + int last_gap = show_time; + if (count > 1) last_gap -= delay_warning[count]; + extra = (queue_time - delay_warning[count+1])/last_gap; + show_time += last_gap * extra; + count += extra; + } - if (warning_count < count) - if (send_warning_message(recipients, queue_time, show_time)) + DEBUG(D_deliver) { - warning_count = count; - update_spool = TRUE; /* Ensure spool rewritten */ + debug_printf("time on queue = %s id %s addr %s\n", + readconf_printtime(queue_time), message_id, addr_defer->address); + debug_printf("warning counts: required %d done %d\n", count, + warning_count); } + + /* We have computed the number of warnings there should have been by now. + If there haven't been enough, send one, and up the count to what it should + have been. */ + + if (warning_count < count) + if (send_warning_message(recipients, queue_time, show_time)) + { + warning_count = count; + update_spool = TRUE; /* Ensure spool rewritten */ + } + } } /* Clear deliver_domain */ @@ -8574,6 +8656,17 @@ DEBUG(D_deliver) debug_printf("end delivery of %s\n", id); report_time_since(×tamp_startup, US"delivery end"); /* testcase 0005 */ #endif +/* If the transport suggested another message to deliver, go round again. */ + +if (final_yield == DELIVER_ATTEMPTED_NORMAL && *continue_next_id) + { + addr_defer = addr_failed = addr_succeed = NULL; + tree_duplicates = NULL; /* discard dups info from old message */ + id = string_copyn(continue_next_id, MESSAGE_ID_LENGTH); + continue_next_id[0] = '\0'; + goto CONTINUED_ID; + } + /* It is unlikely that there will be any cached resources, since they are released after routing, and in the delivery subprocesses. However, it's possible for an expansion for something afterwards (for example, diff --git a/src/src/directory.c b/src/src/directory.c index 94303db0b..876d097b5 100644 --- a/src/src/directory.c +++ b/src/src/directory.c @@ -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; diff --git a/src/src/dkim.c b/src/src/dkim.c index a49c8d764..e0b76c3b1 100644 --- a/src/src/dkim.c +++ b/src/src/dkim.c @@ -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 */ @@ -624,6 +624,7 @@ if (dkim->dot_stuffed) store_pool = POOL_MAIN; +GET_OPTION("dkim_domain"); if ((s = dkim->dkim_domain) && !(dkim_domain = expand_cstring(s))) /* expansion error, do not send message. */ { errwhen = US"dkim_domain"; goto expand_bad; } @@ -652,6 +653,7 @@ if (dkim_domain) /* Set $dkim_selector expansion variable to each selector in list, for this domain. */ + GET_OPTION("dkim_selector"); if (!(dkim_sel = expand_string(dkim->dkim_selector))) { errwhen = US"dkim_selector"; goto expand_bad; } @@ -669,6 +671,7 @@ if (dkim_domain) /* Get canonicalization to use */ + GET_OPTION("dkim_canon"); dkim_canon_expanded = dkim->dkim_canon ? expand_string(dkim->dkim_canon) : US"relaxed"; if (!dkim_canon_expanded) /* expansion error, do not send message. */ @@ -686,6 +689,7 @@ if (dkim_domain) pdkim_canon = PDKIM_CANON_RELAXED; } + GET_OPTION("dkim_sign_headers"); if ( dkim->dkim_sign_headers && !(dkim_sign_headers_expanded = expand_string(dkim->dkim_sign_headers))) { errwhen = US"dkim_sign_header"; goto expand_bad; } @@ -693,6 +697,7 @@ if (dkim_domain) /* Get private key to use. */ + GET_OPTION("dkim_private_key"); if (!(dkim_private_key_expanded = expand_string(dkim->dkim_private_key))) { errwhen = US"dkim_private_key"; goto expand_bad; } @@ -707,21 +712,28 @@ if (dkim_domain) expand_file_big_buffer(dkim_private_key_expanded))) goto bad; + GET_OPTION("dkim_hash"); if (!(dkim_hash_expanded = expand_string(dkim->dkim_hash))) { errwhen = US"dkim_hash"; goto expand_bad; } + GET_OPTION("dkim_identity"); if (dkim->dkim_identity) if (!(dkim_identity_expanded = expand_string(dkim->dkim_identity))) { errwhen = US"dkim_identity"; goto expand_bad; } else if (!*dkim_identity_expanded) dkim_identity_expanded = NULL; + GET_OPTION("dkim_timestamps"); if (dkim->dkim_timestamps) if (!(dkim_timestamps_expanded = expand_string(dkim->dkim_timestamps))) { errwhen = US"dkim_timestamps"; goto expand_bad; } else - xval = (tval = (unsigned long) time(NULL)) - + strtoul(CCS dkim_timestamps_expanded, NULL, 10); + { + tval = (unsigned long) time(NULL); + xval = strtoul(CCS dkim_timestamps_expanded, NULL, 10); + if (xval > 0) + xval += tval; + } if (!(sig = pdkim_init_sign(&dkim_sign_ctx, dkim_signing_domain, dkim_signing_selector, @@ -741,6 +753,9 @@ if (dkim_domain) if (!pdkim_set_sig_bodyhash(&dkim_sign_ctx, sig)) goto bad; + dkim_signing_record = string_append_listele(dkim_signing_record, ':', dkim_signing_domain); + dkim_signing_record = string_append_listele(dkim_signing_record, ':', dkim_signing_selector); + if (!dkim_sign_ctx.sig) /* link sig to context chain */ dkim_sign_ctx.sig = sig; else diff --git a/src/src/dkim_transport.c b/src/src/dkim_transport.c index 5b79b4b76..63870c57f 100644 --- a/src/src/dkim_transport.c +++ b/src/src/dkim_transport.c @@ -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 */ @@ -18,6 +18,7 @@ static BOOL dkt_sign_fail(struct ob_dkim * dkim, int * errp) { +GET_OPTION("dkim_strict"); if (dkim->dkim_strict) { uschar * dkim_strict_result = expand_string(dkim->dkim_strict); @@ -384,6 +385,8 @@ BOOL dkim_transport_write_message(transport_ctx * tctx, struct ob_dkim * dkim, const uschar ** err) { +BOOL yield; + /* If we can't sign, just call the original function. */ if ( !(dkim->dkim_private_key && dkim->dkim_domain && dkim->dkim_selector) @@ -398,12 +401,16 @@ if ( !transport_filter_argv || !*transport_filter_argv || !**transport_filter_argv ) - return dkt_direct(tctx, dkim, err); + yield = dkt_direct(tctx, dkim, err); + +else + /* Use the transport path to write a file, calculate a dkim signature, + send the signature and then send the file. */ -/* Use the transport path to write a file, calculate a dkim signature, -send the signature and then send the file. */ + yield = dkt_via_kfile(tctx, dkim, err); -return dkt_via_kfile(tctx, dkim, err); +tctx->addr->dkim_used = string_from_gstring(dkim_signing_record); +return yield; } #endif /* whole file */ diff --git a/src/src/dmarc.c b/src/src/dmarc.c index 042ebe982..28fce0624 100644 --- a/src/src/dmarc.c +++ b/src/src/dmarc.c @@ -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 2012 - 2014 License: GPL */ /* SPDX-License-Identifier: GPL-2.0-or-later */ @@ -311,7 +311,7 @@ g = string_fmt_append(g, "align_dkim %d\nalign_spf %d\naction %d\n", # ifdef EXPERIMENTAL_ARC g = arc_dmarc_hist_append(g); # else -g = string_fmt_append(g, "arc %d\narc_policy $d json:[]\n", +g = string_fmt_append(g, "arc %d\narc_policy %d json:[]\n", ARES_RESULT_UNKNOWN, DMARC_ARC_POLICY_RESULT_UNUSED); # endif #endif diff --git a/src/src/dns.c b/src/src/dns.c index d39b4b590..45dc1574d 100644 --- a/src/src/dns.c +++ b/src/src/dns.c @@ -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 */ @@ -62,7 +62,7 @@ if (stat(CS utilname, &statbuf) >= 0) int infd, outfd, rc; uschar *argv[5]; - DEBUG(D_dns) debug_printf("DNS lookup of %s (%s) using fakens\n", + DEBUG(D_dns) debug_printf_indent("DNS lookup of %s (%s) using fakens\n", name, dns_text_type(type)); argv[0] = utilname; @@ -105,17 +105,17 @@ if (stat(CS utilname, &statbuf) >= 0) case 3: h_errno = NO_RECOVERY; return -1; case 4: h_errno = NO_DATA; return -1; case 5: /* Pass on to res_search() */ - DEBUG(D_dns) debug_printf("fakens returned PASS_ON\n"); + DEBUG(D_dns) debug_printf_indent("fakens returned PASS_ON\n"); } } else { - DEBUG(D_dns) debug_printf("fakens (%s) not found\n", utilname); + DEBUG(D_dns) debug_printf_indent("fakens (%s) not found\n", utilname); } /* fakens utility not found, or it returned "pass on" */ -DEBUG(D_dns) debug_printf("passing %s on to res_search()\n", domain); +DEBUG(D_dns) debug_printf_indent("passing %s on to res_search()\n", domain); return res_search(CS domain, C_IN, type, answerptr, size); } @@ -165,13 +165,13 @@ if (dns_use_edns0 >= 0) else resp->options &= ~RES_USE_EDNS0; DEBUG(D_resolver) - debug_printf("Coerced resolver EDNS0 support %s.\n", + debug_printf_indent("Coerced resolver EDNS0 support %s.\n", dns_use_edns0 ? "on" : "off"); } #else if (dns_use_edns0 >= 0) DEBUG(D_resolver) - debug_printf("Unable to %sset EDNS0 without resolver support.\n", + debug_printf_indent("Unable to %sset EDNS0 without resolver support.\n", dns_use_edns0 ? "" : "un"); #endif @@ -187,7 +187,7 @@ if (dns_dnssec_ok >= 0) if (dns_use_edns0 == 0 && dns_dnssec_ok != 0) { DEBUG(D_resolver) - debug_printf("CONFLICT: dns_use_edns0 forced false, dns_dnssec_ok forced true, ignoring latter!\n"); + debug_printf_indent("CONFLICT: dns_use_edns0 forced false, dns_dnssec_ok forced true, ignoring latter!\n"); } else { @@ -195,18 +195,18 @@ if (dns_dnssec_ok >= 0) resp->options |= RES_USE_DNSSEC; else resp->options &= ~RES_USE_DNSSEC; - DEBUG(D_resolver) debug_printf("Coerced resolver DNSSEC support %s.\n", + DEBUG(D_resolver) debug_printf_indent("Coerced resolver DNSSEC support %s.\n", dns_dnssec_ok ? "on" : "off"); } } # else if (dns_dnssec_ok >= 0) DEBUG(D_resolver) - debug_printf("Unable to %sset DNSSEC without resolver support.\n", + debug_printf_indent("Unable to %sset DNSSEC without resolver support.\n", dns_dnssec_ok ? "" : "un"); if (use_dnssec) DEBUG(D_resolver) - debug_printf("Unable to set DNSSEC without resolver support.\n"); + debug_printf_indent("Unable to set DNSSEC without resolver support.\n"); # endif #endif /* DISABLE_DNSSEC */ @@ -299,13 +299,23 @@ return string_from_gstring(g); +/* Check a pointer for being past the end of a dns answer. +Exactly one past the end is defined as ok. +Return TRUE iff bad. +*/ +static BOOL +dnsa_bad_ptr(const dns_answer * dnsa, const uschar * ptr) +{ +return ptr > dnsa->answer + dnsa->answerlen; +} + /* Increment the aptr in dnss, checking against dnsa length. Return: TRUE for a bad result */ static BOOL dnss_inc_aptr(const dns_answer * dnsa, dns_scan * dnss, unsigned delta) { -return (dnss->aptr += delta) >= dnsa->answer + dnsa->answerlen; +return dnsa_bad_ptr(dnsa, dnss->aptr += delta); } /************************************************* @@ -343,7 +353,7 @@ char * trace = NULL; if (reset != RESET_NEXT) { dnss->rrcount = ntohs(h->qdcount); - TRACE debug_printf("%s: reset (Q rrcount %d)\n", __FUNCTION__, dnss->rrcount); + TRACE debug_printf_indent("%s: reset (Q rrcount %d)\n", __FUNCTION__, dnss->rrcount); dnss->aptr = dnsa->answer + sizeof(HEADER); /* Skip over questions; failure to expand the name just gives up */ @@ -362,7 +372,7 @@ if (reset != RESET_NEXT) /* Get the number of answer records. */ dnss->rrcount = ntohs(h->ancount); - TRACE debug_printf("%s: reset (A rrcount %d)\n", __FUNCTION__, dnss->rrcount); + TRACE debug_printf_indent("%s: reset (A rrcount %d)\n", __FUNCTION__, dnss->rrcount); /* Skip over answers if we want to look at the authority section. Also skip the NS records (i.e. authority section) if wanting to look at the additional @@ -370,38 +380,42 @@ if (reset != RESET_NEXT) if (reset == RESET_ADDITIONAL) { - TRACE debug_printf("%s: additional\n", __FUNCTION__); + TRACE debug_printf_indent("%s: additional\n", __FUNCTION__); dnss->rrcount += ntohs(h->nscount); - TRACE debug_printf("%s: reset (NS rrcount %d)\n", __FUNCTION__, dnss->rrcount); + TRACE debug_printf_indent("%s: reset (NS rrcount %d)\n", __FUNCTION__, dnss->rrcount); } if (reset == RESET_AUTHORITY || reset == RESET_ADDITIONAL) { TRACE if (reset == RESET_AUTHORITY) - debug_printf("%s: authority\n", __FUNCTION__); + debug_printf_indent("%s: authority\n", __FUNCTION__); while (dnss->rrcount-- > 0) { TRACE trace = "A-namelen"; namelen = dn_expand(dnsa->answer, dnsa->answer + dnsa->answerlen, dnss->aptr, (DN_EXPAND_ARG4_TYPE) &dnss->srr.name, DNS_MAXNAME); if (namelen < 0) goto null_return; + /* skip name, type, class & TTL */ TRACE trace = "A-hdr"; if (dnss_inc_aptr(dnsa, dnss, namelen+8)) goto null_return; + + if (dnsa_bad_ptr(dnsa, dnss->aptr + sizeof(uint16_t))) goto null_return; GETSHORT(dnss->srr.size, dnss->aptr); /* size of data portion */ - /* skip over it */ + + /* skip over it, checking for a bogus size */ TRACE trace = "A-skip"; if (dnss_inc_aptr(dnsa, dnss, dnss->srr.size)) goto null_return; } dnss->rrcount = reset == RESET_AUTHORITY ? ntohs(h->nscount) : ntohs(h->arcount); - TRACE debug_printf("%s: reset (%s rrcount %d)\n", __FUNCTION__, + TRACE debug_printf_indent("%s: reset (%s rrcount %d)\n", __FUNCTION__, reset == RESET_AUTHORITY ? "NS" : "AR", dnss->rrcount); } - TRACE debug_printf("%s: %d RRs to read\n", __FUNCTION__, dnss->rrcount); + TRACE debug_printf_indent("%s: %d RRs to read\n", __FUNCTION__, dnss->rrcount); } else - TRACE debug_printf("%s: next (%d left)\n", __FUNCTION__, dnss->rrcount); + TRACE debug_printf_indent("%s: next (%d left)\n", __FUNCTION__, dnss->rrcount); /* The variable dnss->aptr is now pointing at the next RR, and dnss->rrcount contains the number of RR records left. */ @@ -417,31 +431,38 @@ namelen = dn_expand(dnsa->answer, dnsa->answer + dnsa->answerlen, dnss->aptr, if (namelen < 0) goto null_return; /* Move the pointer past the name and fill in the rest of the data structure -from the following bytes. */ +from the following bytes. We seem to be assuming here that the RR blob passed +to us by the resolver library is the same as that defined for an RR by RFC 1035 +section 3.2.1 */ TRACE trace = "R-name"; if (dnss_inc_aptr(dnsa, dnss, namelen)) goto null_return; -GETSHORT(dnss->srr.type, dnss->aptr); /* Record type */ +/* Check space for type, class, TTL & data-size-word */ +if (dnsa_bad_ptr(dnsa, dnss->aptr + 3 * sizeof(uint16_t) + sizeof(uint32_t))) + goto null_return; + +GETSHORT(dnss->srr.type, dnss->aptr); /* Record type */ + TRACE trace = "R-class"; -if (dnss_inc_aptr(dnsa, dnss, 2)) goto null_return; /* Don't want class */ -GETLONG(dnss->srr.ttl, dnss->aptr); /* TTL */ -GETSHORT(dnss->srr.size, dnss->aptr); /* Size of data portion */ -dnss->srr.data = dnss->aptr; /* The record's data follows */ +(void) dnss_inc_aptr(dnsa, dnss, sizeof(uint16_t)); /* skip class */ -/* Unchecked increment ok here since no further access on this iteration; -will be checked on next at "R-name". */ +GETLONG(dnss->srr.ttl, dnss->aptr); /* TTL */ +GETSHORT(dnss->srr.size, dnss->aptr); /* Size of data portion */ +dnss->srr.data = dnss->aptr; /* The record's data follows */ -dnss->aptr += dnss->srr.size; /* Advance to next RR */ +/* skip over it, checking for a bogus size */ +if (dnss_inc_aptr(dnsa, dnss, dnss->srr.size)) + goto null_return; /* Return a pointer to the dns_record structure within the dns_answer. This is for convenience so that the scans can use nice-looking for loops. */ -TRACE debug_printf("%s: return %s\n", __FUNCTION__, dns_text_type(dnss->srr.type)); +TRACE debug_printf_indent("%s: return %s\n", __FUNCTION__, dns_text_type(dnss->srr.type)); return &dnss->srr; null_return: - TRACE debug_printf("%s: terminate (%d RRs left). Last op: %s; errno %d %s\n", + TRACE debug_printf_indent("%s: terminate (%d RRs left). Last op: %s; errno %d %s\n", __FUNCTION__, dnss->rrcount, trace, errno, strerror(errno)); dnss->rrcount = 0; return NULL; @@ -494,7 +515,7 @@ dns_is_secure(const dns_answer * dnsa) { #ifdef DISABLE_DNSSEC DEBUG(D_dns) - debug_printf("DNSSEC support disabled at build-time; dns_is_secure() false\n"); + debug_printf_indent("DNSSEC support disabled at build-time; dns_is_secure() false\n"); return FALSE; #else const HEADER * h = (const HEADER *) dnsa->answer; @@ -521,7 +542,7 @@ if ( !h->aa ) return FALSE; -DEBUG(D_dns) debug_printf("DNS faked the AD bit " +DEBUG(D_dns) debug_printf_indent("DNS faked the AD bit " "(got AA and matched with dns_trust_aa (%s in %s))\n", auth_name, dns_trust_aa); @@ -645,7 +666,7 @@ else (void)tree_insertnode(&tree_dns_fails, new); } -DEBUG(D_dns) debug_printf(" %s neg-cache entry for %s, ttl %d\n", +DEBUG(D_dns) debug_printf_indent(" %s neg-cache entry for %s, ttl %d\n", previous ? "update" : "writing", node_name, expiry ? (int)(expiry - time(NULL)) : -1); e->expiry = expiry; @@ -672,7 +693,7 @@ e = previous->data.ptr; val = e->data.val; rc = e->expiry && e->expiry <= time(NULL) ? -1 : val; -DEBUG(D_dns) debug_printf("DNS lookup of %.255s (%s): %scached value %s%s\n", +DEBUG(D_dns) debug_printf_indent("DNS lookup of %.255s (%s): %scached value %s%s\n", name, dns_text_type(type), rc == -1 ? "" : "using ", dns_rc_names[val], @@ -710,12 +731,12 @@ if ( h->qr == 1 /* a response */ && ntohs(h->ancount) == 0 /* no answer records */ && ntohs(h->nscount) >= 1) /* authority records */ { - DEBUG(D_dns) debug_printf("faking res_search(%s) response length as %d\n", + DEBUG(D_dns) debug_printf_indent("faking res_search(%s) response length as %d\n", dns_text_type(type), (int)sizeof(dnsa->answer)); dnsa->answerlen = sizeof(dnsa->answer); return TRUE; } -DEBUG(D_dns) debug_printf("DNS: couldn't fake dnsa len\n"); +DEBUG(D_dns) debug_printf_indent("DNS: couldn't fake dnsa len\n"); /* Maybe we should just do a second lookup for an SOA? */ return FALSE; } @@ -744,17 +765,17 @@ if (fake_dnsa_len_for_fail(dnsa, type)) /* Skip the mname & rname strings */ if ((len = dn_expand(dnsa->answer, dnsa->answer + dnsa->answerlen, - p, (DN_EXPAND_ARG4_TYPE)discard_buf, 256)) < 0) + p, (DN_EXPAND_ARG4_TYPE)discard_buf, sizeof(discard_buf))) < 0) break; p += len; if ((len = dn_expand(dnsa->answer, dnsa->answer + dnsa->answerlen, - p, (DN_EXPAND_ARG4_TYPE)discard_buf, 256)) < 0) + p, (DN_EXPAND_ARG4_TYPE)discard_buf, sizeof(discard_buf))) < 0) break; p += len; /* Skip the SOA serial, refresh, retry & expire. Grab the TTL */ - if (p > dnsa->answer + dnsa->answerlen - 5 * INT32SZ) + if (dnsa_bad_ptr(dnsa, p + 5 * INT32SZ)) break; p += 4 * INT32SZ; GETLONG(ttl, p); @@ -762,7 +783,7 @@ if (fake_dnsa_len_for_fail(dnsa, type)) return time(NULL) + ttl; } -DEBUG(D_dns) debug_printf("DNS: no SOA record found for neg-TTL\n"); +DEBUG(D_dns) debug_printf_indent("DNS: no SOA record found for neg-TTL\n"); return 0; } @@ -823,11 +844,11 @@ if ((rc = dns_fail_cache_hit(name, type)) > 0) uschar * alabel; uschar * errstr = NULL; DEBUG(D_dns) if (string_is_utf8(name)) - debug_printf("convert utf8 '%s' to alabel for for lookup\n", name); + debug_printf_indent("convert utf8 '%s' to alabel for for lookup\n", name); if ((alabel = string_domain_utf8_to_alabel(name, &errstr)), errstr) { DEBUG(D_dns) - debug_printf("DNS name '%s' utf8 conversion to alabel failed: %s\n", name, + debug_printf_indent("DNS name '%s' utf8 conversion to alabel failed: %s\n", name, errstr); f.host_find_failed_syntax = TRUE; return DNS_NOMATCH; @@ -856,7 +877,7 @@ if (check_dns_names_pattern[0] != 0 && type != T_PTR && type != T_TXT) if (!regex_match(regex_check_dns_names, name, -1, NULL)) { DEBUG(D_dns) - debug_printf("DNS name syntax check failed: %s (%s)\n", name, + debug_printf_indent("DNS name syntax check failed: %s (%s)\n", name, dns_text_type(type)); f.host_find_failed_syntax = TRUE; return DNS_NOMATCH; @@ -888,7 +909,7 @@ dnsa->answerlen = f.running_in_test_harness if (dnsa->answerlen > (int) sizeof(dnsa->answer)) { - DEBUG(D_dns) debug_printf("DNS lookup of %s (%s) resulted in overlong packet" + DEBUG(D_dns) debug_printf_indent("DNS lookup of %s (%s) resulted in overlong packet" " (size %d), truncating to %u.\n", name, dns_text_type(type), dnsa->answerlen, (unsigned int) sizeof(dnsa->answer)); dnsa->answerlen = sizeof(dnsa->answer); @@ -897,12 +918,12 @@ if (dnsa->answerlen > (int) sizeof(dnsa->answer)) if (dnsa->answerlen < 0) switch (h_errno) { case HOST_NOT_FOUND: - DEBUG(D_dns) debug_printf("DNS lookup of %s (%s) gave HOST_NOT_FOUND\n" + DEBUG(D_dns) debug_printf_indent("DNS lookup of %s (%s) gave HOST_NOT_FOUND\n" "returning DNS_NOMATCH\n", name, dns_text_type(type)); return dns_fail_return(name, type, dns_expire_from_soa(dnsa, type), DNS_NOMATCH); case TRY_AGAIN: - DEBUG(D_dns) debug_printf("DNS lookup of %s (%s) gave TRY_AGAIN\n", + DEBUG(D_dns) debug_printf_indent("DNS lookup of %s (%s) gave TRY_AGAIN\n", name, dns_text_type(type)); /* Cut this out for various test programs */ @@ -934,10 +955,10 @@ if (dnsa->answerlen < 0) switch (h_errno) if (rc != OK) { - DEBUG(D_dns) debug_printf("returning DNS_AGAIN\n"); + DEBUG(D_dns) debug_printf_indent("returning DNS_AGAIN\n"); return dns_fail_return(name, type, 0, DNS_AGAIN); } - DEBUG(D_dns) debug_printf("%s is in dns_again_means_nonexist: returning " + DEBUG(D_dns) debug_printf_indent("%s is in dns_again_means_nonexist: returning " "DNS_NOMATCH\n", name); return dns_fail_return(name, type, dns_expire_from_soa(dnsa, type), DNS_NOMATCH); @@ -946,22 +967,22 @@ if (dnsa->answerlen < 0) switch (h_errno) #endif case NO_RECOVERY: - DEBUG(D_dns) debug_printf("DNS lookup of %s (%s) gave NO_RECOVERY\n" + DEBUG(D_dns) debug_printf_indent("DNS lookup of %s (%s) gave NO_RECOVERY\n" "returning DNS_FAIL\n", name, dns_text_type(type)); return dns_fail_return(name, type, 0, DNS_FAIL); case NO_DATA: - DEBUG(D_dns) debug_printf("DNS lookup of %s (%s) gave NO_DATA\n" + DEBUG(D_dns) debug_printf_indent("DNS lookup of %s (%s) gave NO_DATA\n" "returning DNS_NODATA\n", name, dns_text_type(type)); return dns_fail_return(name, type, dns_expire_from_soa(dnsa, type), DNS_NODATA); default: - DEBUG(D_dns) debug_printf("DNS lookup of %s (%s) gave unknown DNS error %d\n" + DEBUG(D_dns) debug_printf_indent("DNS lookup of %s (%s) gave unknown DNS error %d\n" "returning DNS_FAIL\n", name, dns_text_type(type), h_errno); return dns_fail_return(name, type, 0, DNS_FAIL); } -DEBUG(D_dns) debug_printf("DNS lookup of %s (%s) succeeded\n", +DEBUG(D_dns) debug_printf_indent("DNS lookup of %s (%s) succeeded\n", name, dns_text_type(type)); return DNS_SUCCEED; @@ -989,7 +1010,7 @@ won't return any. If fully_qualified_name is not NULL, set it to point to the full name returned by the resolver, if this is different to what it is given, unless the returned name starts with "*" as some nameservers seem to be returning -wildcards in this form. In international mode "different" means "alabel +wildcards in this form. In international mode "different" means "a-label forms are different". Arguments: @@ -1007,11 +1028,13 @@ Returns: DNS_SUCCEED successful lookup */ int -dns_lookup(dns_answer *dnsa, const uschar *name, int type, - const uschar **fully_qualified_name) +dns_lookup(dns_answer * dnsa, const uschar * name, int type, + const uschar ** fully_qualified_name) { -const uschar *orig_name = name; +const uschar * orig_name = name; BOOL secure_so_far = TRUE; +int rc = DNS_FAIL; +const uschar * errstr = NULL; /* By default, assume the resolver follows CNAME chains (and returns NODATA for an unterminated one). If it also does that for a CNAME loop, fine; if it returns @@ -1025,12 +1048,11 @@ for (int i = 0; i <= dns_cname_loops; i++) uschar * data; dns_record cname_rr, type_rr; dns_scan dnss; - int rc; /* DNS lookup failures get passed straight back. */ if ((rc = dns_basic_lookup(dnsa, name, type)) != DNS_SUCCEED) - return rc; + goto not_good; /* We should have either records of the required type, or a CNAME record, or both. We need to know whether both exist for getting the fully qualified @@ -1084,26 +1106,71 @@ for (int i = 0; i <= dns_cname_loops; i++) its not existing. */ if (!cname_rr.data) - return DNS_FAIL; + { + errstr = US"no_hit_yet_no_cname"; + goto not_good; + } /* DNS data comes from the outside, hence tainted */ data = store_get(256, GET_TAINTED); if (dn_expand(dnsa->answer, dnsa->answer + dnsa->answerlen, cname_rr.data, (DN_EXPAND_ARG4_TYPE)data, 256) < 0) - return DNS_FAIL; + { + errstr = US"bad_expand"; + goto not_good; + } name = data; if (!dns_is_secure(dnsa)) secure_so_far = FALSE; - DEBUG(D_dns) debug_printf("CNAME found: change to %s\n", name); + DEBUG(D_dns) debug_printf_indent("CNAME found: change to %s\n", name); } /* Loop back to do another lookup */ -/*Control reaches here after 10 times round the CNAME loop. Something isn't +/* Control reaches here after 10 times round the CNAME loop. Something isn't right... */ log_write(0, LOG_MAIN, "CNAME loop for %s encountered", orig_name); -return DNS_FAIL; +errstr = US"cname_loop"; + +not_good: + { +#ifndef DISABLE_EVENT + const uschar * s = NULL; + BOOL save_flag = f.search_find_defer; + uschar * save_serr = search_error_message; + + if (!transport_name) + s = event_action; + else + for(transport_instance * tp = transports; tp; tp = tp->next) + if (Ustrcmp(tp->name, transport_name) == 0) + { s = tp->event_action; break; } + + if (s) + { + if (Ustrchr(name, ':')) /* unlikely, but may as well bugproof */ + { + gstring * g = NULL; + while (*name) + { + if (*name == ':') g = string_catn(g, name, 1); + g = string_catn(g, name++, 1); + } + name = string_from_gstring(g); + } + event_raise(s, US"dns:fail", + string_sprintf("%s:%s:%s", + errstr ? errstr : dns_rc_names[rc], name, dns_text_type(type)), + NULL); + } + + /*XXX what other state could an expansion in the eventhandler mess up? */ + search_error_message = save_serr; + f.search_find_defer = save_flag; +#endif /*EVENT*/ + return rc; + } } @@ -1151,12 +1218,12 @@ switch (type) case T_SOA: { const uschar *d = name; - while (d != 0) + while (d) { int rc = dns_lookup(dnsa, d, type, fully_qualified_name); if (rc != DNS_NOMATCH && rc != DNS_NODATA) return rc; - while (*d != 0 && *d != '.') d++; - if (*d++ == 0) break; + while (*d && *d != '.') d++; + if (!*d++) break; } return DNS_NOMATCH; } @@ -1176,7 +1243,7 @@ switch (type) dns_record *rr; dns_scan dnss; - DEBUG(D_dns) debug_printf("CSA lookup of %s\n", name); + DEBUG(D_dns) debug_printf_indent("CSA lookup of %s\n", name); srvname = string_sprintf("_client._smtp.%s", name); rc = dns_lookup(dnsa, srvname, T_SRV, NULL); @@ -1214,7 +1281,7 @@ switch (type) limit = 3; } - DEBUG(D_dns) debug_printf("CSA TLD %s\n", tld); + DEBUG(D_dns) debug_printf_indent("CSA TLD %s\n", tld); /* Do not perform the search if the top level or 2nd level domains do not exist. This is quite common, and when it occurs all the search queries would @@ -1241,7 +1308,7 @@ switch (type) if (--namesuff <= name) return DNS_NOMATCH; while (*namesuff != '.'); - DEBUG(D_dns) debug_printf("CSA parent search at %s\n", namesuff + 1); + DEBUG(D_dns) debug_printf_indent("CSA parent search at %s\n", namesuff + 1); srvname = string_sprintf("_client._smtp.%s", namesuff + 1); rc = dns_lookup(dnsa, srvname, T_SRV, NULL); @@ -1258,6 +1325,7 @@ switch (type) const uschar * p = rr->data; /* Extract the numerical SRV fields (p is incremented) */ + if (rr_bad_size(rr, 3 * sizeof(uint16_t))) continue; GETSHORT(priority, p); GETSHORT(dummy_weight, p); GETSHORT(port, p); diff --git a/src/src/drtables.c b/src/src/drtables.c index cf7c4e0b1..1e3269f4a 100644 --- a/src/src/drtables.c +++ b/src/src/drtables.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) The Exim Maintainers 2020 - 2022 */ +/* Copyright (c) The Exim Maintainers 2020 - 2023 */ /* 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 */ diff --git a/src/src/environment.c b/src/src/environment.c index b05b1aefd..d96a4e1dd 100644 --- a/src/src/environment.c +++ b/src/src/environment.c @@ -2,9 +2,10 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) Heiko Schlittermann 2016 +/* + * Copyright (c) The Exim Maintainers 2022 - 2023 + * Copyright (c) Heiko Schlittermann 2016 * hs@schlittermann.de - * Copyright (c) The Exim Maintainers 2022 * See the file NOTICE for conditions of use and distribution. * SPDX-License-Identifier: GPL-2.0-or-later */ diff --git a/src/src/exicyclog.src b/src/src/exicyclog.src index ce43b80b0..e807099c1 100644 --- a/src/src/exicyclog.src +++ b/src/src/exicyclog.src @@ -1,7 +1,9 @@ #! /bin/sh +# Copyright (c) The Exim Maintainers 2023 # 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 # This script takes the following command line arguments: # -l dir Log file directory diff --git a/src/src/exigrep.src b/src/src/exigrep.src index 9eb9c454a..a425ad03b 100644 --- a/src/src/exigrep.src +++ b/src/src/exigrep.src @@ -1,5 +1,10 @@ #! PERL_COMMAND +# Copyright (c) The Exim Maintainers 2020 - 2023 +# Copyright (c) 2007-2017 University of Cambridge. +# See the file NOTICE for conditions of use and distribution. +# SPDX-License-Identifier: GPL-2.0-or-later + use warnings; use strict; BEGIN { pop @INC if $INC[-1] eq '.' }; @@ -8,10 +13,6 @@ use Pod::Usage; use Getopt::Long qw(:config no_ignore_case); use File::Basename; -# Copyright (c) 2007-2017 University of Cambridge. -# Copyright (c) The Exim Maintainers 2020 - 2021 -# See the file NOTICE for conditions of use and distribution. - # Except when they appear in comments, the following placeholders in this # source are replaced when it is turned into a runnable script: # diff --git a/src/src/exim.c b/src/src/exim.c index e200fc062..8111a4489 100644 --- a/src/src/exim.c +++ b/src/src/exim.c @@ -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,6 +49,8 @@ optimize out the tail recursion and so not make them too expensive. */ static void * function_store_malloc(PCRE2_SIZE size, void * tag) { +if (size > INT_MAX) + log_write(0, LOG_MAIN|LOG_PANIC_DIE, "excessive memory alloc request"); return store_malloc((int)size); } @@ -63,12 +65,15 @@ if (block) store_free(block); static void * function_store_get(PCRE2_SIZE size, void * tag) { +if (size > INT_MAX) + log_write(0, LOG_MAIN|LOG_PANIC_DIE, "excessive memory alloc request"); return store_get((int)size, GET_UNTAINTED); /* loses track of taint */ } static void function_store_nullfree(void * block, void * tag) { +/* We cannot free memory allocated using store_get() */ } @@ -232,7 +237,7 @@ va_end(ap); static void term_handler(int sig) { -exit(1); +exim_exit(EXIT_FAILURE); } @@ -847,7 +852,7 @@ exit(EXIT_FAILURE); /* fail if a length is too long */ static inline void -exim_len_fail_toolong(int itemlen, int maxlen, const char *description) +exim_len_fail_toolong(int itemlen, int maxlen, const char * description) { if (itemlen <= maxlen) return; @@ -858,8 +863,10 @@ exit(EXIT_FAILURE); /* only pass through the string item back to the caller if it's short enough */ static inline const uschar * -exim_str_fail_toolong(const uschar *item, int maxlen, const char *description) +exim_str_fail_toolong(const uschar * item, int maxlen, const char * description) { +if (!item) + exim_fail("exim: bad item for: %s\n", description); exim_len_fail_toolong(Ustrlen(item), maxlen, description); return item; } @@ -884,10 +891,10 @@ log_write(0, LOG_MAIN|LOG_PANIC, struct stat buf; if (0 == (fd < 0 ? stat(name, &buf) : fstat(fd, &buf))) -{ + { if (buf.st_uid == owner && buf.st_gid == group) return 0; log_write(0, LOG_MAIN|LOG_PANIC, "Wrong ownership on %s", name); -} + } else log_write(0, LOG_MAIN|LOG_PANIC, "Stat failed on %s: %s", name, strerror(errno)); #endif @@ -896,6 +903,18 @@ return -1; } +/* Bump the index for argv, checking for overflow, +and return the argument. */ + +static const uschar * +next_argv(const uschar ** argv, int * pi, int argc, const uschar * where) +{ +int i = *pi; +if (++i >= argc) exim_fail("exim: bad item for: %s\n", where); +return argv[*pi = i]; +} + + /************************************************* * Extract port from host address * *************************************************/ @@ -978,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; @@ -1086,6 +1108,12 @@ g = string_cat(g, US"Support for:"); #ifndef DISABLE_DNSSEC g = string_cat(g, US" DNSSEC"); #endif +#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 @@ -1132,9 +1160,6 @@ g = string_cat(g, US"Support for:"); #ifdef EXPERIMENTAL_DSN_INFO g = string_cat(g, US" Experimental_DSN_info"); #endif -#ifdef EXPERIMENTAL_ESMTP_LIMITS - g = string_cat(g, US" Experimental_ESMTP_Limits"); -#endif #ifdef EXPERIMENTAL_QUEUEFILE g = string_cat(g, US" Experimental_QUEUEFILE"); #endif @@ -1365,17 +1390,15 @@ Argument: the local part Returns: the local part, quoted if necessary */ -uschar * -local_part_quote(uschar *lpart) +const uschar * +local_part_quote(const uschar * lpart) { BOOL needs_quote = FALSE; gstring * g; -for (uschar * t = lpart; !needs_quote && *t != 0; t++) - { +for (const uschar * t = lpart; !needs_quote && *t; t++) needs_quote = !isalnum(*t) && strchr("!#$%&'*+-/=?^_`{|}~", *t) == NULL && (*t != '.' || t == lpart || t[1] == 0); - } if (!needs_quote) return lpart; @@ -1383,8 +1406,8 @@ g = string_catn(NULL, US"\"", 1); for (;;) { - uschar *nq = US Ustrpbrk(lpart, "\\\""); - if (nq == NULL) + uschar * nq = US Ustrpbrk(lpart, "\\\""); + if (!nq) { g = string_cat(g, lpart); break; @@ -1537,7 +1560,7 @@ Returns: DOES NOT RETURN */ static void -exim_usage(uschar *progname) +exim_usage(const uschar * progname) { /* Handle specific program invocation variants */ @@ -1687,8 +1710,10 @@ if (isupper(big_buffer[0])) if (macro_read_assignment(big_buffer)) printf("Defined macro '%s'\n", mlast->name); } +else if (Ustrncmp(big_buffer, "set,t ", 6) == 0) + printf("%s\n", acl_standalone_setvar(big_buffer+6, TRUE)); else if (Ustrncmp(big_buffer, "set ", 4) == 0) - printf("%s\n", acl_standalone_setvar(big_buffer+4)); + printf("%s\n", acl_standalone_setvar(big_buffer+4, FALSE)); else if ((s = expand_string(big_buffer))) printf("%s\n", CS s); else printf("Failed: %s\n", expand_string_message); @@ -1744,9 +1769,9 @@ Returns: EXIT_SUCCESS if terminated successfully */ int -main(int argc, char **cargv) +main(int argc, char ** cargv) { -uschar **argv = USS cargv; +const uschar ** argv = CUSS cargv; int arg_receive_timeout = -1; int arg_smtp_receive_timeout = -1; int arg_error_handling = error_handling; @@ -1795,20 +1820,20 @@ BOOL verify_address_mode = FALSE; BOOL verify_as_sender = FALSE; BOOL rcpt_verify_quota = FALSE; BOOL version_printed = FALSE; -uschar *alias_arg = NULL; -uschar *called_as = US""; -uschar *cmdline_syslog_name = NULL; -uschar *start_queue_run_id = NULL; -uschar *stop_queue_run_id = NULL; -uschar *expansion_test_message = NULL; -const uschar *ftest_domain = NULL; -const uschar *ftest_localpart = NULL; -const uschar *ftest_prefix = NULL; -const uschar *ftest_suffix = NULL; -uschar *log_oneline = NULL; -uschar *malware_test_file = NULL; -uschar *real_sender_address; -uschar *originator_home = US"/"; +const uschar * alias_arg = NULL; +const uschar * called_as = US""; +const uschar * cmdline_syslog_name = NULL; +const uschar * start_queue_run_id = NULL; +const uschar * stop_queue_run_id = NULL; +const uschar * expansion_test_message = NULL; +const uschar * ftest_domain = NULL; +const uschar * ftest_localpart = NULL; +const uschar * ftest_prefix = NULL; +const uschar * ftest_suffix = NULL; +uschar * log_oneline = NULL; +const uschar * malware_test_file = NULL; +const uschar * real_sender_address; +uschar * originator_home = US"/"; size_t sz; struct passwd *pw; @@ -2152,8 +2177,8 @@ on the second character (the one after '-'), to save some effort. */ for (i = 1; i < argc; i++) { BOOL badarg = FALSE; - uschar * arg = argv[i]; - uschar * argrest; + const uschar * arg = argv[i]; + const uschar * argrest; uschar switchchar; /* An argument not starting with '-' is the start of a recipients list; @@ -2320,9 +2345,9 @@ on the second character (the one after '-'), to save some effort. */ /* -bh: Host checking - an IP address must follow. */ case 'h': - if (!*argrest || Ustrcmp(argrest, "c") == 0) + if ( (!*argrest || Ustrcmp(argrest, "c") == 0) + && ++i < argc) { - if (++i >= argc) { badarg = TRUE; break; } sender_host_address = string_copy_taint( exim_str_fail_toolong(argv[i], EXIM_IPADDR_MAX, "-bh"), GET_TAINTED); @@ -2330,7 +2355,8 @@ on the second character (the one after '-'), to save some effort. */ f.host_checking_callout = *argrest == 'c'; message_logs = FALSE; } - else badarg = TRUE; + else + badarg = TRUE; break; /* -bi: This option is used by sendmail to initialize *the* alias file, @@ -2347,7 +2373,7 @@ on the second character (the one after '-'), to save some effort. */ case 'I': if (Ustrlen(argrest) >= 1 && *argrest == ':') { - uschar *p = argrest+1; + const uschar * p = argrest+1; info_flag = CMDINFO_HELP; if (Ustrlen(p)) if (strcmpic(p, CUS"sieve") == 0) @@ -2613,14 +2639,11 @@ on the second character (the one after '-'), to save some effort. */ reset_point = store_mark(); while (Ufgets(big_buffer, big_buffer_size, trust_list)) { - uschar *start = big_buffer, *nl; - while (*start && isspace(*start)) - start++; - if (*start != '/') + uschar * start = big_buffer, * nl; + if (Uskip_whitespace(&start) != '/') continue; - nl = Ustrchr(start, '\n'); - if (nl) - *nl = 0; + if ((nl = Ustrchr(start, '\n'))) + *nl = '\0'; trusted_configs[nr_configs++] = string_copy(start); if (nr_configs == nelem(trusted_configs)) break; @@ -2674,12 +2697,12 @@ on the second character (the one after '-'), to save some effort. */ #else { int ptr = 0; - macro_item *m; + macro_item * m; uschar name[24]; - uschar *s = argrest; + const uschar * s = argrest; opt_D_used = TRUE; - while (isspace(*s)) s++; + Uskip_whitespace(&s); if (*s < 'A' || *s > 'Z') exim_fail("exim: macro name set by -D must start with " @@ -2692,11 +2715,10 @@ on the second character (the one after '-'), to save some effort. */ } name[ptr] = 0; if (ptr == 0) { badarg = TRUE; break; } - while (isspace(*s)) s++; - if (*s != 0) + if (Uskip_whitespace(&s)) { if (*s++ != '=') { badarg = TRUE; break; } - while (isspace(*s)) s++; + Uskip_whitespace(&s); } for (m = macros_user; m; m = m->next) @@ -2830,10 +2852,14 @@ on the second character (the one after '-'), to save some effort. */ if (i+1 < argc) argrest = argv[++i]; else { badarg = TRUE; break; } (void) exim_str_fail_toolong(argrest, EXIM_DISPLAYMAIL_MAX, "-f"); if (!*argrest) - *(sender_address = store_get(1, GET_UNTAINTED)) = '\0'; /* Ensure writeable memory */ + { + uschar * s = store_get(1, GET_UNTAINTED); /* Ensure writeable memory */ + *s = '\0'; + sender_address = s; + } else { - uschar * temp = argrest + Ustrlen(argrest) - 1; + const uschar * temp = argrest + Ustrlen(argrest) - 1; while (temp >= argrest && isspace(*temp)) temp--; if (temp >= argrest && *temp == '.') f_end_dot = TRUE; allow_domain_literals = TRUE; @@ -2998,7 +3024,7 @@ on the second character (the one after '-'), to save some effort. */ case 'K': smtp_peer_options |= OPTION_CHUNKING; break; -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS /* -MCL: peer used LIMITS RCPTMAX and/or RCPTDOMAINMAX */ case 'L': if (++i < argc) continue_limit_mail = Uatoi(argv[i]); else badarg = TRUE; @@ -3151,7 +3177,8 @@ on the second character (the one after '-'), to save some effort. */ { msg_action = MSG_SETQUEUE; queue_name_dest = string_copy_taint( - exim_str_fail_toolong(argv[++i], EXIM_DRIVERNAME_MAX, "-MG"), + exim_str_fail_toolong(next_argv(argv, &i, argc, arg), + EXIM_DRIVERNAME_MAX, "-MG"), GET_TAINTED); } else if (Ustrcmp(argrest, "mad") == 0) msg_action = MSG_MARK_ALL_DELIVERED; @@ -3272,7 +3299,7 @@ on the second character (the one after '-'), to save some effort. */ /* -oB: Set a connection message max value for remote deliveries */ case 'B': { - uschar * p = argrest; + const uschar * p = argrest; if (!*p) if (i+1 < argc && isdigit((argv[i+1][0]))) p = argv[++i]; @@ -3363,36 +3390,36 @@ on the second character (the one after '-'), to save some effort. */ if (Ustrcmp(argrest, "a") == 0) sender_host_address = string_copy_taint( - exim_str_fail_toolong(argv[++i], EXIM_IPADDR_MAX, "-oMa"), - GET_TAINTED); + exim_str_fail_toolong(next_argv(argv, &i, argc, arg), + EXIM_IPADDR_MAX, "-oMa"), GET_TAINTED); /* -oMaa: Set authenticator name */ else if (Ustrcmp(argrest, "aa") == 0) sender_host_authenticated = string_copy_taint( - exim_str_fail_toolong(argv[++i], EXIM_DRIVERNAME_MAX, "-oMaa"), - GET_TAINTED); + exim_str_fail_toolong(next_argv(argv, &i, argc, arg), + EXIM_DRIVERNAME_MAX, "-oMaa"), GET_TAINTED); /* -oMas: setting authenticated sender */ else if (Ustrcmp(argrest, "as") == 0) authenticated_sender = string_copy_taint( - exim_str_fail_toolong(argv[++i], EXIM_EMAILADDR_MAX, "-oMas"), - GET_TAINTED); + exim_str_fail_toolong(next_argv(argv, &i, argc, arg), + EXIM_EMAILADDR_MAX, "-oMas"), GET_TAINTED); /* -oMai: setting authenticated id */ else if (Ustrcmp(argrest, "ai") == 0) authenticated_id = string_copy_taint( - exim_str_fail_toolong(argv[++i], EXIM_EMAILADDR_MAX, "-oMai"), - GET_TAINTED); + exim_str_fail_toolong(next_argv(argv, &i, argc, arg), + EXIM_EMAILADDR_MAX, "-oMai"), GET_TAINTED); /* -oMi: Set incoming interface address */ else if (Ustrcmp(argrest, "i") == 0) interface_address = string_copy_taint( - exim_str_fail_toolong(argv[++i], EXIM_IPADDR_MAX, "-oMi"), - GET_TAINTED); + exim_str_fail_toolong(next_argv(argv, &i, argc, arg), + EXIM_IPADDR_MAX, "-oMi"), GET_TAINTED); /* -oMm: Message reference */ @@ -3402,7 +3429,7 @@ on the second character (the one after '-'), to save some effort. */ exim_fail("-oMm must be a valid message ID\n"); if (!f.trusted_config) exim_fail("-oMm must be called by a trusted user/config\n"); - message_reference = argv[++i]; + message_reference = next_argv(argv, &i, argc, arg); } /* -oMr: Received protocol */ @@ -3412,26 +3439,32 @@ on the second character (the one after '-'), to save some effort. */ if (received_protocol) exim_fail("received_protocol is set already\n"); else - received_protocol = string_copy_taint( - exim_str_fail_toolong(argv[++i], EXIM_DRIVERNAME_MAX, "-oMr"), - GET_TAINTED); + if (++i >= argc) badarg = TRUE; + else + received_protocol = string_copy_taint( + exim_str_fail_toolong(argv[i], EXIM_DRIVERNAME_MAX, "-oMr"), + GET_TAINTED); /* -oMs: Set sender host name */ else if (Ustrcmp(argrest, "s") == 0) - sender_host_name = string_copy_taint( - exim_str_fail_toolong(argv[++i], EXIM_HOSTNAME_MAX, "-oMs"), - GET_TAINTED); + if (++i >= argc) badarg = TRUE; + else + sender_host_name = string_copy_taint( + exim_str_fail_toolong(argv[i], EXIM_HOSTNAME_MAX, "-oMs"), + GET_TAINTED); /* -oMt: Set sender ident */ else if (Ustrcmp(argrest, "t") == 0) - { - sender_ident_set = TRUE; - sender_ident = string_copy_taint( - exim_str_fail_toolong(argv[++i], EXIM_IDENTUSER_MAX, "-oMt"), - GET_TAINTED); - } + if (++i >= argc) badarg = TRUE; + else + { + sender_ident_set = TRUE; + sender_ident = string_copy_taint( + exim_str_fail_toolong(argv[i], EXIM_IDENTUSER_MAX, "-oMt"), + GET_TAINTED); + } /* Else a bad argument */ @@ -3459,7 +3492,9 @@ on the second character (the one after '-'), to save some effort. */ exim_fail("exim: only uid=%d or uid=%d can use -oP and -oPX " "(uid=%d euid=%d | %d)\n", root_uid, exim_uid, getuid(), geteuid(), real_uid); - if (!*argrest) override_pid_file_path = argv[++i]; + if (!*argrest) + if (++i < argc) override_pid_file_path = argv[i]; + else badarg = TRUE; else if (Ustrcmp(argrest, "X") == 0) delete_pid_file(); else badarg = TRUE; break; @@ -3487,10 +3522,9 @@ on the second character (the one after '-'), to save some effort. */ /* Limits: Is there a real limit we want here? 1024 is very arbitrary. */ case 'X': - if (*argrest) badarg = TRUE; + if (*argrest || ++i >= argc) badarg = TRUE; else override_local_interfaces = string_copy_taint( - exim_str_fail_toolong(argv[++i], 1024, "-oX"), - GET_TAINTED); + exim_str_fail_toolong(argv[i], 1024, "-oX"), GET_TAINTED); break; /* -oY: Override creation of daemon notifier socket */ @@ -3528,7 +3562,7 @@ on the second character (the one after '-'), to save some effort. */ which sets the host protocol and host name */ if (!*argrest) - if (i+1 < argc) argrest = argv[++i]; else { badarg = TRUE; break; } + argrest = next_argv(argv, &i, argc, arg); if (*argrest) { @@ -3614,8 +3648,14 @@ on the second character (the one after '-'), to save some effort. */ else { - int intvl = readconf_readtime(*argrest ? argrest : argv[++i], 0, FALSE); - if (intvl <= 0) + int intvl; + const uschar * s; + + if (*argrest) s = argrest; + else if (++i < argc) { badarg = TRUE; break; } + else s = argv[i]; + + if ((intvl = readconf_readtime(s, 0, FALSE)) <= 0) exim_fail("exim: bad time value %s: abandoned\n", argv[i]); for (qrunner * qq = qrunners; qq; qq = qq->next) @@ -3658,7 +3698,7 @@ on the second character (the one after '-'), to save some effort. */ in all cases provided there are no further characters in this argument. */ - alloc_onetime_qrunner(); + if (!qrunners) alloc_onetime_qrunner(); qrunners->queue_2stage = f.queue_2stage; if (*argrest) for (int i = 0; i < nelem(rsopts); i++) @@ -3706,8 +3746,8 @@ on the second character (the one after '-'), to save some effort. */ tested. Otherwise variability of clock ticks etc. cause problems. */ case 'T': - if (f.running_in_test_harness && Ustrcmp(argrest, "qt") == 0) - fudged_queue_times = string_copy_taint(argv[++i], GET_TAINTED); + if (f.running_in_test_harness && Ustrcmp(argrest, "qt") == 0 && ++i < argc) + fudged_queue_times = string_copy_taint(argv[i], GET_TAINTED); else badarg = TRUE; break; @@ -4432,7 +4472,7 @@ if (bi_option) if (bi_command && *bi_command) { int i = 0; - uschar *argv[3]; + const uschar * argv[3]; argv[i++] = bi_command; /* nonexpanded option so assume untainted */ if (alias_arg) argv[i++] = alias_arg; argv[i++] = NULL; @@ -4652,12 +4692,12 @@ if (malware_test_file) if ((result = malware_in_file(malware_test_file)) == FAIL) { printf("No malware found.\n"); - exit(EXIT_SUCCESS); + exim_exit(EXIT_SUCCESS); } if (result != OK) { printf("Malware lookup returned non-okay/fail: %d\n", result); - exit(EXIT_FAILURE); + exim_exit(EXIT_FAILURE); } if (malware_name) printf("Malware found: %s\n", malware_name); @@ -4666,7 +4706,7 @@ if (malware_test_file) #else printf("Malware scanning not enabled at compile time.\n"); #endif - exit(EXIT_FAILURE); + exim_exit(EXIT_FAILURE); } /* Handle a request to list the delivery queue */ @@ -4675,7 +4715,7 @@ if (list_queue) { set_process_info("listing the queue"); queue_list(list_queue_option, argv + recipients_arg, argc - recipients_arg); - exit(EXIT_SUCCESS); + exim_exit(EXIT_SUCCESS); } /* Handle a request to count the delivery queue */ @@ -4684,7 +4724,7 @@ if (count_queue) { set_process_info("counting the queue"); fprintf(stdout, "%u\n", queue_count()); - exit(EXIT_SUCCESS); + exim_exit(EXIT_SUCCESS); } /* Handle actions on specific messages, except for the force delivery and @@ -4723,7 +4763,7 @@ if (msg_action_arg > 0 && msg_action != MSG_DELIVER && msg_action != MSG_LOAD) else if (!queue_action(argv[msg_action_arg], msg_action, argv, argc, recipients_arg)) yield = EXIT_FAILURE; - exit(yield); + exim_exit(yield); } /* We used to set up here to skip reading the ACL section, on @@ -4761,7 +4801,7 @@ if (rcpt_verify_quota) exim_fail("exim: missing recipient for quota check\n"); else { - verify_quota(argv[recipients_arg]); + verify_quota(US argv[recipients_arg]); /*XXX we lose track of const here */ exim_exit(EXIT_SUCCESS); } @@ -5028,6 +5068,8 @@ for (i = 0;;) /* If a pattern for matching the gecos field was supplied, apply it and then expand the name string. */ + GET_OPTION("gecos_pattern"); + GET_OPTION("gecos_name"); if (gecos_pattern && gecos_name) { const pcre2_code *re; @@ -5073,6 +5115,7 @@ any setting of unknown_login overrides the actual name. */ if (!originator_login || f.running_in_test_harness) { + GET_OPTION("unknown_login"); if (unknown_login) { originator_login = expand_string(unknown_login); @@ -5123,7 +5166,7 @@ if (f.daemon_listen || f.inetd_wait_mode || is_multiple_qrun()) (void)gettimeofday(&t0, NULL); # endif if (!tls_dropprivs_validate_require_cipher(FALSE)) - exit(1); + exim_exit(EXIT_FAILURE); # ifdef MEASURE_TIMING report_time_since(&t0, US"validate_ciphers (delta)"); # endif @@ -5304,6 +5347,7 @@ if (expansion_test) else if (expansion_test_message) { + uschar * rme = expand_string(recipients_max); int save_stdin = dup(0); int fd = Uopen(expansion_test_message, O_RDONLY, 0); if (fd < 0) @@ -5312,6 +5356,7 @@ if (expansion_test) (void) dup2(fd, 0); filter_test = FTEST_USER; /* Fudge to make it look like filter test */ message_ended = END_NOTENDED; + recipients_max_expanded = atoi(CCS rme); read_message_body(receive_msg(extract_recipients)); message_linecount += body_linecount; (void)dup2(save_stdin, 0); @@ -5370,17 +5415,18 @@ for hosts that want to play several parts at once. We need to ensure that it is set for host checking, and for receiving messages. */ smtp_active_hostname = primary_hostname; -if (raw_active_hostname != NULL) +GET_OPTION("smtp_active_hostname"); +if (raw_active_hostname) { - uschar *nah = expand_string(raw_active_hostname); - if (nah == NULL) + uschar * nah = expand_string(raw_active_hostname); + if (!nah) { if (!f.expand_string_forcedfail) log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to expand \"%s\" " "(smtp_active_hostname): %s", raw_active_hostname, expand_string_message); } - else if (nah[0] != 0) smtp_active_hostname = nah; + else if (nah[0]) smtp_active_hostname = nah; } /* Handle host checking: this facility mocks up an incoming SMTP call from a @@ -5404,11 +5450,14 @@ if (host_checking) } /* In case the given address is a non-canonical IPv6 address, canonicalize - it. The code works for both IPv4 and IPv6, as it happens. */ + it. Use the compressed form for IPv6. */ size = host_aton(sender_host_address, x); sender_host_address = store_get(48, GET_UNTAINTED); /* large enough for full IPv6 */ - (void)host_nmtoa(size, x, -1, sender_host_address, ':'); + if (size == 1) + (void) host_nmtoa(size, x, -1, sender_host_address, ':'); + else + (void) ipv6_nmtoa(x, sender_host_address); /* Now set up for testing */ @@ -5638,6 +5687,7 @@ if (smtp_input) else { + GET_OPTION("message_size_limit"); thismessage_size_limit = expand_string_integer(message_size_limit, TRUE); if (expand_string_message) if (thismessage_size_limit == -1) @@ -5718,8 +5768,8 @@ for (BOOL more = TRUE; more; ) int rc; if ((rc = smtp_setup_msg()) > 0) { - if (real_sender_address != NULL && - !receive_check_set_sender(sender_address)) + if ( real_sender_address + && !receive_check_set_sender(sender_address)) { sender_address = raw_sender = real_sender_address; sender_address_unrewritten = NULL; @@ -5730,14 +5780,18 @@ for (BOOL more = TRUE; more; ) the very end. The result of the ACL is ignored (as for other non-SMTP messages). It is run for its potential side effects. */ - if (smtp_batched_input && acl_not_smtp_start != NULL) - { - uschar *user_msg, *log_msg; - f.enable_dollar_recipients = TRUE; - (void)acl_check(ACL_WHERE_NOTSMTP_START, NULL, acl_not_smtp_start, - &user_msg, &log_msg); - f.enable_dollar_recipients = FALSE; - } + if (smtp_batched_input) + { + GET_OPTION("acl_not_smtp_start"); + if (acl_not_smtp_start) + { + uschar * user_msg, * log_msg; + f.enable_dollar_recipients = TRUE; + (void)acl_check(ACL_WHERE_NOTSMTP_START, NULL, acl_not_smtp_start, + &user_msg, &log_msg); + f.enable_dollar_recipients = FALSE; + } + } /* Now get the data for the message */ @@ -5766,9 +5820,11 @@ for (BOOL more = TRUE; more; ) else { - int rcount = 0; - int count = argc - recipients_arg; - uschar **list = argv + recipients_arg; + uschar * rme = expand_string(recipients_max); + int rcount = 0, count = argc - recipients_arg; + const uschar ** list = argv + recipients_arg; + + recipients_max_expanded = atoi(CCS rme); /* These options cannot be changed dynamically for non-SMTP messages */ @@ -5796,15 +5852,19 @@ for (BOOL more = TRUE; more; ) while (*s) { BOOL finished = FALSE; - uschar *recipient; - uschar *ss = parse_find_address_end(s, FALSE); + uschar * recipient; + uschar * ss = parse_find_address_end(s, FALSE); if (*ss == ',') *ss = 0; else finished = TRUE; /* Check max recipients - if -t was used, these aren't recipients */ - if (recipients_max > 0 && ++rcount > recipients_max && - !extract_recipients) + if ( recipients_max_expanded > 0 && ++rcount > recipients_max_expanded + && !extract_recipients) + { + DEBUG(D_all) debug_printf("excess reipients (max %d)\n", + recipients_max_expanded); + if (error_handling == ERRORS_STDERR) { fprintf(stderr, "exim: too many recipients\n"); @@ -5814,6 +5874,7 @@ for (BOOL more = TRUE; more; ) return moan_to_sender(ERRMESS_TOOMANYRECIP, NULL, NULL, stdin, TRUE)? errors_sender_rc : EXIT_FAILURE; + } #ifdef SUPPORT_I18N { @@ -5838,6 +5899,10 @@ for (BOOL more = TRUE; more; ) } if (!recipient) + { + DEBUG(D_all) debug_printf("bad recipient address \"%s\": %s\n", + string_printing(list[i]), errmess); + if (error_handling == ERRORS_STDERR) { fprintf(stderr, "exim: bad recipient address \"%s\": %s\n", @@ -5854,11 +5919,12 @@ for (BOOL more = TRUE; more; ) moan_to_sender(ERRMESS_BADARGADDRESS, &eblock, NULL, stdin, TRUE)? errors_sender_rc : EXIT_FAILURE; } + } receive_add_recipient(string_copy_taint(recipient, GET_TAINTED), -1); s = ss; if (!finished) - while (*(++s) != 0 && (*s == ',' || isspace(*s))); + while (*++s && (*s == ',' || isspace(*s))); } } @@ -5879,9 +5945,10 @@ for (BOOL more = TRUE; more; ) ignored; rejecting here would just add complication, and it can just as well be done later. Allow $recipients to be visible in the ACL. */ + GET_OPTION("acl_not_smtp_start"); if (acl_not_smtp_start) { - uschar *user_msg, *log_msg; + uschar * user_msg, * log_msg; f.enable_dollar_recipients = TRUE; (void)acl_check(ACL_WHERE_NOTSMTP_START, NULL, acl_not_smtp_start, &user_msg, &log_msg); @@ -6132,3 +6199,5 @@ return 0; /* To stop compiler warning */ /* End of exim.c */ +/* vi: aw ai sw=2 +*/ diff --git a/src/src/exim.h b/src/src/exim.h index ccf14f0fd..9bf5dcdfc 100644 --- a/src/src/exim.h +++ b/src/src/exim.h @@ -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 */ @@ -127,16 +127,6 @@ making unique names. */ # define EXIM_ARITH_MIN (-EXIM_ARITH_MAX - 1) #endif -/* Some systems have PATH_MAX and some have MAX_PATH_LEN. */ - -#ifndef PATH_MAX -# ifdef MAX_PATH_LEN -# define PATH_MAX MAX_PATH_LEN -# else -# define PATH_MAX 1024 -# endif -#endif - /* RFC 5321 specifies that the maximum length of a local-part is 64 octets and the maximum length of a domain is 255 octets, but then also defines the maximum length of a forward/reverse path as 256 not 64+1+255. @@ -532,7 +522,9 @@ 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" @@ -569,7 +561,7 @@ requires various things that are set therein. */ #endif #ifdef ENABLE_DISABLE_FSYNC -# define EXIMfsync(f) (disable_fsync? 0 : fsync(f)) +# define EXIMfsync(f) (disable_fsync ? 0 : fsync(f)) #else # define EXIMfsync(f) fsync(f) #endif diff --git a/src/src/exim_checkaccess.src b/src/src/exim_checkaccess.src index 159d9a472..9615443db 100755 --- a/src/src/exim_checkaccess.src +++ b/src/src/exim_checkaccess.src @@ -1,7 +1,9 @@ #! /bin/sh +# Copyright (c) The Exim Maintainers 2023 # Copyright (c) University of Cambridge, 1995 - 2007 # See the file NOTICE for conditions of use and distribution. +# SPDX-License-Identifier: GPL-2.0-or-later # Except when they appear in comments, the following placeholders in this # source are replaced when it is turned into a runnable script: diff --git a/src/src/exim_dbmbuild.c b/src/src/exim_dbmbuild.c index 43628234d..05387aa3f 100644 --- a/src/src/exim_dbmbuild.c +++ b/src/src/exim_dbmbuild.c @@ -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 */ @@ -76,14 +76,6 @@ uschar * queue_name; BOOL split_spool_directory; -/* These introduced by the taintwarn handling */ -rmark -store_mark_3(const char *func, int linenumber) -{ return NULL; } -#ifdef ALLOW_INSECURE_TAINTED_DATA -BOOL allow_insecure_tainted_data; -#endif - /******************************************************************************/ @@ -177,7 +169,7 @@ BOOL lowercase = TRUE; BOOL warn = TRUE; BOOL duperr = TRUE; BOOL lastdup = FALSE; -#if !defined (USE_DB) && !defined(USE_TDB) && !defined(USE_GDBM) +#if !defined (USE_DB) && !defined(USE_TDB) && !defined(USE_GDBM) && !defined(USE_SQLITE) int is_db = 0; struct stat statbuf; #endif @@ -207,7 +199,7 @@ while (argc > 1) if (argc != 3) { printf("usage: exim_dbmbuild [-nolc] \n"); - exit(1); + exit(EXIT_FAILURE); } if (Ustrcmp(argv[arg], "-") == 0) @@ -215,17 +207,17 @@ if (Ustrcmp(argv[arg], "-") == 0) else if (!(f = fopen(argv[arg], "rb"))) { printf("exim_dbmbuild: unable to open %s: %s\n", argv[arg], strerror(errno)); - exit(1); + exit(EXIT_FAILURE); } /* By default Berkeley db does not put extensions on... which can be painful! */ -#if defined(USE_DB) || defined(USE_TDB) || defined(USE_GDBM) +#if defined(USE_DB) || defined(USE_TDB) || defined(USE_GDBM) && !defined(USE_SQLITE) if (Ustrcmp(argv[arg], argv[arg+1]) == 0) { printf("exim_dbmbuild: input and output filenames are the same\n"); - exit(1); + exit(EXIT_FAILURE); } #endif @@ -235,7 +227,7 @@ if (Ustrcmp(argv[arg], argv[arg+1]) == 0) if (strlen(argv[arg+1]) > sizeof(temp_dbmname) - 20) { printf("exim_dbmbuild: output filename is ridiculously long\n"); - exit(1); + exit(EXIT_FAILURE); } Ustrcpy(temp_dbmname, US argv[arg+1]); @@ -255,13 +247,13 @@ if (!(d = exim_dbopen(temp_dbmname, dirname, O_RDWR|O_CREAT|O_EXCL, 0644))) printf("exim_dbmbuild: unable to create %s: %s\n", temp_dbmname, strerror(errno)); (void)fclose(f); - exit(1); + exit(EXIT_FAILURE); } /* Unless using native db calls, see if we have created .db; if not, assume .dir & .pag */ -#if !defined(USE_DB) && !defined(USE_TDB) && !defined(USE_GDBM) +#if !defined(USE_DB) && !defined(USE_TDB) && !defined(USE_GDBM) && !defined(USE_SQLITE) sprintf(CS real_dbmname, "%s.db", temp_dbmname); is_db = Ustat(real_dbmname, &statbuf) == 0; #endif @@ -333,7 +325,8 @@ while (Ufgets(line, max_insize, f) != NULL) exim_datum_data_set(&content, buffer); exim_datum_size_set(&content, bptr - buffer + add_zero); - switch(rc = exim_dbputb(d, &key, &content)) + rc = exim_dbputb(d, &key, &content); + switch(rc) { case EXIM_DBPUTB_OK: count++; @@ -379,7 +372,7 @@ while (Ufgets(line, max_insize, f) != NULL) else { keystart = s; - while (*s != 0 && *s != ':' && !isspace(*s)) s++; + while (*s && *s != ':' && !isspace(*s)) s++; exim_datum_size_set(&key, s - keystart + add_zero); } @@ -401,11 +394,11 @@ while (Ufgets(line, max_insize, f) != NULL) keybuffer[i] = 0; started = 1; - while (isspace(*s))s++; + while (isspace(*s)) s++; if (*s == ':') { s++; - while (isspace(*s))s++; + while (isspace(*s)) s++; } if (*s != 0) { @@ -423,7 +416,8 @@ if (started) exim_datum_data_set(&content, buffer); exim_datum_size_set(&content, bptr - buffer + add_zero); - switch(rc = exim_dbputb(d, &key, &content)) + rc = exim_dbputb(d, &key, &content); + switch(rc) { case EXIM_DBPUTB_OK: count++; @@ -462,7 +456,7 @@ if (yield == 0 || yield == 1) printf("%d duplicate key%s \n", dupcount, (dupcount > 1)? "s" : ""); } - #if defined(USE_DB) || defined(USE_TDB) || defined(USE_GDBM) +#if defined(USE_DB) || defined(USE_TDB) || defined(USE_GDBM) || defined(USE_SQLITE) Ustrcpy(real_dbmname, temp_dbmname); Ustrcpy(buffer, US argv[arg+1]); if (Urename(real_dbmname, buffer) != 0) @@ -470,7 +464,7 @@ if (yield == 0 || yield == 1) printf("Unable to rename %s as %s\n", real_dbmname, buffer); return 1; } - #else +#else /* Rename a single .db file */ @@ -506,7 +500,7 @@ if (yield == 0 || yield == 1) } } - #endif /* USE_DB || USE_TDB || USE_GDBM */ +#endif /* USE_DB || USE_TDB || USE_GDBM || USE_SQLITE */ } /* Otherwise unlink the temporary files. */ @@ -514,7 +508,7 @@ if (yield == 0 || yield == 1) else { printf("dbmbuild abandoned\n"); -#if defined(USE_DB) || defined(USE_TDB) || defined(USE_GDBM) +#if defined(USE_DB) || defined(USE_TDB) || defined(USE_GDBM) || defined(USE_SQLITE) /* We created it, so safe to delete despite the name coming from outside */ /* coverity[tainted_string] */ Uunlink(temp_dbmname); @@ -531,10 +525,12 @@ else sprintf(CS real_dbmname, "%s.pag", temp_dbmname); Uunlink(real_dbmname); } -#endif /* USE_DB || USE_TDB */ +#endif /* USE_DB || USE_TDB || USE_GDBM || USE_SQLITE */ } return yield; } /* End of exim_dbmbuild.c */ +/* se aw ai sw=2 +*/ diff --git a/src/src/exim_dbutil.c b/src/src/exim_dbutil.c index b2f5f6028..397b1162e 100644 --- a/src/src/exim_dbutil.c +++ b/src/src/exim_dbutil.c @@ -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 */ @@ -81,11 +81,6 @@ uschar * queue_name; BOOL split_spool_directory; -/* These introduced by the taintwarn handling */ -#ifdef ALLOW_INSECURE_TAINTED_DATA -BOOL allow_insecure_tainted_data; -#endif - /******************************************************************************/ @@ -287,78 +282,77 @@ 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) +dbblock->lockfd = -1; +if (exim_lockfile_needed()) { - printf("** Failed to open database lock file %s: %s\n", filename, - strerror(errno)); - return NULL; - } + if ((dbblock->lockfd = Uopen(filename, flags, 0)) < 0) + { + printf("** Failed to open database lock file %s: %s\n", filename, + strerror(errno)); + return NULL; + } -/* Now we must get a lock on the opened lock file; do this with a blocking -lock that times out. */ + /* Now we must get a lock on the opened lock file; do this with a blocking + lock that times out. */ -lock_data.l_type = read_only ? F_RDLCK : F_WRLCK; -lock_data.l_whence = lock_data.l_start = lock_data.l_len = 0; + lock_data.l_type = read_only ? F_RDLCK : F_WRLCK; + lock_data.l_whence = lock_data.l_start = lock_data.l_len = 0; -sigalrm_seen = FALSE; -os_non_restarting_signal(SIGALRM, sigalrm_handler); -ALARM(EXIMDB_LOCK_TIMEOUT); -rc = fcntl(dbblock->lockfd, F_SETLKW, &lock_data); -ALARM_CLR(0); + sigalrm_seen = FALSE; + os_non_restarting_signal(SIGALRM, sigalrm_handler); + ALARM(EXIMDB_LOCK_TIMEOUT); + rc = fcntl(dbblock->lockfd, F_SETLKW, &lock_data); + ALARM_CLR(0); -if (sigalrm_seen) errno = ETIMEDOUT; -if (rc < 0) - { - printf("** Failed to get %s lock for %s: %s", - flags & O_WRONLY ? "write" : "read", - filename, - errno == ETIMEDOUT ? "timed out" : strerror(errno)); - (void)close(dbblock->lockfd); - return NULL; - } + if (sigalrm_seen) errno = ETIMEDOUT; + if (rc < 0) + { + printf("** Failed to get %s lock for %s: %s", + read_only ? "read" : "write", + filename, + errno == ETIMEDOUT ? "timed out" : strerror(errno)); + (void)close(dbblock->lockfd); + return NULL; + } -/* 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. */ + /* 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), - #ifdef USE_DB + printf("** Failed to open DBM file %s for %s: %s%s\n", filename, + read_only ? "reading" : "writing", strerror(errno), +#ifdef USE_DB " (or Berkeley DB error while opening)" - #else +#else "" - #endif +#endif ); - (void)close(dbblock->lockfd); + if (dbblock->lockfd >= 0) (void)close(dbblock->lockfd); return NULL; } @@ -373,17 +367,17 @@ return dbblock; *************************************************/ /* Closing a file automatically unlocks it, so after closing the database, just -close the lock file. +close the lock file if there was one. Argument: a pointer to an open database block Returns: nothing */ void -dbfn_close(open_db *dbblock) +dbfn_close(open_db * dbp) { -exim_dbclose(dbblock->dbptr); -(void)close(dbblock->lockfd); +exim_dbclose(dbp->dbptr); +if (dbp->lockfd >= 0) (void) close(dbp->lockfd); } @@ -407,12 +401,13 @@ Returns: a pointer to the retrieved record, or */ void * -dbfn_read_with_length(open_db *dbblock, const uschar *key, int *length) +dbfn_read_with_length(open_db * dbblock, const uschar * key, int * length) { -void *yield; +void * yield; EXIM_DATUM key_datum, result_datum; int klen = Ustrlen(key) + 1; uschar * key_copy = store_get(klen, key); +unsigned dlen; memcpy(key_copy, key, klen); @@ -426,9 +421,10 @@ if (!exim_dbget(dbblock->dbptr, &key_datum, &result_datum)) return NULL; /* Assume for now that anything stored could have been tainted. Properly we should store the taint status along with the data. */ -yield = store_get(exim_datum_size_get(&result_datum), GET_TAINTED); -memcpy(yield, exim_datum_data_get(&result_datum), exim_datum_size_get(&result_datum)); -if (length) *length = exim_datum_size_get(&result_datum); +dlen = exim_datum_size_get(&result_datum); +yield = store_get(dlen, GET_TAINTED); +memcpy(yield, exim_datum_data_get(&result_datum), dlen); +if (length) *length = dlen; exim_datum_free(&result_datum); /* Some DBM libs require freeing */ return yield; @@ -518,7 +514,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 */ @@ -573,7 +569,7 @@ argc -= optind; argv += optind; spool_directory = argv[0]; if (!(dbm = dbfn_open(argv[1], O_RDONLY, &dbblock, FALSE, TRUE))) - exit(1); + exit(EXIT_FAILURE); /* Scan the file, formatting the information for each entry. Note that data is returned in a malloc'ed block, in order that it be @@ -626,7 +622,7 @@ for (uschar * key = dbfn_scan(dbm, TRUE, &cursor); print_time(retry->first_failed)); printf("%s ", print_time(retry->last_try)); printf("%s %s\n", print_time(retry->next_try), - (retry->expired)? "*" : ""); + retry->expired ? "*" : ""); break; case type_wait: @@ -1214,7 +1210,7 @@ printf("Tidying Exim hints database %s/db/%s\n", argv[1], argv[2]); spool_directory = argv[1]; if (!(dbm = dbfn_open(argv[2], O_RDWR, &dbblock, FALSE, TRUE))) - exit(1); + exit(EXIT_FAILURE); /* Prepare for building file names */ @@ -1425,3 +1421,5 @@ return 0; #endif /* EXIM_TIDYDB */ /* End of exim_dbutil.c */ +/* vi: aw ai sw=2 +*/ diff --git a/src/src/exim_lock.c b/src/src/exim_lock.c index 363c1bc71..b37f962d2 100644 --- a/src/src/exim_lock.c +++ b/src/src/exim_lock.c @@ -103,7 +103,7 @@ usage(void) printf("usage: exim_lock [-v] [-q] [-lockfile] [-fcntl] [-flock] [-mbx]\n" " [-retries ] [-interval ] [-timeout ] [-restore-times]\n" " [command]\n"); -exit(1); +exit(EXIT_FAILURE); } @@ -227,7 +227,7 @@ if (use_flock) { printf("exim_lock: can't use flock() because it was not available in the\n" " operating system when exim_lock was compiled\n"); - exit(1); + exit(EXIT_FAILURE); } #endif @@ -271,14 +271,14 @@ if (*filename == '~') if (pw == NULL) { printf("exim_lock: unable to expand file name %s\n", argv[i-1]); - exit(1); + exit(EXIT_FAILURE); } if ((int)strlen(pw->pw_dir) + (int)strlen(filename) + 1 > sizeof(buffer)) { printf("exim_lock: expanded file name %s%s is too long", pw->pw_dir, filename); - exit(1); + exit(EXIT_FAILURE); } strcpy(buffer, pw->pw_dir); @@ -294,7 +294,7 @@ if (use_lockfile) if (uname(&s) < 0) { printf("exim_lock: failed to find host name using uname()\n"); - exit(1); + exit(EXIT_FAILURE); } primary_hostname = s.nodename; @@ -331,7 +331,7 @@ for (j = 0; j < lock_retries; j++) { printf("exim_lock: failed to create hitching post %s: %s\n", hitchname, strerror(errno)); - exit(1); + exit(EXIT_FAILURE); } /* Apply hitching post algorithm. */ diff --git a/src/src/exim_msgdate.src b/src/src/exim_msgdate.src index d68aa392b..4efee04f8 100755 --- a/src/src/exim_msgdate.src +++ b/src/src/exim_msgdate.src @@ -1,13 +1,13 @@ #!PERL_COMMAND -T # +# Copyright (c) The Exim Maintainers 2023 +# SPDX-License-Identifier: GPL-2.0-or-later +# # Utility to convert an exim message-id to a human readable form # # https://bugs.exim.org/show_bug.cgi?id=2956 # Written by Andrew C Aitchison # -# Copyright (c) 2023 The Exim Maintainers 2023 -# SPDX-License-Identifier: GPL-2.0-or-later -# # Portions taken from exicyclog.src, which is # Copyright (c) University of Cambridge, 1995 - 2015 # See the file NOTICE for conditions of use and distribution. diff --git a/src/src/eximon.src b/src/src/eximon.src index 77bd88050..88d7948d7 100644 --- a/src/src/eximon.src +++ b/src/src/eximon.src @@ -4,8 +4,10 @@ # The build process concatenates on the front of this various settings from # os-specific files and from the user's configuration file. +# Copyright (c) The Exim Maintainers 2023 # Copyright (c) 2004 - 2015 University of Cambridge. # See the file NOTICE for conditions of use and distribution. +# SPDX-License-Identifier: GPL-2.0-or-later # Except when they appear in comments, the following placeholders in this # source are replaced when it is turned into a runnable script: diff --git a/src/src/eximstats.src b/src/src/eximstats.src index b961df8e1..232b3d135 100644 --- a/src/src/eximstats.src +++ b/src/src/eximstats.src @@ -1,7 +1,9 @@ #!PERL_COMMAND +# Copyright (c) The Exim Maintainers 2023 # Copyright (c) 2001-2017 University of Cambridge. # See the file NOTICE for conditions of use and distribution. +# SPDX-License-Identifier: GPL-2.0-or-later # Perl script to generate statistics from one or more Exim log files. diff --git a/src/src/exinext.src b/src/src/exinext.src index 30e08a5e2..882db6873 100644 --- a/src/src/exinext.src +++ b/src/src/exinext.src @@ -1,5 +1,6 @@ #! /bin/sh +# Copyright (c) The Exim Maintainers 2023 - 2024 # Copyright (c) University of Cambridge, 1995 - 2007 # See the file NOTICE for conditions of use and distribution. @@ -162,6 +163,7 @@ perl - $exim_path "$eximmacdef" $argone $spool_directory $qualify_domain $config if (scalar(@list) == 0) { + push(@list, $subject) if $subject =~ /^\w{6}-\w{11}-\w{4}$/; push(@list, $subject) if $subject =~ /^\w{6}-\w{6}-\w{2}$/; if ($subject !~ /\@/ && $subject !~ /\./) @@ -193,45 +195,18 @@ perl - $exim_path "$eximmacdef" $argone $spool_directory $qualify_domain $config $printed = 1; if (/^\s*T:[^:\s]*:/) { + # We rely on non-space-containing strings, for parsing + ($key,$error,$error2,$text) = /^\s*T:(\S+)\s+(\S+)\s+(\S+)\s*(.*)$/; - # Parsing the keys is a nightmare because of IPv6. The design of the - # format for the keys is a complete shambles. All my fault (PH). But - # I don't want to change it just for this purpose. If they key - # contains more than 3 colons, we have an IPv6 address, because - # an IPv6 address must contain at least two colons. - - # Deal with IPv4 addresses (3 colons or fewer) - - if ($key !~ /:([^:]*?:){3}/) - { - ($host,$ip,$port,$msgid) = $key =~ - /^([^:]*):([^:]*)(?::([^:]*)(?::(\S*)|)|)/; - } - - # Deal with IPv6 addresses; sorting out the colons is a complete - # mess. We should be able to find the host name and IP address from - # further in the message. That seems the easiest escape plan here. We - # can use those to match the rest of the key. - - else - { - ($host,$ip) = $text =~ /host\s(\S+)\s\[([^]]+)\]/; - if (defined $host) - { - ($port,$msgid) = $key =~ - /^$host:$ip(?::([^:]*)(?::(\S*)|)|)/; - } - - # This will probably be wrong... - - else - { - ($host,$ip) = $key =~ /([^:]*):(.*)/; - } - } - - printf("Transport: %s [%s]", $host, $ip); + ($host,$ip,$port,$msgid) = $key =~ + /^([^:[]*|\[[^]]*\]) # host (could be an ip) + :([^:[]*|\[[^]]*\]) # ip + (?::(\d{1,5}))? # maybe port + (?::(\S{23}))? # maybe msgid + $/x; + + printf("Transport: %s %s", $host, $ip); print ":$port" if defined $port; print " $msgid" if defined $msgid; print " error $error: $text\n"; diff --git a/src/src/exipick.src b/src/src/exipick.src index c3830f4a5..991128c1d 100644 --- a/src/src/exipick.src +++ b/src/src/exipick.src @@ -1,4 +1,6 @@ #!PERL_COMMAND + +# Copyright (c) The Exim Maintainers 2023 # Copyright (c) 1995 - 2018 University of Cambridge. # SPDX-License-Identifier: GPL-2.0-or-later # See the file NOTICE for conditions of use and distribution. @@ -434,10 +436,10 @@ sub get_all_msgs { if ($e =~ /^[a-zA-Z0-9]$/) { opendir(DD, "$d/$e") || next; foreach my $f (grep !/^\./, readdir(DD)) { - push(@m, { message => $1, path => "$d/$e" }) if ($f =~ /^(.{16})-H$/); + push(@m, { message => $1, path => "$d/$e" }) if ($f =~ /^(.{23}|.{16})-H$/); } closedir(DD); - } elsif ($e =~ /^(.{16})-H$/) { + } elsif ($e =~ /^(.{23}|.{16})-H$/) { push(@m, { message => $1, path => $d }); } } diff --git a/src/src/exiwhat.src b/src/src/exiwhat.src index 812f0b149..425e789ad 100644 --- a/src/src/exiwhat.src +++ b/src/src/exiwhat.src @@ -1,7 +1,9 @@ #! /bin/sh +# Copyright (c) The Exim Maintainers 2023 # Copyright (c) University of Cambridge, 1995 - 2007 # See the file NOTICE for conditions of use and distribution. +# SPDX-License-Identifier: GPL-2.0-or-later # Except when they appear in comments, the following placeholders in this # source are replaced when it is turned into a runnable script: diff --git a/src/src/expand.c b/src/src/expand.c index bcfa60fb6..e7d089909 100644 --- a/src/src/expand.c +++ b/src/src/expand.c @@ -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 @@ -1262,7 +1266,8 @@ while (*s) while (*s && *s != '=' && !isspace(*s)) s++; dkeylength = s - dkey; - if (Uskip_whitespace(&s) == '=') while (isspace(*++s)); + if (Uskip_whitespace(&s) == '=') + while (isspace(*++s)) ; data = string_dequote(&s); if (length == dkeylength && strncmpic(key, dkey, length) == 0) @@ -1804,20 +1809,19 @@ return g; /* A recipients list is available only during system message filtering, during ACL processing after DATA, and while expanding pipe commands generated from a system filter, but not elsewhere. Note that this does -not check for comman in the elements, and uses comma-space as seperator - +not check for commas in the elements, and uses comma-space as seperator - so cannot be used as an exim list as-is. */ static uschar * fn_recipients(void) { -uschar * s; gstring * g = NULL; if (!f.enable_dollar_recipients) return NULL; for (int i = 0; i < recipients_count; i++) { - s = recipients_list[i].address; + const uschar * s = recipients_list[i].address; g = string_append2_listele_n(g, US", ", s, Ustrlen(s)); } gstring_release_unused(g); @@ -2763,9 +2767,17 @@ switch(cond_type = identify_operator(&s, &opname)) case ECOND_ISIP: case ECOND_ISIP4: case ECOND_ISIP6: - rc = string_is_ip_address(sub[0], NULL); - *yield = ((cond_type == ECOND_ISIP)? (rc != 0) : - (cond_type == ECOND_ISIP4)? (rc == 4) : (rc == 6)) == testfor; + { + const uschar *errp; + const uschar **errpp; + DEBUG(D_expand) errpp = &errp; else errpp = 0; + if (0 == (rc = string_is_ip_addressX(sub[0], NULL, errpp))) + DEBUG(D_expand) debug_printf("failed: %s\n", errp); + + *yield = ( cond_type == ECOND_ISIP ? rc != 0 : + cond_type == ECOND_ISIP4 ? rc == 4 : rc == 6) == testfor; + } + break; /* Various authentication tests - all optionally compiled */ @@ -4107,7 +4119,7 @@ if (!*error) if (*s != ')') *error = US"expecting closing parenthesis"; else - while (isspace(*++s)); + while (isspace(*++s)) ; else if (*s) *error = US"expecting operator"; *sptr = s; @@ -4489,30 +4501,17 @@ return yield; /************************************************/ static void debug_expansion_interim(const uschar * what, const uschar * value, int nchar, - BOOL skipping) + esi_flags flags) { -DEBUG(D_noutf8) - debug_printf_indent("|"); -else - debug_printf_indent(UTF8_VERT_RIGHT); +debug_printf_indent("%V", "K"); for (int fill = 11 - Ustrlen(what); fill > 0; fill--) - DEBUG(D_noutf8) - debug_printf("-"); - else - debug_printf(UTF8_HORIZ); + debug_printf("%V", "-"); -debug_printf("%s: %.*s\n", what, nchar, value); +debug_printf("%s: %.*W\n", what, nchar, value); if (is_tainted(value)) - { - DEBUG(D_noutf8) - debug_printf_indent("%s \\__", skipping ? "| " : " "); - else - debug_printf_indent("%s", - skipping - ? UTF8_VERT " " : " " UTF8_UP_RIGHT UTF8_HORIZ UTF8_HORIZ); - debug_printf("(tainted)\n"); - } + debug_printf_indent("%V %V(tainted)\n", + flags & ESI_SKIPPING ? "|" : " ", "\\__"); } @@ -4611,17 +4610,10 @@ while (*s) DEBUG(D_expand) { - DEBUG(D_noutf8) - debug_printf_indent("%c%s: %s\n", - first ? '/' : '|', - flags & ESI_SKIPPING ? "---scanning" : "considering", s); - else - debug_printf_indent("%s%s: %s\n", - first ? UTF8_DOWN_RIGHT : UTF8_VERT_RIGHT, - flags & ESI_SKIPPING - ? UTF8_HORIZ UTF8_HORIZ UTF8_HORIZ "scanning" - : "considering", - s); + debug_printf_indent("%V%V%s: %W\n", + first ? "/" : "K", + flags & ESI_SKIPPING ? "---" : "", + flags & ESI_SKIPPING ? "scanning" : "considering", s); first = FALSE; } @@ -4644,21 +4636,20 @@ while (*s) for (s = t; *s ; s++) if (*s == '\\' && s[1] == 'N') break; DEBUG(D_expand) - debug_expansion_interim(US"protected", t, (int)(s - t), !!(flags & ESI_SKIPPING)); - yield = string_catn(yield, t, s - t); + debug_expansion_interim(US"protected", t, (int)(s - t), flags); + if (!(flags & ESI_SKIPPING)) + yield = string_catn(yield, t, s - t); if (*s) s += 2; } else { uschar ch[1]; DEBUG(D_expand) - DEBUG(D_noutf8) - debug_printf_indent("|backslashed: '\\%c'\n", s[1]); - else - debug_printf_indent(UTF8_VERT_RIGHT "backslashed: '\\%c'\n", s[1]); + debug_printf_indent("%Vbackslashed: '\\%c'\n", "K", s[1]); ch[0] = string_interpret_escape(&s); + if (!(flags & ESI_SKIPPING)) + yield = string_catn(yield, ch, 1); s++; - yield = string_catn(yield, ch, 1); } continue; } @@ -4675,9 +4666,10 @@ while (*s) for (const uschar * t = s+1; *t && *t != '$' && *t != '}' && *t != '\\'; t++) i++; - DEBUG(D_expand) debug_expansion_interim(US"text", s, i, !!(flags & ESI_SKIPPING)); + DEBUG(D_expand) debug_expansion_interim(US"text", s, i, flags); - yield = string_catn(yield, s, i); + if (!(flags & ESI_SKIPPING)) + yield = string_catn(yield, s, i); s += i; continue; } @@ -4703,15 +4695,16 @@ while (*s) /* If this is the first thing to be expanded, release the pre-allocated buffer. */ - if (!yield) - g = store_get(sizeof(gstring), GET_UNTAINTED); - else if (yield->ptr == 0) - { - if (resetok) reset_point = store_reset(reset_point); - yield = NULL; - reset_point = store_mark(); - g = store_get(sizeof(gstring), GET_UNTAINTED); /* alloc _before_ calling find_variable() */ - } + if (!(flags & ESI_SKIPPING)) + if (!yield) + g = store_get(sizeof(gstring), GET_UNTAINTED); + else if (yield->ptr == 0) + { + if (resetok) reset_point = store_reset(reset_point); + yield = NULL; + reset_point = store_mark(); + g = store_get(sizeof(gstring), GET_UNTAINTED); /* alloc _before_ calling find_variable() */ + } /* Header */ @@ -4760,16 +4753,17 @@ while (*s) reset in the middle of the buffer will make it inaccessible. */ len = Ustrlen(value); - DEBUG(D_expand) debug_expansion_interim(US"value", value, len, !!(flags & ESI_SKIPPING)); - if (!yield && newsize != 0) - { - yield = g; - yield->size = newsize; - yield->ptr = len; - yield->s = US value; /* known to be in new store i.e. a copy, so deconst safe */ - } - else - yield = string_catn(yield, value, len); + DEBUG(D_expand) debug_expansion_interim(US"value", value, len, flags); + if (!(flags & ESI_SKIPPING)) + if (!yield && newsize != 0) + { + yield = g; + yield->size = newsize; + yield->ptr = len; + yield->s = US value; /* known to be in new store i.e. a copy, so deconst safe */ + } + else + yield = string_catn(yield, value, len); continue; } @@ -4780,8 +4774,9 @@ while (*s) s = read_cnumber(&n, s); if (n >= 0 && n <= expand_nmax) { - DEBUG(D_expand) debug_expansion_interim(US"value", expand_nstring[n], expand_nlength[n], !!(flags & ESI_SKIPPING)); - yield = string_catn(yield, expand_nstring[n], expand_nlength[n]); + DEBUG(D_expand) debug_expansion_interim(US"value", expand_nstring[n], expand_nlength[n], flags); + if (!(flags & ESI_SKIPPING)) + yield = string_catn(yield, expand_nstring[n], expand_nlength[n]); } continue; } @@ -4808,8 +4803,9 @@ while (*s) } if (n >= 0 && n <= expand_nmax) { - DEBUG(D_expand) debug_expansion_interim(US"value", expand_nstring[n], expand_nlength[n], !!(flags & ESI_SKIPPING)); - yield = string_catn(yield, expand_nstring[n], expand_nlength[n]); + DEBUG(D_expand) debug_expansion_interim(US"value", expand_nstring[n], expand_nlength[n], flags); + if (!(flags & ESI_SKIPPING)) + yield = string_catn(yield, expand_nstring[n], expand_nlength[n]); } continue; } @@ -4934,9 +4930,9 @@ while (*s) DEBUG(D_expand) { - debug_expansion_interim(US"condition", s, (int)(next_s - s), !!(flags & ESI_SKIPPING)); + debug_expansion_interim(US"condition", s, (int)(next_s - s), flags); debug_expansion_interim(US"result", - cond ? US"true" : US"false", cond ? 4 : 5, !!(flags & ESI_SKIPPING)); + cond ? US"true" : US"false", cond ? 4 : 5, flags); } s = next_s; @@ -6564,6 +6560,7 @@ while (*s) goto EXPAND_FAILED_CURLY; /*}*/ } + DEBUG(D_expand) debug_printf_indent("%s: evaluate input list list\n", name); if (!(list = expand_string_internal(s, ESI_BRACE_ENDS | ESI_HONOR_DOLLAR | flags, &s, &resetok, NULL))) goto EXPAND_FAILED; /*{{*/ @@ -6583,6 +6580,7 @@ while (*s) expand_string_message = US"missing '{' for second arg of reduce"; goto EXPAND_FAILED_CURLY; /*}*/ } + DEBUG(D_expand) debug_printf_indent("reduce: initial result list\n"); t = expand_string_internal(s, ESI_BRACE_ENDS | ESI_HONOR_DOLLAR | flags, &s, &resetok, NULL); if (!t) goto EXPAND_FAILED; @@ -6610,6 +6608,7 @@ while (*s) condition for real. For EITEM_MAP and EITEM_REDUCE, do the same, using the normal internal expansion function. */ + DEBUG(D_expand) debug_printf_indent("%s: find end of conditionn\n", name); if (item_type != EITEM_FILTER) temp = expand_string_internal(s, ESI_BRACE_ENDS | ESI_HONOR_DOLLAR | ESI_SKIPPING, &s, &resetok, NULL); @@ -7122,7 +7121,7 @@ while (*s) gstring_release_unused(h); s = string_from_gstring(h); } - g = string_cat(g, s); + if (s) g = string_cat(g, s); } /* Assume that if the original local_part had quotes @@ -7152,7 +7151,7 @@ while (*s) if (yield && (expansion_start > 0 || *s)) debug_expansion_interim(US"item-res", yield->s + expansion_start, yield->ptr - expansion_start, - !!(flags & ESI_SKIPPING)); + flags); continue; NOT_ITEM: ; @@ -7331,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; } @@ -7779,7 +7779,6 @@ NOT_ITEM: ; } else yield = string_cat(yield, sub); - break; } /* quote_lookuptype does lookup-specific quoting */ @@ -7811,553 +7810,546 @@ 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: + 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 */ + + /* 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); + + /* Check the UTF-8, byte-by-byte */ - /* Manually track tainting, as we deal in individual chars below */ + 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: + /* 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; + + 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 */ + /* Perform the required operation */ - 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; + 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; - /* 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; + 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; int i = gstring_length(yield) - expansion_start; BOOL tainted = is_tainted(s); - DEBUG(D_noutf8) + debug_printf_indent("%Vop-res: %.*s\n", "K-----", i, s); + if (tainted) { - debug_printf_indent("|-----op-res: %.*s\n", i, s); - if (tainted) - { - debug_printf_indent("%s \\__", flags & ESI_SKIPPING ? "| " : " "); - debug_print_taint(res); - } - } - else - { - debug_printf_indent(UTF8_VERT_RIGHT - UTF8_HORIZ UTF8_HORIZ UTF8_HORIZ UTF8_HORIZ UTF8_HORIZ - "op-res: %.*s\n", i, s); - if (tainted) - { - debug_printf_indent("%s", - flags & ESI_SKIPPING - ? UTF8_VERT " " : " " UTF8_UP_RIGHT UTF8_HORIZ UTF8_HORIZ); - debug_print_taint(res); - } + debug_printf_indent("%V %V", + flags & ESI_SKIPPING ? "|" : " ", + "\\__"); + debug_print_taint(res); } } continue; @@ -8449,39 +8441,25 @@ left != NULL, return a pointer to the terminator. */ DEBUG(D_expand) { BOOL tainted = is_tainted(res); - DEBUG(D_noutf8) - { - debug_printf_indent("|--expanding: %.*s\n", (int)(s - string), string); - debug_printf_indent("%sresult: %s\n", - flags & ESI_SKIPPING ? "|-----" : "\\_____", res); - if (tainted) - { - debug_printf_indent("%s \\__", flags & ESI_SKIPPING ? "| " : " "); - debug_print_taint(res); - } - if (flags & ESI_SKIPPING) - debug_printf_indent("\\___skipping: result is not used\n"); - } + debug_printf_indent("%Vexpanded: %.*W\n", + "K---", + (int)(s - string), string); + debug_printf_indent("%Vresult: ", + flags & ESI_SKIPPING ? "K-----" : "\\_____"); + if (*res || !(flags & ESI_SKIPPING)) + debug_printf("%W\n", res); else + debug_printf(" %Vskipped%V\n", "<", ">"); + if (tainted) { - debug_printf_indent(UTF8_VERT_RIGHT UTF8_HORIZ UTF8_HORIZ - "expanding: %.*s\n", - (int)(s - string), string); - debug_printf_indent("%s" UTF8_HORIZ UTF8_HORIZ UTF8_HORIZ UTF8_HORIZ UTF8_HORIZ - "result: %s\n", - flags & ESI_SKIPPING ? UTF8_VERT_RIGHT : UTF8_UP_RIGHT, - res); - if (tainted) - { - debug_printf_indent("%s", - flags & ESI_SKIPPING - ? UTF8_VERT " " : " " UTF8_UP_RIGHT UTF8_HORIZ UTF8_HORIZ); - debug_print_taint(res); - } - if (flags & ESI_SKIPPING) - debug_printf_indent(UTF8_UP_RIGHT UTF8_HORIZ UTF8_HORIZ UTF8_HORIZ - "skipping: result is not used\n"); + debug_printf_indent("%V %V", + flags & ESI_SKIPPING ? "|" : " ", + "\\__" + ); + debug_print_taint(res); } + if (flags & ESI_SKIPPING) + debug_printf_indent("%Vskipping: result is not used\n", "\\___"); } if (textonly_p) *textonly_p = textonly; expand_level--; @@ -8507,25 +8485,11 @@ EXPAND_FAILED: if (left) *left = s; DEBUG(D_expand) { - DEBUG(D_noutf8) - { - debug_printf_indent("|failed to expand: %s\n", string); - debug_printf_indent("%serror message: %s\n", - f.expand_string_forcedfail ? "|---" : "\\___", expand_string_message); - if (f.expand_string_forcedfail) - debug_printf_indent("\\failure was forced\n"); - } - else - { - debug_printf_indent(UTF8_VERT_RIGHT "failed to expand: %s\n", - string); - debug_printf_indent("%s" UTF8_HORIZ UTF8_HORIZ UTF8_HORIZ - "error message: %s\n", - f.expand_string_forcedfail ? UTF8_VERT_RIGHT : UTF8_UP_RIGHT, - expand_string_message); - if (f.expand_string_forcedfail) - debug_printf_indent(UTF8_UP_RIGHT "failure was forced\n"); - } + debug_printf_indent("%Vfailed to expand: %s\n", "K", string); + debug_printf_indent("%Verror message: %s\n", + f.expand_string_forcedfail ? "K---" : "\\___", expand_string_message); + if (f.expand_string_forcedfail) + debug_printf_indent("%Vfailure was forced\n", "\\"); } if (resetok_p && !resetok) *resetok_p = FALSE; expand_level--; @@ -8548,13 +8512,12 @@ Returns: the expanded string, or NULL if expansion failed; if failure was const uschar * expand_string_2(const uschar * string, BOOL * textonly_p) { +f.expand_string_forcedfail = f.search_find_defer = malformed_header = FALSE; if (Ustrpbrk(string, "$\\") != NULL) { int old_pool = store_pool; uschar * s; - f.search_find_defer = FALSE; - malformed_header = FALSE; store_pool = POOL_MAIN; s = expand_string_internal(string, ESI_HONOR_DOLLAR, NULL, NULL, textonly_p); store_pool = old_pool; @@ -8728,12 +8691,14 @@ Returns: OK value placed in rvalue */ int -exp_bool(address_item *addr, - uschar *mtype, uschar *mname, unsigned dbg_opt, - uschar *oname, BOOL bvalue, - uschar *svalue, BOOL *rvalue) +exp_bool(address_item * addr, + uschar * mtype, uschar * mname, unsigned dbg_opt, + uschar * oname, BOOL bvalue, + uschar * svalue, BOOL * rvalue) { -uschar *expanded; +uschar * expanded; + +DEBUG(D_expand) debug_printf("try option %s\n", oname); if (!svalue) { *rvalue = bvalue; return OK; } if (!(expanded = expand_string(svalue))) diff --git a/src/src/filter.c b/src/src/filter.c index 7f02327e3..813ffdd7c 100644 --- a/src/src/filter.c +++ b/src/src/filter.c @@ -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 */ @@ -71,35 +71,6 @@ enum { had_neither, had_else, had_elif, had_endif }; static BOOL read_command_list(const uschar **, filter_cmd ***, BOOL); -/* The string arguments for the mail command. The header line ones (that are -permitted to include \n followed by white space) first, and then the body text -one (it can have \n anywhere). Then the file names and once_repeat, which may -not contain \n. */ - -static const char *mailargs[] = { /* "to" must be first, and */ - "to", /* "cc" and "bcc" must follow */ - "cc", - "bcc", - "from", - "reply_to", - "subject", - "extra_headers", /* miscellaneous added header lines */ - "text", - "file", - "log", - "once", - "once_repeat" -}; - -/* The count of string arguments */ - -#define MAILARGS_STRING_COUNT (nelem(mailargs)) - -/* The count of string arguments that are actually passed over as strings -(once_repeat is converted to an int). */ - -#define mailargs_string_passed (MAILARGS_STRING_COUNT - 1) - /* This defines the offsets for the arguments; first the string ones, and then the non-string ones. The order must be as above. */ @@ -120,21 +91,50 @@ enum { mailarg_index_to, mailargs_total /* total number of arguments */ }; +/* The string arguments for the mail command. The header line ones (that are +permitted to include \n followed by white space) first, and then the body text +one (it can have \n anywhere). Then the file names and once_repeat, which may +not contain \n. */ + +static const char *mailargs[] = { /* "to" must be first, and */ + [mailarg_index_to] = "to", /* "cc" and "bcc" must follow */ + [mailarg_index_cc] = "cc", + [mailarg_index_bcc] = "bcc", + [mailarg_index_from] = "from", + [mailarg_index_reply_to] = "reply_to", + [mailarg_index_subject] = "subject", + [mailarg_index_headers] = "extra_headers", /* misc added header lines */ + [mailarg_index_text] = "text", + [mailarg_index_file] = "file", + [mailarg_index_log] = "log", + [mailarg_index_once] = "once", + [mailarg_index_once_repeat] = "once_repeat" +}; + +/* The count of string arguments */ + +#define MAILARGS_STRING_COUNT (nelem(mailargs)) + +/* The count of string arguments that are actually passed over as strings +(once_repeat is converted to an int). */ + +#define mailargs_string_passed (MAILARGS_STRING_COUNT - 1) + /* Offsets in the data structure for the string arguments (note that once_repeat isn't a string argument at this point.) */ -static int reply_offsets[] = { /* must be in same order as above */ - offsetof(reply_item, to), - offsetof(reply_item, cc), - offsetof(reply_item, bcc), - offsetof(reply_item, from), - offsetof(reply_item, reply_to), - offsetof(reply_item, subject), - offsetof(reply_item, headers), - offsetof(reply_item, text), - offsetof(reply_item, file), - offsetof(reply_item, logfile), - offsetof(reply_item, oncelog), +static int reply_offsets[] = { + [mailarg_index_to] = offsetof(reply_item, to), + [mailarg_index_cc] = offsetof(reply_item, cc), + [mailarg_index_bcc] = offsetof(reply_item, bcc), + [mailarg_index_from] = offsetof(reply_item, from), + [mailarg_index_reply_to] = offsetof(reply_item, reply_to), + [mailarg_index_subject] = offsetof(reply_item, subject), + [mailarg_index_headers] = offsetof(reply_item, headers), + [mailarg_index_text] = offsetof(reply_item, text), + [mailarg_index_file] = offsetof(reply_item, file), + [mailarg_index_log] = offsetof(reply_item, logfile), + [mailarg_index_once] = offsetof(reply_item, oncelog), }; /* Condition identities and names, with negated versions for some @@ -147,20 +147,48 @@ enum { cond_and, cond_or, cond_personal, cond_begins, cond_BEGINS, cond_manualthaw, cond_foranyaddress }; static const char *cond_names[] = { - "and", "or", "personal", - "begins", "BEGINS", "ends", "ENDS", - "is", "IS", "matches", "MATCHES", "contains", - "CONTAINS", "delivered", "above", "below", "error_message", - "first_delivery", "manually_thawed", "foranyaddress" }; + [cond_and] = "and", + [cond_or] = "or", + [cond_personal] = "personal", + [cond_begins] = "begins", + [cond_BEGINS] = "BEGINS", + [cond_ends] = "ends", + [cond_ENDS] = "ENDS", + [cond_is] = "is", + [cond_IS] = "IS", + [cond_matches] = "matches", + [cond_MATCHES] = "MATCHES", + [cond_contains] = "contains", + [cond_CONTAINS] = "CONTAINS", + [cond_delivered] = "delivered", + [cond_above] = "above", + [cond_below] = "below", + [cond_errormsg] = "error_message", + [cond_firsttime] = "first_delivery", + [cond_manualthaw] = "manually_thawed", + [cond_foranyaddress] = "foranyaddress" }; static const char *cond_not_names[] = { - "", "", "not personal", - "does not begin", "does not BEGIN", - "does not end", "does not END", - "is not", "IS not", "does not match", - "does not MATCH", "does not contain", "does not CONTAIN", - "not delivered", "not above", "not below", "not error_message", - "not first_delivery", "not manually_thawed", "not foranyaddress" }; + [cond_and] = "", + [cond_or] = "", + [cond_personal] = "not personal", + [cond_begins] = "does not begin", + [cond_BEGINS] = "does not BEGIN", + [cond_ends] = "does not end", + [cond_ENDS] = "does not END", + [cond_is] = "is not", + [cond_IS] = "IS not", + [cond_matches] = "does not match", + [cond_MATCHES] = "does not MATCH", + [cond_contains] = "does not contain", + [cond_CONTAINS] = "does not CONTAIN", + [cond_delivered] = "not delivered", + [cond_above] = "not above", + [cond_below] = "not below", + [cond_errormsg] = "not error_message", + [cond_firsttime] = "not first_delivery", + [cond_manualthaw] = "not manually_thawed", + [cond_foranyaddress] = "not foranyaddress" }; /* Tables of binary condition words and their corresponding types. Not easy to amalgamate with the above because of the different variants. */ @@ -196,34 +224,34 @@ static int cond_types[] = { cond_BEGINS, cond_BEGINS, cond_CONTAINS, /* Command identities */ -enum { add_command, defer_command, deliver_command, elif_command, else_command, - endif_command, finish_command, fail_command, freeze_command, - headers_command, if_command, logfile_command, logwrite_command, - mail_command, noerror_command, pipe_command, save_command, seen_command, - testprint_command, unseen_command, vacation_command }; +enum { ADD_COMMAND, DEFER_COMMAND, DELIVER_COMMAND, ELIF_COMMAND, ELSE_COMMAND, + ENDIF_COMMAND, FINISH_COMMAND, FAIL_COMMAND, FREEZE_COMMAND, + HEADERS_COMMAND, IF_COMMAND, LOGFILE_COMMAND, LOGWRITE_COMMAND, + MAIL_COMMAND, NOERROR_COMMAND, PIPE_COMMAND, SAVE_COMMAND, SEEN_COMMAND, + TESTPRINT_COMMAND, UNSEEN_COMMAND, VACATION_COMMAND }; static const char * command_list[] = { - [add_command] = "add", - [defer_command] = "defer", - [deliver_command] = "deliver", - [elif_command] = "elif", - [else_command] = "else", - [endif_command] = "endif", - [finish_command] = "finish", - [fail_command] = "fail", - [freeze_command] = "freeze", - [headers_command] = "headers", - [if_command] = "if", - [logfile_command] = "logfile", - [logwrite_command] = "logwrite", - [mail_command] = "mail", - [noerror_command] = "noerror", - [pipe_command] = "pipe", - [save_command] = "save", - [seen_command] = "seen", - [testprint_command] = "testprint", - [unseen_command] = "unseen", - [vacation_command] = "vacation" + [ADD_COMMAND] = "add", + [DEFER_COMMAND] = "defer", + [DELIVER_COMMAND] = "deliver", + [ELIF_COMMAND] = "elif", + [ELSE_COMMAND] = "else", + [ENDIF_COMMAND] = "endif", + [FINISH_COMMAND] = "finish", + [FAIL_COMMAND] = "fail", + [FREEZE_COMMAND] = "freeze", + [HEADERS_COMMAND] = "headers", + [IF_COMMAND] = "if", + [LOGFILE_COMMAND] = "logfile", + [LOGWRITE_COMMAND] = "logwrite", + [MAIL_COMMAND] = "mail", + [NOERROR_COMMAND] = "noerror", + [PIPE_COMMAND] = "pipe", + [SAVE_COMMAND] = "save", + [SEEN_COMMAND] = "seen", + [TESTPRINT_COMMAND] = "testprint", + [UNSEEN_COMMAND] = "unseen", + [VACATION_COMMAND] = "vacation" }; static int command_list_count = nelem(command_list); @@ -232,27 +260,27 @@ static int command_list_count = nelem(command_list); If the top bit is set, it means that the default for the command is "seen". */ static uschar command_exparg_count[] = { - [add_command] = 2, - [defer_command] = 1, - [deliver_command] = 128+2, - [elif_command] = 0, - [else_command] = 0, - [endif_command] = 0, - [finish_command] = 0, - [fail_command] = 1, - [freeze_command] = 1, - [headers_command] = 1, - [if_command] = 0, - [logfile_command] = 1, - [logwrite_command] = 1, - [mail_command] = MAILARGS_STRING_COUNT, - [noerror_command] = 0, - [pipe_command] = 128+0, - [save_command] = 128+1, - [seen_command] = 0, - [testprint_command] = 1, - [unseen_command] = 0, - [vacation_command] = MAILARGS_STRING_COUNT + [ADD_COMMAND] = 2, + [DEFER_COMMAND] = 1, + [DELIVER_COMMAND] = 128+2, + [ELIF_COMMAND] = 0, + [ELSE_COMMAND] = 0, + [ENDIF_COMMAND] = 0, + [FINISH_COMMAND] = 0, + [FAIL_COMMAND] = 1, + [FREEZE_COMMAND] = 1, + [HEADERS_COMMAND] = 1, + [IF_COMMAND] = 0, + [LOGFILE_COMMAND] = 1, + [LOGWRITE_COMMAND] = 1, + [MAIL_COMMAND] = MAILARGS_STRING_COUNT, + [NOERROR_COMMAND] = 0, + [PIPE_COMMAND] = 128+0, + [SAVE_COMMAND] = 128+1, + [SEEN_COMMAND] = 0, + [TESTPRINT_COMMAND] = 1, + [UNSEEN_COMMAND] = 0, + [VACATION_COMMAND] = MAILARGS_STRING_COUNT }; @@ -276,16 +304,11 @@ nextsigchar(const uschar *ptr, BOOL comment_allowed) for (;;) { while (isspace(*ptr)) - { - if (*ptr == '\n') line_number++; - ptr++; - } + if (*ptr++ == '\n') line_number++; if (comment_allowed && *ptr == '#') - { - while (*(++ptr) != '\n' && *ptr != 0); - continue; - } - else break; + while (*++ptr != '\n' && *ptr) ; + else + break; } return ptr; } @@ -311,18 +334,19 @@ Returns: pointer to the next significant character after the word static const uschar * nextword(const uschar *ptr, uschar *buffer, int size, BOOL bracket) { -uschar *bp = buffer; -while (*ptr != 0 && !isspace(*ptr) && +uschar * bp = buffer; +while (*ptr && !isspace(*ptr) && (!bracket || (*ptr != '(' && *ptr != ')'))) - { - if (bp - buffer < size - 1) *bp++ = *ptr++; else + if (bp - buffer < size - 1) + *bp++ = *ptr++; + else { *error_pointer = string_sprintf("word is too long in line %d of " "filter file (max = %d chars)", line_number, size); break; } - } -*bp = 0; + +*bp = '\0'; return nextsigchar(ptr, TRUE); } @@ -410,8 +434,8 @@ int value, count; if (sscanf(CS s, "%i%n", &value, &count) != 1) return 0; if (tolower(s[count]) == 'k') { value *= 1024; count++; } if (tolower(s[count]) == 'm') { value *= 1024*1024; count++; } -while (isspace((s[count]))) count++; -if (s[count] != 0) return 0; +while (isspace(s[count])) count++; +if (s[count]) return 0; *ok = TRUE; return value; } @@ -799,8 +823,8 @@ switch(c->type) case cond_errormsg: case cond_firsttime: case cond_manualthaw: - debug_printf("%s", name); - break; + debug_printf("%s", name); + break; case cond_is: case cond_IS: @@ -814,31 +838,31 @@ switch(c->type) case cond_ENDS: case cond_above: case cond_below: - debug_printf("%s %s %s", c->left.u, name, c->right.u); - break; + debug_printf("%s %s %s", c->left.u, name, c->right.u); + break; case cond_and: - if (!c->testfor) debug_printf("not ("); - print_condition(c->left.c, FALSE); - debug_printf(" %s ", cond_names[c->type]); - print_condition(c->right.c, FALSE); - if (!c->testfor) debug_printf(")"); - break; + if (!c->testfor) debug_printf("not ("); + print_condition(c->left.c, FALSE); + debug_printf(" %s ", cond_names[c->type]); + print_condition(c->right.c, FALSE); + if (!c->testfor) debug_printf(")"); + break; case cond_or: - if (!c->testfor) debug_printf("not ("); - else if (!toplevel) debug_printf("("); - print_condition(c->left.c, FALSE); - debug_printf(" %s ", cond_names[c->type]); - print_condition(c->right.c, FALSE); - if (!toplevel || !c->testfor) debug_printf(")"); - break; + if (!c->testfor) debug_printf("not ("); + else if (!toplevel) debug_printf("("); + print_condition(c->left.c, FALSE); + debug_printf(" %s ", cond_names[c->type]); + print_condition(c->right.c, FALSE); + if (!toplevel || !c->testfor) debug_printf(")"); + break; case cond_foranyaddress: - debug_printf("%s %s (", name, c->left.u); - print_condition(c->right.c, FALSE); - debug_printf(")"); - break; + debug_printf("%s %s (", name, c->left.u); + print_condition(c->right.c, FALSE); + debug_printf(")"); + break; } } @@ -908,15 +932,15 @@ switch (command) stored in the second argument slot. Neither may be preceded by seen, unseen or noerror. */ - case add_command: - case headers_command: - if (seen_force || noerror_force) - { - *error_pointer = string_sprintf("\"seen\", \"unseen\", or \"noerror\" " - "found before an \"%s\" command near line %d", - command_list[command], line_number); - yield = FALSE; - } + case ADD_COMMAND: + case HEADERS_COMMAND: + if (seen_force || noerror_force) + { + *error_pointer = string_sprintf("\"seen\", \"unseen\", or \"noerror\" " + "found before an \"%s\" command near line %d", + command_list[command], line_number); + yield = FALSE; + } /* Fall through */ /* Logwrite, logfile, pipe, and testprint all take a single argument, save @@ -924,303 +948,303 @@ switch (command) have "errors_to
" in a system filter, or in a user filter if the address is the current one. */ - case deliver_command: - case logfile_command: - case logwrite_command: - case pipe_command: - case save_command: - case testprint_command: + case DELIVER_COMMAND: + case LOGFILE_COMMAND: + case LOGWRITE_COMMAND: + case PIPE_COMMAND: + case SAVE_COMMAND: + case TESTPRINT_COMMAND: - ptr = nextitem(ptr, buffer, sizeof(buffer), FALSE); - if (!*buffer) - *error_pointer = string_sprintf("\"%s\" requires an argument " - "near line %d of filter file", command_list[command], line_number); + ptr = nextitem(ptr, buffer, sizeof(buffer), FALSE); + if (!*buffer) + *error_pointer = string_sprintf("\"%s\" requires an argument " + "near line %d of filter file", command_list[command], line_number); - if (*error_pointer) yield = FALSE; else - { - union argtypes argument, second_argument; + if (*error_pointer) yield = FALSE; else + { + union argtypes argument, second_argument; - argument.u = second_argument.u = NULL; + argument.u = second_argument.u = NULL; - if (command == add_command) - { - argument.u = string_copy(buffer); - ptr = nextitem(ptr, buffer, sizeof(buffer), FALSE); - if (!*buffer || Ustrcmp(buffer, "to") != 0) - *error_pointer = string_sprintf("\"to\" expected in \"add\" command " - "near line %d of filter file", line_number); - else - { - ptr = nextitem(ptr, buffer, sizeof(buffer), FALSE); - if (!*buffer) - *error_pointer = string_sprintf("value missing after \"to\" " - "near line %d of filter file", line_number); - else second_argument.u = string_copy(buffer); - } - } + if (command == ADD_COMMAND) + { + argument.u = string_copy(buffer); + ptr = nextitem(ptr, buffer, sizeof(buffer), FALSE); + if (!*buffer || Ustrcmp(buffer, "to") != 0) + *error_pointer = string_sprintf("\"to\" expected in \"add\" command " + "near line %d of filter file", line_number); + else + { + ptr = nextitem(ptr, buffer, sizeof(buffer), FALSE); + if (!*buffer) + *error_pointer = string_sprintf("value missing after \"to\" " + "near line %d of filter file", line_number); + else second_argument.u = string_copy(buffer); + } + } - else if (command == headers_command) - { - if (Ustrcmp(buffer, "add") == 0) - second_argument.b = TRUE; - else - if (Ustrcmp(buffer, "remove") == 0) second_argument.b = FALSE; - else - if (Ustrcmp(buffer, "charset") == 0) - second_argument.b = TRUE_UNSET; - else - { - *error_pointer = string_sprintf("\"add\", \"remove\", or \"charset\" " - "expected after \"headers\" near line %d of filter file", - line_number); - yield = FALSE; - } + else if (command == HEADERS_COMMAND) + { + if (Ustrcmp(buffer, "add") == 0) + second_argument.b = TRUE; + else + if (Ustrcmp(buffer, "remove") == 0) second_argument.b = FALSE; + else + if (Ustrcmp(buffer, "charset") == 0) + second_argument.b = TRUE_UNSET; + else + { + *error_pointer = string_sprintf("\"add\", \"remove\", or \"charset\" " + "expected after \"headers\" near line %d of filter file", + line_number); + yield = FALSE; + } - if (!f.system_filtering && second_argument.b != TRUE_UNSET) - { - *error_pointer = string_sprintf("header addition and removal is " - "available only in system filters: near line %d of filter file", - line_number); - yield = FALSE; - break; - } + if (!f.system_filtering && second_argument.b != TRUE_UNSET) + { + *error_pointer = string_sprintf("header addition and removal is " + "available only in system filters: near line %d of filter file", + line_number); + yield = FALSE; + break; + } - if (yield) - { - ptr = nextitem(ptr, buffer, sizeof(buffer), FALSE); - if (!*buffer) - *error_pointer = string_sprintf("value missing after \"add\", " - "\"remove\", or \"charset\" near line %d of filter file", - line_number); - else argument.u = string_copy(buffer); - } - } + if (yield) + { + ptr = nextitem(ptr, buffer, sizeof(buffer), FALSE); + if (!*buffer) + *error_pointer = string_sprintf("value missing after \"add\", " + "\"remove\", or \"charset\" near line %d of filter file", + line_number); + else argument.u = string_copy(buffer); + } + } - /* The argument for the logwrite command must end in a newline, and the save - and logfile commands can have an optional mode argument. The deliver - command can have an optional "errors_to
" for a system filter, - or for a user filter if the address is the user's address. Accept the - syntax here - the check is later. */ + /* The argument for the logwrite command must end in a newline, and the save + and logfile commands can have an optional mode argument. The deliver + command can have an optional "errors_to
" for a system filter, + or for a user filter if the address is the user's address. Accept the + syntax here - the check is later. */ - else - { - if (command == logwrite_command) - { - int len = Ustrlen(buffer); - if (len == 0 || buffer[len-1] != '\n') Ustrcat(buffer, US"\n"); - } + else + { + if (command == LOGWRITE_COMMAND) + { + int len = Ustrlen(buffer); + if (len == 0 || buffer[len-1] != '\n') Ustrcat(buffer, US"\n"); + } - argument.u = string_copy(buffer); + argument.u = string_copy(buffer); - if (command == save_command || command == logfile_command) - { - if (isdigit(*ptr)) - { - ptr = nextword(ptr, buffer, sizeof(buffer), FALSE); - second_argument.i = (int)Ustrtol(buffer, NULL, 8); - } - else second_argument.i = -1; - } + if (command == SAVE_COMMAND || command == LOGFILE_COMMAND) + { + if (isdigit(*ptr)) + { + ptr = nextword(ptr, buffer, sizeof(buffer), FALSE); + second_argument.i = (int)Ustrtol(buffer, NULL, 8); + } + else second_argument.i = -1; + } - else if (command == deliver_command) - { - const uschar *save_ptr = ptr; - ptr = nextword(ptr, buffer, sizeof(buffer), FALSE); - if (Ustrcmp(buffer, "errors_to") == 0) - { - ptr = nextword(ptr, buffer, sizeof(buffer), FALSE); - second_argument.u = string_copy(buffer); - } - else ptr = save_ptr; - } - } + else if (command == DELIVER_COMMAND) + { + const uschar *save_ptr = ptr; + ptr = nextword(ptr, buffer, sizeof(buffer), FALSE); + if (Ustrcmp(buffer, "errors_to") == 0) + { + ptr = nextword(ptr, buffer, sizeof(buffer), FALSE); + second_argument.u = string_copy(buffer); + } + else ptr = save_ptr; + } + } - /* Set up the command block. Seen defaults TRUE for delivery commands, - FALSE for logging commands, and it doesn't matter for testprint, as - that doesn't change the "delivered" status. */ + /* Set up the command block. Seen defaults TRUE for delivery commands, + FALSE for logging commands, and it doesn't matter for testprint, as + that doesn't change the "delivered" status. */ - if (*error_pointer) yield = FALSE; - else - { - new = store_get(sizeof(filter_cmd) + sizeof(union argtypes), GET_UNTAINTED); - new->next = NULL; - **lastcmdptr = new; - *lastcmdptr = &(new->next); - new->command = command; - new->seen = seen_force? seen_value : command_exparg_count[command] >= 128; - new->noerror = noerror_force; - new->args[0] = argument; - new->args[1] = second_argument; + if (*error_pointer) yield = FALSE; + else + { + new = store_get(sizeof(filter_cmd) + sizeof(union argtypes), GET_UNTAINTED); + new->next = NULL; + **lastcmdptr = new; + *lastcmdptr = &(new->next); + new->command = command; + new->seen = seen_force? seen_value : command_exparg_count[command] >= 128; + new->noerror = noerror_force; + new->args[0] = argument; + new->args[1] = second_argument; + } } - } - break; + break; /* Elif, else and endif just set a flag if expected. */ - case elif_command: - case else_command: - case endif_command: - if (seen_force || noerror_force) - { - *error_pointer = string_sprintf("\"seen\", \"unseen\", or \"noerror\" " - "near line %d is not followed by a command", line_number); - yield = FALSE; - } + case ELIF_COMMAND: + case ELSE_COMMAND: + case ENDIF_COMMAND: + if (seen_force || noerror_force) + { + *error_pointer = string_sprintf("\"seen\", \"unseen\", or \"noerror\" " + "near line %d is not followed by a command", line_number); + yield = FALSE; + } - if (expect_endif > 0) - had_else_endif = (command == elif_command)? had_elif : - (command == else_command)? had_else : had_endif; - else - { - *error_pointer = string_sprintf("unexpected \"%s\" command near " - "line %d of filter file", buffer, line_number); - yield = FALSE; - } - break; + if (expect_endif > 0) + had_else_endif = (command == ELIF_COMMAND)? had_elif : + (command == ELSE_COMMAND)? had_else : had_endif; + else + { + *error_pointer = string_sprintf("unexpected \"%s\" command near " + "line %d of filter file", buffer, line_number); + yield = FALSE; + } + break; /* Defer, freeze, and fail are available only if permitted. */ - case defer_command: - cmd_bit = RDO_DEFER; - goto DEFER_FREEZE_FAIL; + case DEFER_COMMAND: + cmd_bit = RDO_DEFER; + goto DEFER_FREEZE_FAIL; - case fail_command: - cmd_bit = RDO_FAIL; - goto DEFER_FREEZE_FAIL; + case FAIL_COMMAND: + cmd_bit = RDO_FAIL; + goto DEFER_FREEZE_FAIL; - case freeze_command: - cmd_bit = RDO_FREEZE; + case FREEZE_COMMAND: + cmd_bit = RDO_FREEZE; DEFER_FREEZE_FAIL: - if ((filter_options & cmd_bit) == 0) - { - *error_pointer = string_sprintf("filtering command \"%s\" is disabled: " - "near line %d of filter file", buffer, line_number); - yield = FALSE; - break; - } + if ((filter_options & cmd_bit) == 0) + { + *error_pointer = string_sprintf("filtering command \"%s\" is disabled: " + "near line %d of filter file", buffer, line_number); + yield = FALSE; + break; + } - /* A text message can be provided after the "text" keyword, or - as a string in quotes. */ + /* A text message can be provided after the "text" keyword, or + as a string in quotes. */ - saveptr = ptr; - ptr = nextitem(ptr, buffer, sizeof(buffer), FALSE); - if (*saveptr != '\"' && (!*buffer || Ustrcmp(buffer, "text") != 0)) - { - ptr = saveptr; - fmsg = US""; - } - else - { - if (*saveptr != '\"') - ptr = nextitem(ptr, buffer, sizeof(buffer), FALSE); - fmsg = string_copy(buffer); - } + saveptr = ptr; + ptr = nextitem(ptr, buffer, sizeof(buffer), FALSE); + if (*saveptr != '\"' && (!*buffer || Ustrcmp(buffer, "text") != 0)) + { + ptr = saveptr; + fmsg = US""; + } + else + { + if (*saveptr != '\"') + ptr = nextitem(ptr, buffer, sizeof(buffer), FALSE); + fmsg = string_copy(buffer); + } - /* Drop through and treat as "finish", but never set "seen". */ + /* Drop through and treat as "finish", but never set "seen". */ - seen_value = FALSE; + seen_value = FALSE; - /* Finish has no arguments; fmsg defaults to NULL */ + /* Finish has no arguments; fmsg defaults to NULL */ - case finish_command: - new = store_get(sizeof(filter_cmd), GET_UNTAINTED); - new->next = NULL; - **lastcmdptr = new; - *lastcmdptr = &(new->next); - new->command = command; - new->seen = seen_force ? seen_value : FALSE; - new->args[0].u = fmsg; - break; + case FINISH_COMMAND: + new = store_get(sizeof(filter_cmd), GET_UNTAINTED); + new->next = NULL; + **lastcmdptr = new; + *lastcmdptr = &(new->next); + new->command = command; + new->seen = seen_force ? seen_value : FALSE; + new->args[0].u = fmsg; + break; /* Seen, unseen, and noerror are not allowed before if, which takes a condition argument and then and else sub-commands. */ - case if_command: - if (seen_force || noerror_force) - { - *error_pointer = string_sprintf("\"seen\", \"unseen\", or \"noerror\" " - "found before an \"if\" command near line %d", - line_number); - yield = FALSE; - } + case IF_COMMAND: + if (seen_force || noerror_force) + { + *error_pointer = string_sprintf("\"seen\", \"unseen\", or \"noerror\" " + "found before an \"if\" command near line %d", + line_number); + yield = FALSE; + } - /* Set up the command block for if */ + /* Set up the command block for if */ - new = store_get(sizeof(filter_cmd) + 4 * sizeof(union argtypes), GET_UNTAINTED); - new->next = NULL; - **lastcmdptr = new; - *lastcmdptr = &new->next; - new->command = command; - new->seen = FALSE; - new->args[0].u = NULL; - new->args[1].u = new->args[2].u = NULL; - new->args[3].u = ptr; + new = store_get(sizeof(filter_cmd) + 4 * sizeof(union argtypes), GET_UNTAINTED); + new->next = NULL; + **lastcmdptr = new; + *lastcmdptr = &new->next; + new->command = command; + new->seen = FALSE; + new->args[0].u = NULL; + new->args[1].u = new->args[2].u = NULL; + new->args[3].u = ptr; - /* Read the condition */ + /* Read the condition */ - ptr = read_condition(ptr, &new->args[0].c, TRUE); - if (*error_pointer) { yield = FALSE; break; } + ptr = read_condition(ptr, &new->args[0].c, TRUE); + if (*error_pointer) { yield = FALSE; break; } - /* Read the commands to be obeyed if the condition is true */ + /* Read the commands to be obeyed if the condition is true */ - newlastcmdptr = &(new->args[1].f); - if (!read_command_list(&ptr, &newlastcmdptr, TRUE)) yield = FALSE; + newlastcmdptr = &(new->args[1].f); + if (!read_command_list(&ptr, &newlastcmdptr, TRUE)) yield = FALSE; - /* If commands were successfully read, handle the various possible - terminators. There may be a number of successive "elif" sections. */ + /* If commands were successfully read, handle the various possible + terminators. There may be a number of successive "elif" sections. */ - else - { - while (had_else_endif == had_elif) + else { - filter_cmd *newnew = - store_get(sizeof(filter_cmd) + 4 * sizeof(union argtypes), GET_UNTAINTED); - new->args[2].f = newnew; - new = newnew; - new->next = NULL; - new->command = command; - new->seen = FALSE; - new->args[0].u = NULL; - new->args[1].u = new->args[2].u = NULL; - new->args[3].u = ptr; - - ptr = read_condition(ptr, &new->args[0].c, TRUE); - if (*error_pointer) { yield = FALSE; break; } - newlastcmdptr = &(new->args[1].f); - if (!read_command_list(&ptr, &newlastcmdptr, TRUE)) - yield = FALSE; - } + while (had_else_endif == had_elif) + { + filter_cmd *newnew = + store_get(sizeof(filter_cmd) + 4 * sizeof(union argtypes), GET_UNTAINTED); + new->args[2].f = newnew; + new = newnew; + new->next = NULL; + new->command = command; + new->seen = FALSE; + new->args[0].u = NULL; + new->args[1].u = new->args[2].u = NULL; + new->args[3].u = ptr; + + ptr = read_condition(ptr, &new->args[0].c, TRUE); + if (*error_pointer) { yield = FALSE; break; } + newlastcmdptr = &(new->args[1].f); + if (!read_command_list(&ptr, &newlastcmdptr, TRUE)) + yield = FALSE; + } - if (yield == FALSE) break; + if (yield == FALSE) break; - /* Handle termination by "else", possibly following one or more - "elsif" sections. */ + /* Handle termination by "else", possibly following one or more + "elsif" sections. */ - if (had_else_endif == had_else) - { - newlastcmdptr = &(new->args[2].f); - if (!read_command_list(&ptr, &newlastcmdptr, TRUE)) - yield = FALSE; - else if (had_else_endif != had_endif) - { - *error_pointer = string_sprintf("\"endif\" missing near line %d of " - "filter file", line_number); - yield = FALSE; - } - } + if (had_else_endif == had_else) + { + newlastcmdptr = &(new->args[2].f); + if (!read_command_list(&ptr, &newlastcmdptr, TRUE)) + yield = FALSE; + else if (had_else_endif != had_endif) + { + *error_pointer = string_sprintf("\"endif\" missing near line %d of " + "filter file", line_number); + yield = FALSE; + } + } - /* Otherwise the terminator was "endif" - this is checked by - read_command_list(). The pointer is already set to NULL. */ - } + /* Otherwise the terminator was "endif" - this is checked by + read_command_list(). The pointer is already set to NULL. */ + } - /* Reset the terminator flag. */ + /* Reset the terminator flag. */ - had_else_endif = had_neither; - break; + had_else_endif = had_neither; + break; /* The mail & vacation commands have a whole slew of keyworded arguments. @@ -1229,150 +1253,150 @@ switch (command) are logically booleans, because they are stored in a uschar * value, we use NULL and not FALSE, to keep 64-bit compilers happy. */ - case mail_command: - case vacation_command: - new = store_get(sizeof(filter_cmd) + mailargs_total * sizeof(union argtypes), GET_UNTAINTED); - new->next = NULL; - new->command = command; - new->seen = seen_force ? seen_value : FALSE; - new->noerror = noerror_force; - for (i = 0; i < mailargs_total; i++) new->args[i].u = NULL; - - /* Read keyword/value pairs until we hit one that isn't. The data - must contain only printing chars plus tab, though the "text" value - can also contain newlines. The "file" keyword can be preceded by the - word "expand", and "return message" has no data. */ - - for (;;) - { - const uschar *saveptr = ptr; - ptr = nextword(ptr, buffer, sizeof(buffer), FALSE); - if (*error_pointer) - { yield = FALSE; break; } - - /* Ensure "return" is followed by "message"; that's a complete option */ - - if (Ustrcmp(buffer, "return") == 0) + case MAIL_COMMAND: + case VACATION_COMMAND: + new = store_get(sizeof(filter_cmd) + mailargs_total * sizeof(union argtypes), GET_UNTAINTED); + new->next = NULL; + new->command = command; + new->seen = seen_force ? seen_value : FALSE; + new->noerror = noerror_force; + for (i = 0; i < mailargs_total; i++) new->args[i].u = NULL; + + /* Read keyword/value pairs until we hit one that isn't. The data + must contain only printing chars plus tab, though the "text" value + can also contain newlines. The "file" keyword can be preceded by the + word "expand", and "return message" has no data. */ + + for (;;) { - new->args[mailarg_index_return].u = US""; /* not NULL => TRUE */ + const uschar *saveptr = ptr; ptr = nextword(ptr, buffer, sizeof(buffer), FALSE); - if (Ustrcmp(buffer, "message") != 0) - { - *error_pointer = string_sprintf("\"return\" not followed by \"message\" " - " near line %d of filter file", line_number); - yield = FALSE; - break; - } - continue; - } + if (*error_pointer) + { yield = FALSE; break; } - /* Ensure "expand" is followed by "file", then fall through to process the - file keyword. */ + /* Ensure "return" is followed by "message"; that's a complete option */ - if (Ustrcmp(buffer, "expand") == 0) - { - new->args[mailarg_index_expand].u = US""; /* not NULL => TRUE */ - ptr = nextword(ptr, buffer, sizeof(buffer), FALSE); - if (Ustrcmp(buffer, "file") != 0) - { - *error_pointer = string_sprintf("\"expand\" not followed by \"file\" " - " near line %d of filter file", line_number); - yield = FALSE; - break; - } - } + if (Ustrcmp(buffer, "return") == 0) + { + new->args[mailarg_index_return].u = US""; /* not NULL => TRUE */ + ptr = nextword(ptr, buffer, sizeof(buffer), FALSE); + if (Ustrcmp(buffer, "message") != 0) + { + *error_pointer = string_sprintf("\"return\" not followed by \"message\" " + " near line %d of filter file", line_number); + yield = FALSE; + break; + } + continue; + } - /* Scan for the keyword */ + /* Ensure "expand" is followed by "file", then fall through to process the + file keyword. */ - for (i = 0; i < MAILARGS_STRING_COUNT; i++) - if (Ustrcmp(buffer, mailargs[i]) == 0) break; + if (Ustrcmp(buffer, "expand") == 0) + { + new->args[mailarg_index_expand].u = US""; /* not NULL => TRUE */ + ptr = nextword(ptr, buffer, sizeof(buffer), FALSE); + if (Ustrcmp(buffer, "file") != 0) + { + *error_pointer = string_sprintf("\"expand\" not followed by \"file\" " + " near line %d of filter file", line_number); + yield = FALSE; + break; + } + } - /* Not found keyword; assume end of this command */ + /* Scan for the keyword */ - if (i >= MAILARGS_STRING_COUNT) - { - ptr = saveptr; - break; - } + for (i = 0; i < MAILARGS_STRING_COUNT; i++) + if (Ustrcmp(buffer, mailargs[i]) == 0) break; - /* Found keyword, read the data item */ + /* Not found keyword; assume end of this command */ - ptr = nextitem(ptr, buffer, sizeof(buffer), FALSE); - if (*error_pointer) - { yield = FALSE; break; } - else new->args[i].u = string_copy(buffer); - } + if (i >= MAILARGS_STRING_COUNT) + { + ptr = saveptr; + break; + } - /* If this is the vacation command, apply some default settings to - some of the arguments. */ + /* Found keyword, read the data item */ - if (command == vacation_command) - { - if (!new->args[mailarg_index_file].u) + ptr = nextitem(ptr, buffer, sizeof(buffer), FALSE); + if (*error_pointer) + { yield = FALSE; break; } + else new->args[i].u = string_copy(buffer); + } + + /* If this is the vacation command, apply some default settings to + some of the arguments. */ + + if (command == VACATION_COMMAND) { - new->args[mailarg_index_file].u = string_copy(US".vacation.msg"); - new->args[mailarg_index_expand].u = US""; /* not NULL => TRUE */ + if (!new->args[mailarg_index_file].u) + { + new->args[mailarg_index_file].u = string_copy(US".vacation.msg"); + new->args[mailarg_index_expand].u = US""; /* not NULL => TRUE */ + } + if (!new->args[mailarg_index_log].u) + new->args[mailarg_index_log].u = string_copy(US".vacation.log"); + if (!new->args[mailarg_index_once].u) + new->args[mailarg_index_once].u = string_copy(US".vacation"); + if (!new->args[mailarg_index_once_repeat].u) + new->args[mailarg_index_once_repeat].u = string_copy(US"7d"); + if (!new->args[mailarg_index_subject].u) + new->args[mailarg_index_subject].u = string_copy(US"On vacation"); } - if (!new->args[mailarg_index_log].u) - new->args[mailarg_index_log].u = string_copy(US".vacation.log"); - if (!new->args[mailarg_index_once].u) - new->args[mailarg_index_once].u = string_copy(US".vacation"); - if (!new->args[mailarg_index_once_repeat].u) - new->args[mailarg_index_once_repeat].u = string_copy(US"7d"); - if (!new->args[mailarg_index_subject].u) - new->args[mailarg_index_subject].u = string_copy(US"On vacation"); - } - /* Join the address on to the chain of generated addresses */ + /* Join the address on to the chain of generated addresses */ - **lastcmdptr = new; - *lastcmdptr = &(new->next); - break; + **lastcmdptr = new; + *lastcmdptr = &(new->next); + break; /* Seen and unseen just set flags */ - case seen_command: - case unseen_command: - if (!*ptr) - { - *error_pointer = string_sprintf("\"seen\" or \"unseen\" " - "near line %d is not followed by a command", line_number); - yield = FALSE; - } - if (seen_force) - { - *error_pointer = string_sprintf("\"seen\" or \"unseen\" repeated " - "near line %d", line_number); - yield = FALSE; - } - seen_value = (command == seen_command); - seen_force = TRUE; - was_seen_or_unseen = TRUE; - break; + case SEEN_COMMAND: + case UNSEEN_COMMAND: + if (!*ptr) + { + *error_pointer = string_sprintf("\"seen\" or \"unseen\" " + "near line %d is not followed by a command", line_number); + yield = FALSE; + } + if (seen_force) + { + *error_pointer = string_sprintf("\"seen\" or \"unseen\" repeated " + "near line %d", line_number); + yield = FALSE; + } + seen_value = (command == SEEN_COMMAND); + seen_force = TRUE; + was_seen_or_unseen = TRUE; + break; /* So does noerror */ - case noerror_command: - if (!*ptr) - { - *error_pointer = string_sprintf("\"noerror\" " - "near line %d is not followed by a command", line_number); - yield = FALSE; - } - noerror_force = TRUE; - was_noerror = TRUE; - break; + case NOERROR_COMMAND: + if (!*ptr) + { + *error_pointer = string_sprintf("\"noerror\" " + "near line %d is not followed by a command", line_number); + yield = FALSE; + } + noerror_force = TRUE; + was_noerror = TRUE; + break; /* Oops */ default: - *error_pointer = string_sprintf("unknown filtering command \"%s\" " - "near line %d of filter file", buffer, line_number); - yield = FALSE; - break; + *error_pointer = string_sprintf("unknown filtering command \"%s\" " + "near line %d of filter file", buffer, line_number); + yield = FALSE; + break; } if (!was_seen_or_unseen && !was_noerror) @@ -1716,7 +1740,7 @@ while (commands) switch(commands->command) { - case add_command: + case ADD_COMMAND: for (i = 0; i < 2; i++) { const uschar *ss = expargs[i]; @@ -1748,7 +1772,7 @@ while (commands) /* A deliver command's argument must be a valid address. Its optional second argument (system filter only) must also be a valid address. */ - case deliver_command: + case DELIVER_COMMAND: for (i = 0; i < 2; i++) { s = expargs[i]; @@ -1824,7 +1848,7 @@ while (commands) } break; - case save_command: + case SAVE_COMMAND: s = expargs[0]; mode = commands->args[1].i; @@ -1867,7 +1891,7 @@ while (commands) } break; - case pipe_command: + case PIPE_COMMAND: s = string_copy(commands->args[0].u); if (filter_test != FTEST_NONE) { @@ -1917,7 +1941,7 @@ while (commands) /* Set up the file name and mode, and close any previously open file. */ - case logfile_command: + case LOGFILE_COMMAND: log_mode = commands->args[1].i; if (log_mode == -1) log_mode = 0600; if (log_fd >= 0) @@ -1933,7 +1957,7 @@ while (commands) } break; - case logwrite_command: + case LOGWRITE_COMMAND: s = expargs[0]; if (filter_test != FTEST_NONE) @@ -1992,7 +2016,7 @@ while (commands) command is rejected at parse time otherwise. However "headers charset" is always permitted. */ - case headers_command: + case HEADERS_COMMAND: { int subtype = commands->args[1].i; s = expargs[0]; @@ -2006,8 +2030,7 @@ while (commands) if (subtype == TRUE) { - while (isspace(*s)) s++; - if (*s) + if (Uskip_whitespace(&s)) { header_add(htype_other, "%s%s", s, s[Ustrlen(s)-1] == '\n' ? "" : "\n"); @@ -2037,17 +2060,17 @@ while (commands) very long by the inclusion of message headers; truncate if it is, and also ensure printing characters so as not to mess up log files. */ - case defer_command: + case DEFER_COMMAND: ff_name = US"defer"; ff_ret = FF_DEFER; goto DEFERFREEZEFAIL; - case fail_command: + case FAIL_COMMAND: ff_name = US"fail"; ff_ret = FF_FAIL; goto DEFERFREEZEFAIL; - case freeze_command: + case FREEZE_COMMAND: ff_name = US"freeze"; ff_ret = FF_FREEZE; @@ -2067,7 +2090,7 @@ while (commands) DEBUG(D_filter) debug_printf_indent("Filter: %s \"%s\"\n", ff_name, fmsg); return ff_ret; - case finish_command: + case FINISH_COMMAND: if (filter_test != FTEST_NONE) { indent(); @@ -2079,7 +2102,7 @@ while (commands) finish_obeyed = TRUE; return filter_delivered ? FF_DELIVERED : FF_NOTDELIVERED; - case if_command: + case IF_COMMAND: { uschar *save_address = filter_thisaddress; int ok = FF_DELIVERED; @@ -2104,8 +2127,8 @@ while (commands) return path is unset or if a non-trusted user supplied -f <> as the return path. */ - case mail_command: - case vacation_command: + case MAIL_COMMAND: + case VACATION_COMMAND: if (!return_path || !*return_path) { if (filter_test != FTEST_NONE) @@ -2201,7 +2224,7 @@ while (commands) indent(); printf("%sail to: %s%s%s\n", (commands->seen)? "Seen m" : "M", to ? to : US"", - commands->command == vacation_command ? " (vacation)" : "", + commands->command == VACATION_COMMAND ? " (vacation)" : "", commands->noerror ? " (noerror)" : ""); for (i = 1; i < MAILARGS_STRING_COUNT; i++) { @@ -2226,7 +2249,7 @@ while (commands) gstring * log_addr = NULL; if (!to) to = expand_string(US"$reply_address"); - while (isspace(*to)) to++; + Uskip_whitespace(&to); for (tt = to; *tt; tt++) /* Get rid of newlines */ if (*tt == '\n') @@ -2243,7 +2266,7 @@ while (commands) debug_printf_indent("Filter: %smail to: %s%s%s\n", commands->seen ? "seen " : "", to, - commands->command == vacation_command ? " (vacation)" : "", + commands->command == VACATION_COMMAND ? " (vacation)" : "", commands->noerror ? " (noerror)" : ""); for (i = 1; i < MAILARGS_STRING_COUNT; i++) { @@ -2298,7 +2321,7 @@ while (commands) /* Move on past this address */ tt = ss + (*ss ? 1 : 0); - while (isspace(*tt)) tt++; + Uskip_whitespace(&tt); } if (log_addr) @@ -2349,7 +2372,7 @@ while (commands) } break; - case testprint_command: + case TESTPRINT_COMMAND: if (filter_test != FTEST_NONE || (debug_selector & D_filter) != 0) { const uschar *s = string_printing(expargs[0]); @@ -2612,3 +2635,5 @@ return yield; /* End of filter.c */ +/* vi: aw ai sw=2 +*/ diff --git a/src/src/filtertest.c b/src/src/filtertest.c index 2426f7feb..60a853dcf 100644 --- a/src/src/filtertest.c +++ b/src/src/filtertest.c @@ -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 */ @@ -164,7 +164,7 @@ Returns: TRUE if no errors */ BOOL -filter_runtest(int fd, uschar *filename, BOOL is_system, BOOL dot_ended) +filter_runtest(int fd, const uschar * filename, BOOL is_system, BOOL dot_ended) { int rc, filter_type; BOOL yield; diff --git a/src/src/functions.h b/src/src/functions.h index 4222c623a..cdf97f8bd 100644 --- a/src/src/functions.h +++ b/src/src/functions.h @@ -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 */ @@ -100,10 +100,10 @@ extern int tlsa_lookup(const host_item *, dns_answer *, BOOL); /* Everything else... */ extern acl_block *acl_read(uschar *(*)(void), uschar **); -extern int acl_check(int, uschar *, uschar *, uschar **, uschar **); +extern int acl_check(int, const uschar *, uschar *, uschar **, uschar **); extern uschar *acl_current_verb(void); extern int acl_eval(int, uschar *, uschar **, uschar **); -extern uschar *acl_standalone_setvar(const uschar *); +extern uschar *acl_standalone_setvar(const uschar *, BOOL); extern tree_node *acl_var_create(uschar *); extern void acl_var_write(uschar *, uschar *, void *); @@ -216,9 +216,9 @@ extern void decode_bits(unsigned int *, size_t, int *, const uschar *, bit_table *, int, uschar *, int); extern void delete_pid_file(void); extern void deliver_local(address_item *, BOOL); -extern address_item *deliver_make_addr(uschar *, BOOL); +extern address_item *deliver_make_addr(const uschar *, BOOL); extern void delivery_log(int, address_item *, int, uschar *); -extern int deliver_message(uschar *, BOOL, BOOL); +extern int deliver_message(const uschar *, BOOL, BOOL); extern void deliver_msglog(const char *, ...) PRINTF_FUNCTION(1,2); extern void deliver_set_expansions(address_item *); extern int deliver_split_address(address_item *); @@ -253,7 +253,7 @@ extern BOOL dscp_lookup(const uschar *, int, int *, int *, int *); extern void enq_end(uschar *); extern BOOL enq_start(uschar *, unsigned); #ifndef DISABLE_EVENT -extern uschar *event_raise(uschar *, const uschar *, uschar *, int *); +extern uschar *event_raise(const uschar *, const uschar *, const uschar *, int *); extern void msg_event_raise(const uschar *, const address_item *); #endif @@ -284,7 +284,7 @@ extern BOOL fd_ready(int, time_t); extern int filter_interpret(const uschar *, int, address_item **, uschar **); extern BOOL filter_personal(string_item *, BOOL); -extern BOOL filter_runtest(int, uschar *, BOOL, BOOL); +extern BOOL filter_runtest(int, const uschar *, BOOL, BOOL); extern BOOL filter_system_interpret(address_item **, uschar **); extern uschar * fn_hdrs_added(void); @@ -311,7 +311,7 @@ extern BOOL host_is_tls_on_connect_port(int); extern int host_item_get_port(host_item *); extern void host_mask(int, int *, int); extern int host_name_lookup(void); -extern int host_nmtoa(int, int *, int, uschar *, int); +extern int host_nmtoa(int, const int *, int, uschar *, int); extern uschar *host_ntoa(int, const void *, uschar *, int *); extern int host_scan_for_local_hosts(host_item *, host_item **, BOOL *); @@ -335,7 +335,7 @@ extern int ip_streamsocket(const uschar *, uschar **, int, host_item *); extern int ipv6_nmtoa(int *, uschar *); -extern uschar *local_part_quote(uschar *); +extern const uschar *local_part_quote(const uschar *); extern int log_open_as_exim(const uschar * const); extern void log_close_all(void); @@ -345,7 +345,7 @@ extern uschar *macros_expand(int, int *, BOOL *); extern void mainlog_close(void); #ifdef WITH_CONTENT_SCAN extern int malware(const uschar *, BOOL, int); -extern int malware_in_file(uschar *); +extern int malware_in_file(const uschar *); extern void malware_init(void); extern gstring * malware_show_supported(gstring *); #endif @@ -375,11 +375,11 @@ extern ssize_t mime_decode_base64(FILE *, FILE *, uschar *); extern int mime_regex(const uschar **, BOOL); extern void mime_set_anomaly(int); #endif -extern uschar *moan_check_errorcopy(uschar *); +extern uschar *moan_check_errorcopy(const uschar *); extern BOOL moan_skipped_syntax_errors(uschar *, error_block *, uschar *, BOOL, uschar *); extern void moan_smtp_batch(uschar *, const char *, ...) PRINTF_FUNCTION(2,3); -extern BOOL moan_send_message(uschar *, int, error_block *eblock, +extern BOOL moan_send_message(const uschar *, int, error_block *eblock, header_line *, FILE *, uschar *); extern void moan_tell_someone(uschar *, address_item *, const uschar *, const char *, ...) PRINTF_FUNCTION(4,5); @@ -408,15 +408,15 @@ extern BOOL proxy_protocol_host(void); extern void proxy_protocol_setup(void); #endif -extern BOOL queue_action(uschar *, int, uschar **, int, int); +extern BOOL queue_action(const uschar *, int, const uschar **, int, int); extern void queue_check_only(void); extern unsigned queue_count(void); extern unsigned queue_count_cached(void); -extern void queue_list(int, uschar **, int); +extern void queue_list(int, const uschar **, int); #ifndef DISABLE_QUEUE_RAMP extern void queue_notify_daemon(const uschar * hostname); #endif -extern void queue_run(qrunner *, uschar *, uschar *, BOOL); +extern void queue_run(qrunner *, const uschar *, const uschar *, BOOL); extern int random_number(int); extern const uschar *rc_to_string(int); @@ -427,10 +427,10 @@ extern int rda_is_filter(const uschar *); extern BOOL readconf_depends(driver_instance *, uschar *); extern void readconf_driver_init(uschar *, driver_instance **, driver_info *, int, void *, int, optionlist *, int); -extern uschar *readconf_find_option(void *); +extern const uschar *readconf_find_option(void *); extern void readconf_main(BOOL); extern void readconf_options_from_list(optionlist *, unsigned, const uschar *, uschar *); -extern BOOL readconf_print(const uschar *, uschar *, BOOL); +extern BOOL readconf_print(const uschar *, const uschar *, BOOL); extern uschar *readconf_printtime(int); extern const uschar *readconf_readname(uschar *, int, const uschar *); extern int readconf_readtime(const uschar *, int, BOOL); @@ -440,7 +440,7 @@ extern void readconf_save_config(const uschar *); extern void read_message_body(BOOL); extern void receive_bomb_out(uschar *, uschar *) NORETURN; extern BOOL receive_check_fs(int); -extern BOOL receive_check_set_sender(uschar *); +extern BOOL receive_check_set_sender(const uschar *); extern BOOL receive_msg(BOOL); extern int_eximarith_t receive_statvfs(BOOL, int *); extern void receive_swallow_smtp(void); @@ -454,11 +454,14 @@ extern BOOL regex_match_and_setup(const pcre2_code *, const uschar *, int, in extern const pcre2_code *regex_compile(const uschar *, mcs_flags, uschar **, pcre2_compile_context *); extern const pcre2_code *regex_must_compile(const uschar *, mcs_flags, BOOL); -extern void retry_add_item(address_item *, uschar *, int); + +extern void retry_add_item(address_item *, const uschar *, int); extern BOOL retry_check_address(const uschar *, host_item *, uschar *, BOOL, - uschar **, uschar **); + const uschar **, const uschar **); extern retry_config *retry_find_config(const uschar *, const uschar *, int, int); -extern BOOL retry_ultimate_address_timeout(uschar *, const uschar *, +extern const uschar *retry_host_key_build(const host_item *, BOOL, + const uschar *); +extern BOOL retry_ultimate_address_timeout(const uschar *, const uschar *, dbdata_retry *, time_t); extern void retry_update(address_item **, address_item **, address_item **); extern const uschar *rewrite_address(const uschar *, BOOL, BOOL, rewrite_rule *, int); @@ -503,7 +506,7 @@ extern int sieve_interpret(const uschar *, int, const uschar *, const uschar *, const uschar *, const uschar *, address_item **, uschar **); extern void sigalrm_handler(int); -extern void single_queue_run(qrunner *, uschar *, uschar *); +extern void single_queue_run(qrunner *, const uschar *, const uschar *); extern int smtp_boundsock(smtp_connect_args *); extern void smtp_closedown(uschar *); extern void smtp_command_timeout_exit(void) NORETURN; @@ -544,12 +547,12 @@ extern int spam(const uschar **); extern FILE *spool_mbox(unsigned long *, const uschar *, uschar **); #endif extern void spool_clear_header_globals(void); -extern BOOL spool_move_message(uschar *, uschar *, uschar *, uschar *); -extern int spool_open_datafile(uschar *); +extern BOOL spool_move_message(const uschar *, const uschar *, const uschar *, const uschar *); +extern int spool_open_datafile(const uschar *); extern int spool_open_temp(uschar *); extern int spool_read_header(uschar *, BOOL, BOOL); extern uschar *spool_sender_from_msgid(const uschar *); -extern int spool_write_header(uschar *, int, uschar **); +extern int spool_write_header(const uschar *, int, uschar **); extern int stdin_getc(unsigned); extern int stdin_feof(void); extern int stdin_ferror(void); @@ -567,7 +570,6 @@ extern gstring *string_append_listele_n(gstring *, uschar, const uschar *, unsig extern gstring *string_append2_listele_n(gstring *, const uschar *, const uschar *, unsigned) WARN_UNUSED_RESULT; extern uschar *string_base62_32(unsigned long int); extern uschar *string_base62_64(unsigned long int); -extern gstring *string_cat (gstring *, const uschar * ) WARN_UNUSED_RESULT; extern gstring *string_catn(gstring *, const uschar *, int) WARN_UNUSED_RESULT; extern int string_compare_by_pointer(const void *, const void *); extern uschar *string_copy_dnsdomain(uschar *); @@ -576,6 +578,7 @@ extern uschar *string_dequote(const uschar **); extern uschar *string_format_size(int, uschar *); extern int string_interpret_escape(const uschar **); extern int string_is_ip_address(const uschar *, int *); +extern int string_is_ip_addressX(const uschar *, int *, const uschar **); #ifdef SUPPORT_I18N extern BOOL string_is_utf8(const uschar *); #endif @@ -631,11 +634,11 @@ extern void transport_do_pass_socket(const uschar *, const uschar *, const uschar *, uschar *, int); extern void transport_init(void); extern BOOL transport_pass_socket(const uschar *, const uschar *, const uschar *, uschar *, int -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS , unsigned, unsigned, unsigned #endif ); -extern uschar *transport_rcpt_address(address_item *, BOOL); +extern const uschar *transport_rcpt_address(address_item *, BOOL); extern BOOL transport_set_up_command(const uschar ***, const uschar *, unsigned, int, address_item *, const uschar *, uschar **); extern void transport_update_waiting(host_item *, uschar *); @@ -643,7 +646,7 @@ extern BOOL transport_write_block(transport_ctx *, uschar *, int, BOOL); extern void transport_write_reset(int); extern BOOL transport_write_string(int, const char *, ...); extern BOOL transport_headers_send(transport_ctx *, - BOOL (*)(transport_ctx *, uschar *, int)); + BOOL (*)(transport_ctx *, const uschar *, int)); extern gstring * transport_show_supported(gstring *); extern BOOL transport_write_message(transport_ctx *, int); extern void tree_add_duplicate(const uschar *, address_item *); @@ -678,7 +681,7 @@ extern int verify_check_notblind(BOOL); extern int verify_check_given_host(const uschar **, const host_item *); extern int verify_check_this_host(const uschar **, unsigned int *, const uschar*, const uschar *, const uschar **); -extern address_item *verify_checked_sender(uschar *); +extern address_item *verify_checked_sender(const uschar *); extern void verify_get_ident(int); extern void verify_quota(uschar *); extern int verify_quota_call(const uschar *, int, int, uschar **); @@ -686,7 +689,7 @@ extern BOOL verify_sender(int *, uschar **); extern BOOL verify_sender_preliminary(int *, uschar **); extern void version_init(void); -extern BOOL write_chunk(transport_ctx *, uschar *, int); +extern BOOL write_chunk(transport_ctx *, const uschar *, int); extern ssize_t write_to_fd_buf(int, const uschar *, size_t); extern uschar *wrap_header(const uschar *, unsigned, unsigned, const uschar *, unsigned); @@ -759,13 +762,19 @@ return US strncpy(CS dst, CCS src, n); /* Advance the string pointer given over any whitespace. -Return the next char as there's enought places using it to be useful. */ +Return the next char as there's enough places using it to be useful. */ #define Uskip_whitespace(sp) skip_whitespace(CUSS sp) static inline uschar skip_whitespace(const uschar ** sp) { while (isspace(**sp)) (*sp)++; return **sp; } +/* Ditto, non-whitespace */ + +#define Uskip_nonwhite(sp) skip_nonwhite(CUSS sp) +static inline uschar skip_nonwhite(const uschar ** sp) +{ while (**sp && !isspace(**sp)) (*sp)++; return **sp; } + /******************************************************************************/ @@ -1043,6 +1052,18 @@ if (g) store_release_above_3(g->s + (g->size = g->ptr + 1), file, line); } +/* plain string append to a growable-string */ + +static inline gstring * string_cat(gstring * g, const uschar * s) + WARN_UNUSED_RESULT; + +static inline gstring * +string_cat(gstring * g, const uschar * s) +{ +return string_catn(g, s, Ustrlen(s)); +} + + /* sprintf-append to a growable-string */ #define string_fmt_append(g, fmt, ...) \ @@ -1078,6 +1099,7 @@ g->s = s; } /* Append one gstring to another */ + static inline gstring * gstring_append(gstring * dest, gstring * item) { @@ -1109,6 +1131,22 @@ store_free_dns_answer_trc(dns_answer * dnsa, const uschar * func, unsigned line) store_free_3(dnsa, CCS func, line); } + +/* Check for an RR being large enough. Return TRUE iff bad. */ +static inline BOOL +rr_bad_size(const dns_record * rr, size_t minbytes) +{ +return rr->size < minbytes; +} + +/* Check for an RR having further data beyond a given pointer. +Return TRUE iff bad. */ +static inline BOOL +rr_bad_increment(const dns_record * rr, const uschar * ptr, size_t minbytes) +{ +return rr_bad_size(rr, ptr - rr->data + minbytes); +} + /******************************************************************************/ /* Routines with knowledge of spool layout */ @@ -1127,7 +1165,7 @@ return string_sprintf("%s/%s/%s/%s", # endif static inline uschar * -spool_q_sname(const uschar * purpose, const uschar * q, uschar * subdir) +spool_q_sname(const uschar * purpose, const uschar * q, const uschar * subdir) { return string_sprintf("%s%s%s%s%s", q, *q ? "/" : "", @@ -1136,7 +1174,7 @@ return string_sprintf("%s%s%s%s%s", } static inline uschar * -spool_sname(const uschar * purpose, uschar * subdir) +spool_sname(const uschar * purpose, const uschar * subdir) { return spool_q_sname(purpose, queue_name, subdir); } @@ -1383,6 +1421,11 @@ HDEBUG(D_transport|D_acl|D_v) debug_printf_indent(" SMTP%c> %s\n", client_cmd_log = string_catn(client_cmd_log, US"|", 1); (void) string_from_gstring(client_cmd_log); } + else if (mode == SCMD_MORE) + { + client_cmd_log = string_catn(client_cmd_log, US"+", 1); + (void) string_from_gstring(client_cmd_log); + } store_pool = old_pool; } # endif diff --git a/src/src/globals.c b/src/src/globals.c index f945379a0..0f9d5b54f 100644 --- a/src/src/globals.c +++ b/src/src/globals.c @@ -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 */ @@ -387,7 +387,7 @@ BOOL mua_wrapper = FALSE; BOOL preserve_message_logs = FALSE; BOOL print_topbitchars = FALSE; BOOL prod_requires_admin = TRUE; -#if defined(SUPPORT_PROXY) || defined(SUPPORT_SOCKS) || defined(EXPERIMETAL_XCLIENT) +#if defined(SUPPORT_PROXY) || defined(SUPPORT_SOCKS) || defined(EXPERIMENTAL_XCLIENT) BOOL proxy_session = FALSE; #endif @@ -467,6 +467,9 @@ uschar *acl_smtp_quit = NULL; uschar *acl_smtp_rcpt = NULL; uschar *acl_smtp_starttls = NULL; uschar *acl_smtp_vrfy = NULL; +#ifndef DISABLE_WELLKNOWN +uschar *acl_smtp_wellknown = NULL; +#endif tree_node *acl_var_c = NULL; tree_node *acl_var_m = NULL; @@ -474,56 +477,55 @@ uschar *acl_verify_message = NULL; string_item *acl_warn_logged = NULL; /* Names of SMTP places for use in ACL error messages, and corresponding SMTP -error codes - keep in step with definitions of ACL_WHERE_xxxx in macros.h. */ - -uschar *acl_wherenames[] = { US"RCPT", - US"MAIL", - US"PREDATA", - US"MIME", - US"DKIM", - US"DATA", +error codes (only those used) */ + +uschar *acl_wherenames[] = { [ACL_WHERE_RCPT] = US"RCPT", + [ACL_WHERE_MAIL] = US"MAIL", + [ACL_WHERE_PREDATA] = US"PREDATA", + [ACL_WHERE_MIME] = US"MIME", + [ACL_WHERE_DKIM] = US"DKIM", + [ACL_WHERE_DATA] = US"DATA", #ifndef DISABLE_PRDR - US"PRDR", -#endif - US"non-SMTP", - US"AUTH", - US"connection", - US"ETRN", - US"EXPN", - US"EHLO or HELO", - US"MAILAUTH", - US"non-SMTP-start", - US"NOTQUIT", - US"QUIT", - US"STARTTLS", - US"VRFY", - US"delivery", - US"unknown" + [ACL_WHERE_PRDR] = US"PRDR", +#endif + [ACL_WHERE_NOTSMTP] = US"non-SMTP", + [ACL_WHERE_AUTH] = US"AUTH", + [ACL_WHERE_CONNECT] = US"connection", + [ACL_WHERE_ETRN] = US"ETRN", + [ACL_WHERE_EXPN] = US"EXPN", + [ACL_WHERE_HELO] = US"EHLO or HELO", + [ACL_WHERE_MAILAUTH] = US"MAILAUTH", + [ACL_WHERE_NOTSMTP_START] = US"non-SMTP-start", + [ACL_WHERE_NOTQUIT] = US"NOTQUIT", + [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" }; -uschar *acl_wherecodes[] = { US"550", /* RCPT */ - US"550", /* MAIL */ - US"550", /* PREDATA */ - US"550", /* MIME */ - US"550", /* DKIM */ - US"550", /* DATA */ +uschar *acl_wherecodes[] = { [ACL_WHERE_RCPT] = US"550", + [ACL_WHERE_MAIL] = US"550", + [ACL_WHERE_PREDATA] = US"550", + [ACL_WHERE_MIME] = US"550", + [ACL_WHERE_DKIM] = US"550", + [ACL_WHERE_DATA] = US"550", #ifndef DISABLE_PRDR - US"550", /* RCPT PRDR */ -#endif - US"0", /* not SMTP; not relevant */ - US"503", /* AUTH */ - US"550", /* connect */ - US"458", /* ETRN */ - US"550", /* EXPN */ - US"550", /* HELO/EHLO */ - US"0", /* MAILAUTH; not relevant */ - US"0", /* not SMTP; not relevant */ - US"0", /* NOTQUIT; not relevant */ - US"0", /* QUIT; not relevant */ - US"550", /* STARTTLS */ - US"252", /* VRFY */ - US"0", /* delivery; not relevant */ - US"0" /* unknown; not relevant */ + [ACL_WHERE_PRDR] = US"550", +#endif + [ACL_WHERE_AUTH] = US"503", + [ACL_WHERE_CONNECT] = US"550", + [ACL_WHERE_ETRN] = US"458", + [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", }; uschar *add_environment = NULL; @@ -610,8 +612,8 @@ address_item address_defaults = { } }; -uschar *address_file = NULL; -uschar *address_pipe = NULL; +const uschar *address_file = NULL; +const uschar *address_pipe = NULL; tree_node *addresslist_anchor = NULL; int addresslist_count = 0; gid_t *admin_groups = NULL; @@ -683,7 +685,7 @@ int body_linecount = 0; int body_zerocount = 0; uschar *bounce_message_file = NULL; uschar *bounce_message_text = NULL; -uschar *bounce_recipient = NULL; +const uschar *bounce_recipient = NULL; int bounce_return_linesize_limit = 998; int bounce_return_size_limit = 100*1024; uschar *bounce_sender_authentication = NULL; @@ -706,7 +708,7 @@ unsigned chunking_data_left = 0; chunking_state_t chunking_state= CHUNKING_NOT_OFFERED; const pcre2_code *regex_CHUNKING = NULL; -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS const pcre2_code *regex_LIMITS = NULL; #endif @@ -726,7 +728,7 @@ gid_t config_gid = CONFIGURE_GROUP; #else gid_t config_gid = 0; #endif -uschar *config_main_filelist = US CONFIGURE_FILE +const uschar * config_main_filelist = US CONFIGURE_FILE "\0<-----------Space to patch configure_filename->"; uschar *config_main_filename = NULL; uschar *config_main_directory = NULL; @@ -744,9 +746,10 @@ BOOL continue_proxy_dane = FALSE; uschar *continue_proxy_sni = NULL; uschar *continue_hostname = NULL; uschar *continue_host_address = NULL; +uschar continue_next_id[MESSAGE_ID_LENGTH +1] = {[0]='\0'}; int continue_sequence = 1; uschar *continue_transport = NULL; -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS unsigned continue_limit_mail = 0; unsigned continue_limit_rcpt = 0; unsigned continue_limit_rcptdom= 0; @@ -842,14 +845,14 @@ const uschar *deliver_host_address = NULL; int deliver_host_port = 0; uschar *deliver_in_buffer = NULL; ino_t deliver_inode = 0; -uschar *deliver_localpart = NULL; +const uschar *deliver_localpart= NULL; uschar *deliver_localpart_data = NULL; -uschar *deliver_localpart_orig = NULL; -uschar *deliver_localpart_parent = NULL; -uschar *deliver_localpart_prefix = NULL; -uschar *deliver_localpart_prefix_v = NULL; -uschar *deliver_localpart_suffix = NULL; -uschar *deliver_localpart_suffix_v = NULL; +const uschar *deliver_localpart_orig = NULL; +const uschar *deliver_localpart_parent = NULL; +const uschar *deliver_localpart_prefix = NULL; +const uschar *deliver_localpart_prefix_v = NULL; +const uschar *deliver_localpart_suffix = NULL; +const uschar *deliver_localpart_suffix_v = NULL; uschar *deliver_out_buffer = NULL; int deliver_queue_load_max = -1; address_item *deliver_recipients = NULL; @@ -864,6 +867,7 @@ void *dkim_signatures = NULL; uschar *dkim_signers = NULL; uschar *dkim_signing_domain = NULL; uschar *dkim_signing_selector = NULL; +gstring *dkim_signing_record = NULL; uschar *dkim_verify_hashes = US"sha256:sha512"; uschar *dkim_verify_keytypes = US"ed25519:rsa"; uschar *dkim_verify_min_keysizes = US"rsa=1024 ed25519=250"; @@ -912,10 +916,10 @@ int error_handling = ERRORS_SENDER; uschar *errors_reply_to = NULL; int errors_sender_rc = EXIT_FAILURE; #ifndef DISABLE_EVENT -uschar *event_action = NULL; /* expansion for delivery events */ -uschar *event_data = NULL; /* auxiliary data variable for event */ -int event_defer_errno = 0; -const uschar *event_name = NULL; /* event name variable */ +uschar *event_action = NULL; /* expansion for delivery events */ +const uschar *event_data = NULL; /* auxiliary data variable for event */ +int event_defer_errno = 0; +const uschar *event_name = NULL; /* event name variable */ #endif @@ -939,8 +943,8 @@ uschar *fake_response_text = US"Your message has been rejected but is " int filter_n[FILTER_VARIABLE_COUNT]; int filter_sn[FILTER_VARIABLE_COUNT]; int filter_test = FTEST_NONE; -uschar *filter_test_sfile = NULL; -uschar *filter_test_ufile = NULL; +const uschar * filter_test_sfile = NULL; +const uschar * filter_test_ufile = NULL; uschar *filter_thisaddress = NULL; int finduser_retries = 0; uid_t fixed_never_users[] = { FIXED_NEVER_USERS }; @@ -1028,7 +1032,7 @@ const uschar *letter_digit_hyphen_dot = US"abcdefghijklmnopqrstuvwxyz" ".-0123456789" "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS uschar *limits_advertise_hosts = US"*"; #endif int load_average = -2; @@ -1185,7 +1189,7 @@ uschar *message_size_limit = US"50M"; int message_utf8_downconvert = 0; /* -1 ifneeded; 0 never; 1 always */ #endif uschar message_subdir[2] = { 0, 0 }; -uschar *message_reference = NULL; +const uschar *message_reference= NULL; /* MIME ACL expandables */ #ifdef WITH_CONTENT_SCAN @@ -1219,7 +1223,7 @@ uschar *originator_login = NULL; uschar *originator_name = NULL; uid_t originator_uid; uschar *override_local_interfaces = NULL; -uschar *override_pid_file_path = NULL; +const uschar *override_pid_file_path = NULL; BOOL panic_coredump = FALSE; pcre2_general_context * pcre_gen_ctx = NULL; @@ -1229,7 +1233,7 @@ pcre2_general_context * pcre_mlc_ctx = NULL; pcre2_compile_context * pcre_mlc_cmp_ctx = NULL; uschar *percent_hack_domains = NULL; -uschar *pid_file_path = US PID_FILE_PATH +const uschar *pid_file_path = US PID_FILE_PATH "\0<--------------Space to patch pid_file_path->"; #ifndef DISABLE_PIPE_CONNECT uschar *pipe_connect_advertise_hosts = US"*"; @@ -1276,8 +1280,8 @@ tree_node *ratelimiters_cmd = NULL; tree_node *ratelimiters_conn = NULL; tree_node *ratelimiters_mail = NULL; uschar *raw_active_hostname = NULL; -uschar *raw_sender = NULL; -uschar **raw_recipients = NULL; +const uschar *raw_sender = NULL; +const uschar **raw_recipients = NULL; int raw_recipients_count = 0; int rcpt_count = 0; @@ -1289,7 +1293,7 @@ int receive_linecount = 0; int receive_messagecount = 0; int receive_timeout = 0; int received_count = 0; -uschar *received_for = NULL; +const uschar *received_for = NULL; /* This is the default text for Received headers generated by Exim. The date will be automatically added on the end. */ @@ -1321,7 +1325,8 @@ uschar *recipient_verify_failure = NULL; int recipients_count = 0; recipient_item *recipients_list = NULL; int recipients_list_max = 0; -int recipients_max = 50000; +uschar *recipients_max = US"50000"; +int recipients_max_expanded= 0; const pcre2_code *regex_AUTH = NULL; const pcre2_code *regex_check_dns_names = NULL; const pcre2_code *regex_From = NULL; @@ -1348,7 +1353,7 @@ int retry_data_expire = 7*24*60*60; int retry_interval_max = 24*60*60; int retry_maximum_timeout = 0; /* set from retry config */ retry_config *retries = NULL; -uschar *return_path = NULL; +const uschar *return_path = NULL; int rewrite_existflags = 0; uschar *rfc1413_hosts = US"@[]"; int rfc1413_query_timeout = 0; @@ -1456,10 +1461,10 @@ int runrc = 0; uschar *search_error_message = NULL; uschar *self_hostname = NULL; -uschar *sender_address = NULL; +const uschar *sender_address = NULL; unsigned int sender_address_cache[(MAX_NAMED_LIST * 2)/32]; uschar *sender_address_data = NULL; -uschar *sender_address_unrewritten = NULL; +const uschar *sender_address_unrewritten = NULL; uschar *sender_data = NULL; unsigned int sender_domain_cache[(MAX_NAMED_LIST * 2)/32]; uschar *sender_fullhost = NULL; @@ -1485,7 +1490,7 @@ uschar *sending_ip_address = NULL; int sending_port = -1; SIGNAL_BOOL sigalrm_seen = FALSE; const uschar *sigalarm_setter = NULL; -uschar **sighup_argv = NULL; +const uschar **sighup_argv = NULL; int slow_lookup_log = 0; /* millisecs, zero disables */ int smtp_accept_count = 0; int smtp_accept_max = 20; @@ -1572,7 +1577,7 @@ int string_datestamp_type = -1; const uschar *submission_domain = NULL; const uschar *submission_name = NULL; int syslog_facility = LOG_MAIL; -uschar *syslog_processname = US"exim"; +const uschar *syslog_processname= US"exim"; uschar *system_filter = NULL; uschar *system_filter_directory_transport = NULL; @@ -1668,4 +1673,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 +*/ diff --git a/src/src/globals.h b/src/src/globals.h index ff82bef6d..a82d529c0 100644 --- a/src/src/globals.h +++ b/src/src/globals.h @@ -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 */ @@ -323,7 +323,7 @@ extern uschar *acl_smtp_connect; /* ACL run on SMTP connection */ extern uschar *acl_smtp_data; /* ACL run after DATA received */ #ifndef DISABLE_PRDR extern uschar *acl_smtp_data_prdr; /* ACL run after DATA received if in PRDR mode*/ -const extern pcre2_code *regex_PRDR; /* For recognizing PRDR settings */ +extern const pcre2_code *regex_PRDR; /* For recognizing PRDR settings */ #endif #ifndef DISABLE_DKIM extern uschar *acl_smtp_dkim; /* ACL run for DKIM signatures / domains */ @@ -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 */ @@ -350,8 +353,8 @@ extern uschar *acl_wherecodes[]; /* Response codes for ACL fails */ extern uschar *acl_wherenames[]; /* Names for messages */ extern address_item *addr_duplicate; /* Duplicate address list */ extern address_item address_defaults; /* Default data for address item */ -extern uschar *address_file; /* Name of file when delivering to one */ -extern uschar *address_pipe; /* Pipe command when delivering to one */ +extern const uschar *address_file; /* Name of file when delivering to one */ +extern const uschar *address_pipe; /* Pipe command when delivering to one */ extern tree_node *addresslist_anchor; /* Tree of defined address lists */ extern int addresslist_count; /* Number defined */ extern gid_t *admin_groups; /* List of admin groups */ @@ -400,7 +403,7 @@ extern int bsmtp_transaction_linecount; /* Start of last transaction */ extern int body_8bitmime; /* sender declared BODY= ; 7=7BIT, 8=8BITMIME */ extern uschar *bounce_message_file; /* Template file */ extern uschar *bounce_message_text; /* One-liner */ -extern uschar *bounce_recipient; /* When writing an errmsg */ +extern const uschar *bounce_recipient; /* When writing an errmsg */ extern BOOL bounce_return_body; /* Include body in returned message */ extern int bounce_return_linesize_limit; /* Max line length in return */ extern BOOL bounce_return_message; /* Include message in bounce */ @@ -438,7 +441,7 @@ extern FILE *config_file; /* Configuration file */ extern const uschar *config_filename; /* Configuration file name */ extern gid_t config_gid; /* Additional group owner */ extern int config_lineno; /* Line number */ -extern uschar *config_main_filelist; /* List of possible config files */ +extern const uschar *config_main_filelist; /* List of possible config files */ extern uschar *config_main_filename; /* File name actually used */ extern uschar *config_main_directory; /* Directory where the main config file was found */ extern uid_t config_uid; /* Additional owner */ @@ -447,9 +450,10 @@ extern BOOL continue_proxy_dane; /* proxied conn is DANE */ extern uschar *continue_proxy_sni; /* proxied conn SNI */ extern uschar *continue_hostname; /* Host for continued delivery */ extern uschar *continue_host_address; /* IP address for ditto */ +extern uschar continue_next_id[]; /* Next message_id from hintsdb */ extern int continue_sequence; /* Sequence num for continued delivery */ extern uschar *continue_transport; /* Transport for continued delivery */ -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS extern unsigned continue_limit_mail; /* Peer advertised limit */ extern unsigned continue_limit_rcpt; extern unsigned continue_limit_rcptdom; @@ -517,14 +521,14 @@ extern const uschar *deliver_host_address; /* Address for remote delivery filter extern int deliver_host_port; /* Address for remote delivery filter */ extern uschar *deliver_in_buffer; /* Buffer for copying file */ extern ino_t deliver_inode; /* Inode for appendfile */ -extern uschar *deliver_localpart; /* The local part for delivery */ +extern const uschar *deliver_localpart;/* The local part for delivery */ extern uschar *deliver_localpart_data; /* From local part lookup (de-tainted) */ -extern uschar *deliver_localpart_orig; /* The original local part for delivery */ -extern uschar *deliver_localpart_parent; /* The parent local part for delivery */ -extern uschar *deliver_localpart_prefix; /* The stripped prefix, if any */ -extern uschar *deliver_localpart_prefix_v; /* The stripped-prefix variable portion, if any */ -extern uschar *deliver_localpart_suffix; /* The stripped suffix, if any */ -extern uschar *deliver_localpart_suffix_v; /* The stripped-suffix variable portion, if any */ +extern const uschar *deliver_localpart_orig; /* The original local part for delivery */ +extern const uschar *deliver_localpart_parent; /* The parent local part for delivery */ +extern const uschar *deliver_localpart_prefix; /* The stripped prefix, if any */ +extern const uschar *deliver_localpart_prefix_v; /* The stripped-prefix variable portion, if any */ +extern const uschar *deliver_localpart_suffix; /* The stripped suffix, if any */ +extern const uschar *deliver_localpart_suffix_v; /* The stripped-suffix variable portion, if any */ extern uschar *deliver_out_buffer; /* Buffer for copying file */ extern int deliver_queue_load_max; /* Different value for queue running */ extern address_item *deliver_recipients; /* Current set of addresses */ @@ -541,6 +545,7 @@ extern uschar *dkim_cur_signer; /* Expansion variable, holds the current extern int dkim_key_length; /* Expansion variable, length of signing key in bits */ extern void *dkim_signatures; /* Actually a (pdkim_signature *) but most files do not need to know */ extern uschar *dkim_signers; /* Expansion variable, holds colon-separated list of domains and identities that have signed a message */ +extern gstring *dkim_signing_record; /* domains+selectors used */ extern uschar *dkim_signing_domain; /* Expansion variable, domain used for signing a message. */ extern uschar *dkim_signing_selector; /* Expansion variable, selector used for signing a message. */ extern uschar *dkim_verify_hashes; /* Preference order for signatures */ @@ -601,7 +606,7 @@ extern int errors_sender_rc; /* Return after message to sender*/ #ifndef DISABLE_EVENT extern uschar *event_action; /* expansion for delivery events */ -extern uschar *event_data; /* event data */ +extern const uschar *event_data; /* event data */ extern int event_defer_errno; /* error number set when a remote delivery is deferred with a host error */ extern const uschar *event_name; /* event classification */ #endif @@ -625,8 +630,8 @@ extern uschar *fake_response_text; /* User defined message for the above. De extern int filter_n[FILTER_VARIABLE_COUNT]; /* filter variables */ extern int filter_sn[FILTER_VARIABLE_COUNT]; /* variables set by system filter */ extern int filter_test; /* Filter test type */ -extern uschar *filter_test_sfile; /* System filter test file */ -extern uschar *filter_test_ufile; /* User filter test file */ +extern const uschar *filter_test_sfile;/* System filter test file */ +extern const uschar *filter_test_ufile;/* User filter test file */ extern uschar *filter_thisaddress; /* For address looping */ extern int finduser_retries; /* Retry count for getpwnam() */ extern uid_t fixed_never_users[]; /* Can't be overridden */ @@ -687,7 +692,7 @@ extern int keep_malformed; /* Time to keep malformed messages */ extern uschar *eldap_dn; /* Where LDAP DNs are left */ extern const uschar *letter_digit_hyphen_dot; /* Legitimate DNS host name chars */ -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS extern uschar *limits_advertise_hosts; /* for banner/EHLO pipelining */ #endif extern int load_average; /* Most recently read load average */ @@ -752,10 +757,10 @@ extern uschar *message_size_limit; /* As it says */ #ifdef SUPPORT_I18N extern BOOL message_smtputf8; /* Internationalized mail handling */ extern int message_utf8_downconvert; /* convert from utf8 */ -const extern pcre2_code *regex_UTF8; /* For recognizing SMTPUTF8 settings */ +extern const pcre2_code *regex_UTF8; /* For recognizing SMTPUTF8 settings */ #endif extern uschar message_subdir[]; /* Subdirectory for messages */ -extern uschar *message_reference; /* Reference for error messages */ +extern const uschar *message_reference;/* Reference for error messages */ /* MIME ACL expandables */ #ifdef WITH_CONTENT_SCAN @@ -798,7 +803,7 @@ extern uschar *originator_login; /* Login of same */ extern uschar *originator_name; /* Full name of same */ extern uid_t originator_uid; /* Uid of ditto */ extern uschar *override_local_interfaces; /* Value of -oX argument */ -extern uschar *override_pid_file_path; /* Value of -oP argument */ +extern const uschar *override_pid_file_path; /* Value of -oP argument */ extern BOOL panic_coredump; /* SEGV rather than exit, on LOG_PANIC_DIE */ extern pcre2_general_context * pcre_gen_ctx; /* pcre memory management */ @@ -808,7 +813,7 @@ extern pcre2_general_context * pcre_mlc_ctx; extern pcre2_compile_context * pcre_mlc_cmp_ctx; extern uschar *percent_hack_domains; /* Local domains for which '% operates */ -extern uschar *pid_file_path; /* For writing daemon pids */ +extern const uschar *pid_file_path; /* For writing daemon pids */ #ifndef DISABLE_PIPE_CONNECT extern uschar *pipe_connect_advertise_hosts; /* for banner/EHLO pipelining */ #endif @@ -872,8 +877,8 @@ extern tree_node *ratelimiters_cmd; /* Results of command ratelimit checks */ extern tree_node *ratelimiters_conn; /* Results of connection ratelimit checks */ extern tree_node *ratelimiters_mail; /* Results of per-mail ratelimit checks */ extern uschar *raw_active_hostname; /* Pre-expansion */ -extern uschar *raw_sender; /* Before rewriting */ -extern uschar **raw_recipients; /* Before rewriting */ +extern const uschar *raw_sender; /* Before rewriting */ +extern const uschar **raw_recipients; /* Before rewriting */ extern int raw_recipients_count; extern const uschar * rc_names[]; /* Mostly for debug output */ extern int rcpt_count; /* Count of RCPT commands in a message */ @@ -885,7 +890,7 @@ extern int receive_linecount; /* Mainly for BSMTP errors */ extern int receive_messagecount; /* Mainly for BSMTP errors */ extern int receive_timeout; /* For non-SMTP acceptance */ extern int received_count; /* Count of Received: headers */ -extern uschar *received_for; /* For "for" field */ +extern const uschar *received_for; /* For "for" field */ extern uschar *received_header_text; /* Definition of Received: header */ extern int received_headers_max; /* Max count of Received: headers */ extern struct timeval received_time; /* Time the message started to be received */ @@ -894,14 +899,15 @@ extern uschar *recipient_data; /* lookup data for recipients */ extern uschar *recipient_unqualified_hosts; /* Permitted unqualified recipients */ extern uschar *recipient_verify_failure; /* What went wrong */ extern int recipients_list_max; /* Maximum number fitting in list */ -extern int recipients_max; /* Max permitted */ +extern uschar *recipients_max; /* Max permitted */ +extern int recipients_max_expanded; extern BOOL recipients_max_reject; /* If TRUE, reject whole message */ extern const pcre2_code *regex_AUTH; /* For recognizing AUTH settings */ extern const pcre2_code *regex_check_dns_names; /* For DNS name checking */ extern const pcre2_code *regex_From; /* For recognizing "From_" lines */ extern const pcre2_code *regex_CHUNKING; /* For recognizing CHUNKING (RFC 3030) */ extern const pcre2_code *regex_IGNOREQUOTA; /* For recognizing IGNOREQUOTA (LMTP) */ -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS extern const pcre2_code *regex_LIMITS; /* For recognizing LIMITS */ #endif extern const pcre2_code *regex_PIPELINING; /* For recognizing PIPELINING */ @@ -926,7 +932,7 @@ extern retry_config *retries; /* Chain of retry config information */ extern int retry_data_expire; /* When to expire retry data */ extern int retry_interval_max; /* Absolute maximum */ extern int retry_maximum_timeout; /* The maximum timeout */ -extern uschar *return_path; /* Return path for a message */ +extern const uschar *return_path; /* Return path for a message */ extern BOOL return_path_remove; /* Remove return-path headers */ extern int rewrite_existflags; /* Indicate which headers have rewrites */ extern uschar *rfc1413_hosts; /* RFC hosts */ @@ -947,7 +953,7 @@ extern uschar *search_error_message; /* Details of lookup problem */ extern uschar *self_hostname; /* Self host after routing->directors */ extern unsigned int sender_address_cache[(MAX_NAMED_LIST * 2)/32]; /* Cache bits for sender */ extern uschar *sender_address_data; /* address_data from sender verify */ -extern uschar *sender_address_unrewritten; /* Set if rewritten by verify */ +extern const uschar *sender_address_unrewritten; /* Set if rewritten by verify */ extern uschar *sender_data; /* lookup result for senders */ extern unsigned int sender_domain_cache[(MAX_NAMED_LIST * 2)/32]; /* Cache bits for sender domain */ extern uschar *sender_fullhost; /* Sender host name + address */ @@ -970,7 +976,7 @@ extern uschar *sending_ip_address; /* Address of outgoing (SMTP) interface * extern int sending_port; /* Port of outgoing interface */ extern SIGNAL_BOOL sigalrm_seen; /* Flag for sigalrm_handler */ extern const uschar *sigalarm_setter; /* For debug, set to callpoint of alarm() */ -extern uschar **sighup_argv; /* Args for re-execing after SIGHUP */ +extern const uschar **sighup_argv; /* Args for re-execing after SIGHUP */ extern int slow_lookup_log; /* Log DNS lookups taking longer than N millisecs */ extern int smtp_accept_count; /* Count of connections */ extern BOOL smtp_accept_keepalive; /* Set keepalive on incoming */ @@ -1065,7 +1071,7 @@ extern const uschar *submission_name; /* User name set from ACL */ extern BOOL syslog_duplication; /* FALSE => no duplicate logging */ extern int syslog_facility; /* As defined by Syslog.h */ extern BOOL syslog_pid; /* TRUE if PID on syslogs */ -extern uschar *syslog_processname; /* 'ident' param to openlog() */ +extern const uschar *syslog_processname; /* 'ident' param to openlog() */ extern BOOL syslog_timestamp; /* TRUE if time on syslogs */ extern uschar *system_filter; /* Name of system filter file */ @@ -1132,4 +1138,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 */ diff --git a/src/src/hash.c b/src/src/hash.c index 95860fc50..17a52fe43 100644 --- a/src/src/hash.c +++ b/src/src/hash.c @@ -1,7 +1,7 @@ /* * Exim - an Internet mail transport agent * - * Copyright (c) The Exim Maintainers 2010 - 2022 + * Copyright (c) The Exim Maintainers 2010 - 2023 * Copyright (c) University of Cambridge 1995 - 2009 * SPDX-License-Identifier: GPL-2.0-or-later * diff --git a/src/src/hintsdb.h b/src/src/hintsdb.h index 2d7199eda..c5a856abc 100644 --- a/src/src/hintsdb.h +++ b/src/src/hintsdb.h @@ -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,13 +16,362 @@ 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_lockfile_needed API semantics predicate + exim_dbopen + 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 + +/* 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 */ + +static inline BOOL +exim_lockfile_needed(void) +{ +return FALSE; /* We do transaction; no extra locking needed */ +} + +/* 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); + ret = sqlite3_exec(dbp, "BEGIN TRANSACTION;", NULL, NULL, NULL); + if (ret == SQLITE_OK && flags & O_CREAT) + ret = sqlite3_exec(dbp, + "CREATE TABLE IF NOT EXISTS tbl (ky TEXT PRIMARY KEY, dat BLOB);", + NULL, NULL, NULL); + if (ret != SQLITE_OK) + sqlite3_close(dbp); + } +//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); +# ifdef COMPILE_UTILITY +res->data = malloc(res->len); +# else +res->data = store_get(res->len, GET_TAINTED); +# endif +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; +} + +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) +{ +int hlen = data->len * 2, off = 0, res; +# define FMT "INSERT OR %s INTO tbl (ky,dat) VALUES ('%.*s', X'%.*s');" +# ifdef COMPILE_UTILITY +uschar * hex = malloc(hlen+1); +# else +uschar * hex = store_get(hlen+1, data->data); +# endif +uschar * qry; + +for (const uschar * s = data->data, * t = s + data->len; s < t; s++, off += 2) + sprintf(CS hex + off, "%02X", *s); + +# ifdef COMPILE_UTILITY +res = snprintf(CS hex, 0, FMT, alt, (int) key->len, key->data, hlen, hex); +qry = malloc(res); +snprintf(CS qry, res, FMT, alt, (int) key->len, key->data, hlen, hex); +/* fprintf(stderr, "exim_s_dbp(%s)\n", qry); */ +res = sqlite3_exec(dbp, CS qry, NULL, NULL, NULL); +free(qry); +free(hex); +# else +qry = string_sprintf(FMT, alt, (int) key->len, key->data, hlen, 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); /* res excludes nul */ +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) +{ +# ifdef COMPILE_UTILITY +EXIM_CURSOR * c = malloc(sizeof(int)); +# else +EXIM_CURSOR * c = store_malloc(sizeof(int)); +# endif +*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-1, 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) +{ +# ifdef COMPILE_UTILITY +free(cursor); +# else +store_free(cursor); +# endif +} + + +/* EXIM_DBCLOSE */ +static void +exim_dbclose__(EXIM_DB * dbp) +{ +(void) sqlite3_exec(dbp, "COMMIT TRANSACTION;", NULL, NULL, NULL); +sqlite3_close(dbp); +} + + +/* 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 /* ************************* tdb interface ************************ */ /*XXX https://manpages.org/tdb/3 mentions concurrent writes. @@ -45,6 +394,12 @@ tdb_traverse to be called) */ /* Access functions */ +static inline BOOL +exim_lockfile_needed(void) +{ +return TRUE; +} + /* 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, @@ -85,7 +440,11 @@ exim_dbdel(EXIM_DB * dbp, EXIM_DATUM * key) static inline EXIM_CURSOR * exim_dbcreate_cursor(EXIM_DB * dbp) { +# ifdef COMPILE_UTILITY +EXIM_CURSOR * c = malloc(sizeof(TDB_DATA)); +# else EXIM_CURSOR * c = store_malloc(sizeof(TDB_DATA)); +# endif c->dptr = NULL; return c; } @@ -157,6 +516,10 @@ d->dptr = NULL; #elif defined USE_DB +# if defined(USE_TDB) || defined(USE_GDBM) || defined(USE_SQLITE) +# error USE_DB conflict with alternate definition +# endif + # include /* 1.x did no locking @@ -212,7 +575,13 @@ log_write(0, LOG_MAIN, "Berkeley DB error: %s", msg); -/* Access functions */ +/* Access functions (BDB 4.1+) */ + +static inline BOOL +exim_lockfile_needed(void) +{ +return TRUE; +} /* EXIM_DBOPEN - return pointer to an EXIM_DB, NULL if failed */ /* The API changed for DB 4.1. - and we also starting using the "env" with a @@ -235,8 +604,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; @@ -358,7 +728,13 @@ exim_datum_free(EXIM_DATUM * d) /* Some text for messages */ # define EXIM_DBTYPE "db (v3/4)" -/* Access functions */ +/* Access functions (BDB 3/4) */ + +static inline BOOL +exim_lockfile_needed(void) +{ +return TRUE; +} /* EXIM_DBOPEN - return pointer to an EXIM_DB, NULL if failed */ static inline EXIM_DB * @@ -369,8 +745,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; @@ -480,7 +857,11 @@ 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) || defined(USE_SQLITE) +# error USE_GDBM conflict with alternate definition +# endif # include @@ -500,7 +881,13 @@ typedef struct { # define EXIM_DBTYPE "gdbm" -/* Access functions */ +/* Access functions (gdbm) */ + +static inline BOOL +exim_lockfile_needed(void) +{ +return TRUE; +} /* EXIM_DBOPEN - return pointer to an EXIM_DB, NULL if failed */ static inline EXIM_DB * @@ -513,8 +900,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); @@ -609,7 +995,7 @@ static inline void exim_datum_free(EXIM_DATUM * d) { free(d->dptr); } -/* size limit */ +/* size limit. GDBM is int-max limited, but we want to be less silly */ # define EXIM_DB_RLIMIT 150 @@ -620,8 +1006,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 */ +/* 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 **********************/ @@ -641,7 +1027,13 @@ interface */ # define EXIM_DBTYPE "ndbm" -/* Access functions */ +/* Access functions (ndbm) */ + +static inline BOOL +exim_lockfile_needed(void) +{ +return TRUE; +} /* EXIM_DBOPEN - returns a EXIM_DB *, NULL if failed */ /* Check that the name given is not present. This catches @@ -745,7 +1137,7 @@ exim_datum_free(EXIM_DATUM * d) # define EXIM_DB_RLIMIT 150 -#endif /* USE_GDBM */ +#endif /* !USE_GDBM */ @@ -809,3 +1201,5 @@ exim_dbclose__(dbp); #endif /* whole file */ /* End of hintsdb.h */ +/* vi: aw ai sw=2 +*/ diff --git a/src/src/hintsdb_structs.h b/src/src/hintsdb_structs.h index 0e5853b2b..5f50dfd5f 100644 --- a/src/src/hintsdb_structs.h +++ b/src/src/hintsdb_structs.h @@ -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 */ @@ -163,7 +163,7 @@ typedef struct { unsigned short cleartext_auths; unsigned short crypted_auths; -# ifdef EXPERIMENTAL_ESMTP_LIMITS +# ifndef DISABLE_ESMTP_LIMITS unsigned int limit_mail; unsigned int limit_rcpt; unsigned int limit_rcptdom; diff --git a/src/src/host.c b/src/src/host.c index 3e5a88660..597971814 100644 --- a/src/src/host.c +++ b/src/src/host.c @@ -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 */ @@ -1061,19 +1061,15 @@ Returns: the number of characters placed in buffer, not counting */ int -host_nmtoa(int count, int *binary, int mask, uschar *buffer, int sep) +host_nmtoa(int count, const int * binary, int mask, uschar * buffer, int sep) { -int j; -uschar *tt = buffer; +uschar * tt = buffer; if (count == 1) - { - j = binary[0]; - for (int i = 24; i >= 0; i -= 8) + for (int j = binary[0], i = 24; i >= 0; i -= 8) tt += sprintf(CS tt, "%d.", (j >> i) & 255); - } else - for (int i = 0; i < 4; i++) + for (int j, i = 0; i < 4; i++) { j = binary[i]; tt += sprintf(CS tt, "%04x%c%04x%c", (j >> 16) & 0xffff, sep, j & 0xffff, sep); @@ -1302,30 +1298,30 @@ host_item *last = *lastptr; host_item *prev = NULL; host_item *h; -if (removed != NULL) *removed = FALSE; +if (removed) *removed = FALSE; -if (local_interface_data == NULL) local_interface_data = host_find_interfaces(); +if (!local_interface_data) local_interface_data = host_find_interfaces(); for (h = host; h != last->next; h = h->next) { - #ifndef STAND_ALONE - if (hosts_treat_as_local != NULL) +#ifndef STAND_ALONE + if (hosts_treat_as_local) { int rc; - const uschar *save = deliver_domain; + const uschar * save = deliver_domain; deliver_domain = h->name; /* set $domain */ rc = match_isinlist(string_copylc(h->name), CUSS &hosts_treat_as_local, 0, &domainlist_anchor, NULL, MCL_DOMAIN, TRUE, NULL); deliver_domain = save; if (rc == OK) goto FOUND_LOCAL; } - #endif +#endif /* It seems that on many operating systems, 0.0.0.0 is treated as a synonym for 127.0.0.1 and refers to the local host. We therefore force it always to be treated as local. */ - if (h->address != NULL) + if (h->address) { if (Ustrcmp(h->address, "0.0.0.0") == 0) goto FOUND_LOCAL; for (ip_address_item * ip = local_interface_data; ip; ip = ip->next) @@ -1336,7 +1332,8 @@ for (h = host; h != last->next; h = h->next) /* Update prev to point to the last host item before any that have the same MX value as the one we have just considered. */ - if (h->next == NULL || h->next->mx != h->mx) prev = h; + if (!h->next || h->next->mx != h->mx) + prev = h; } return yield; /* No local hosts found: return HOST_FOUND or HOST_FIND_FAILED */ @@ -1346,7 +1343,7 @@ something in hosts_treat_as_local has been found. */ FOUND_LOCAL: -if (prev == NULL) +if (!prev) { HDEBUG(D_host_lookup) debug_printf((h->mx >= 0)? "local host has lowest MX\n" : @@ -1361,7 +1358,7 @@ HDEBUG(D_host_lookup) debug_printf(" %s %s %d\n", h->name, h->address, h->mx); } -if (removed != NULL) *removed = TRUE; +if (removed) *removed = TRUE; prev->next = last->next; *lastptr = prev; return yield; @@ -1572,8 +1569,7 @@ connection. */ int host_name_lookup(void) { -int old_pool, rc; -int sep = 0; +int sep = 0, old_pool, rc, yield; uschar *save_hostname; uschar **aliases; uschar *ordername; @@ -1585,6 +1581,7 @@ sender_host_dnssec = host_lookup_deferred = host_lookup_failed = FALSE; HDEBUG(D_host_lookup) debug_printf("looking up host name for %s\n", sender_host_address); +expand_level++; /* For testing the case when a lookup does not complete, we have a special reserved IP address. */ @@ -1595,7 +1592,8 @@ if (f.running_in_test_harness && HDEBUG(D_host_lookup) debug_printf("Test harness: host name lookup returns DEFER\n"); host_lookup_deferred = TRUE; - return DEFER; + yield = DEFER; + goto out; } /* Do lookups directly in the DNS or via gethostbyaddr() (or equivalent), in @@ -1653,7 +1651,7 @@ while ((ordername = string_nextinlist(&list, &sep, NULL, 0))) truncated and dn_expand may fail. */ if (dn_expand(dnsa->answer, dnsa->answer + dnsa->answerlen, - US (rr->data), (DN_EXPAND_ARG4_TYPE)(s), ssize) < 0) + US rr->data, (DN_EXPAND_ARG4_TYPE)(s), ssize) < 0) { log_write(0, LOG_MAIN, "host name alias list truncated for %s", sender_host_address); @@ -1693,7 +1691,8 @@ while ((ordername = string_nextinlist(&list, &sep, NULL, 0))) HDEBUG(D_host_lookup) debug_printf("IP address PTR lookup gave temporary error\n"); host_lookup_deferred = TRUE; - return DEFER; + yield = DEFER; + goto out; } } @@ -1707,7 +1706,8 @@ while ((ordername = string_nextinlist(&list, &sep, NULL, 0))) if (rc == DEFER) { host_lookup_deferred = TRUE; - return rc; /* Can't carry on */ + yield = rc; /* Can't carry on */ + goto out; } if (rc == OK) break; /* Found a name */ } @@ -1723,7 +1723,8 @@ if (!sender_host_name) "address %s", sender_host_address); host_lookup_msg = US" (failed to find host name from IP address)"; host_lookup_failed = TRUE; - return FAIL; + yield = FAIL; + goto out; } HDEBUG(D_host_lookup) @@ -1788,7 +1789,8 @@ for (uschar * hname = sender_host_name; hname; hname = *aliases++) HDEBUG(D_host_lookup) debug_printf("temporary error for host name lookup\n"); host_lookup_deferred = TRUE; sender_host_name = NULL; - return DEFER; + yield = DEFER; + goto out; } else HDEBUG(D_host_lookup) debug_printf("no IP addresses found for %s\n", hname); @@ -1810,12 +1812,12 @@ for (uschar * hname = sender_host_name; hname; hname = *aliases++) /* If sender_host_name == NULL, it means we didn't like the name. Replace it with the first alias, if there is one. */ -if (sender_host_name == NULL && *sender_host_aliases != NULL) +if (!sender_host_name && *sender_host_aliases) sender_host_name = *sender_host_aliases++; /* If we now have a main name, all is well. */ -if (sender_host_name != NULL) return OK; +if (sender_host_name) { yield = OK; goto out; } /* We have failed to find an address that matches. */ @@ -1831,7 +1833,11 @@ host_lookup_msg = string_sprintf(" (%s does not match any IP address for %s)", sender_host_address, save_hostname); store_pool = old_pool; host_lookup_failed = TRUE; -return FAIL; +yield = FAIL; + +out: + expand_level--; + return yield; } @@ -2198,7 +2204,7 @@ set_address_from_dns(host_item *host, host_item **lastptr, const uschar **fully_qualified_name, BOOL dnssec_request, BOOL dnssec_require, int whichrrs) { -host_item *thishostlast = NULL; /* Indicates not yet filled in anything */ +host_item * thishostlast = NULL; /* Indicates not yet filled in anything */ BOOL v6_find_again = FALSE; BOOL dnssec_fail = FALSE; int i; @@ -2217,12 +2223,12 @@ those sites that feel they have to flaunt the RFC rules. */ if (allow_ip && string_is_ip_address(host->name, NULL) != 0) { - #ifndef STAND_ALONE +#ifndef STAND_ALONE if ( ignore_target_hosts && verify_check_this_host(&ignore_target_hosts, NULL, host->name, host->name, NULL) == OK) return HOST_IGNORED; - #endif +#endif host->address = host->name; return HOST_FOUND; @@ -2236,7 +2242,7 @@ testing, we force an IPv4 lookup if the domain matches dns_ipv4_lookup global. On an IPv4 system, go round the loop once only, looking only for A records. */ #if HAVE_IPV6 - #ifndef STAND_ALONE +# ifndef STAND_ALONE if ( disable_ipv6 || !(whichrrs & HOST_FIND_BY_AAAA) || dns_ipv4_lookup @@ -2245,7 +2251,7 @@ On an IPv4 system, go round the loop once only, looking only for A records. */ ) i = 0; /* look up A records only */ else - #endif /* STAND_ALONE */ +# endif /* STAND_ALONE */ i = 1; /* look up AAAA and A records */ @@ -2493,31 +2499,46 @@ Returns: HOST_FIND_FAILED Failed to find the host or domain; */ int -host_find_bydns(host_item *host, const uschar *ignore_target_hosts, int whichrrs, - uschar *srv_service, uschar *srv_fail_domains, uschar *mx_fail_domains, - const dnssec_domains *dnssec_d, - const uschar **fully_qualified_name, BOOL *removed) +host_find_bydns(host_item * host, const uschar * ignore_target_hosts, + int whichrrs, + uschar * srv_service, uschar * srv_fail_domains, uschar * mx_fail_domains, + const dnssec_domains * dnssec_d, + const uschar ** fully_qualified_name, BOOL * removed) { -host_item *h, *last; -int rc = DNS_FAIL; -int ind_type = 0; -int yield; +host_item * h, * last; +int rc = DNS_FAIL, ind_type = 0, yield; dns_answer * dnsa = store_get_dns_answer(); dns_scan dnss; -BOOL dnssec_require = dnssec_d +BOOL dnssec_require, dnssec_request; +dnssec_status_t dnssec; + +HDEBUG(D_host_lookup) + { + debug_printf_indent("check dnssec require list\n"); + expand_level++; + } +dnssec_require = dnssec_d && match_isinlist(host->name, CUSS &dnssec_d->require, 0, &domainlist_anchor, NULL, MCL_DOMAIN, TRUE, NULL) == OK; -BOOL dnssec_request = dnssec_require + +HDEBUG(D_host_lookup) + { + expand_level--; + debug_printf_indent("check dnssec request list\n"); + expand_level++; + } +dnssec_request = dnssec_require || ( dnssec_d && match_isinlist(host->name, CUSS &dnssec_d->request, 0, &domainlist_anchor, NULL, MCL_DOMAIN, TRUE, NULL) == OK); -dnssec_status_t dnssec; +HDEBUG(D_host_lookup) + expand_level--; /* Set the default fully qualified name to the incoming name, initialize the resolver if necessary, set up the relevant options, and initialize the flag that gets set for DNS syntax check errors. */ -if (fully_qualified_name != NULL) *fully_qualified_name = host->name; +if (fully_qualified_name) *fully_qualified_name = host->name; dns_init((whichrrs & HOST_FIND_QUALIFY_SINGLE) != 0, (whichrrs & HOST_FIND_SEARCH_PARENTS) != 0, dnssec_request); @@ -2529,13 +2550,12 @@ characters, so the code below should be safe. */ if (whichrrs & HOST_FIND_BY_SRV) { - gstring * g; - uschar * temp_fully_qualified_name; + uschar * s, * temp_fully_qualified_name; int prefix_length; - g = string_fmt_append(NULL, "_%s._tcp.%n%.256s", + s = string_sprintf("_%s._tcp.%n%.256s", srv_service, &prefix_length, host->name); - temp_fully_qualified_name = string_from_gstring(g); + temp_fully_qualified_name = s; ind_type = T_SRV; /* Search for SRV records. If the fully qualified name is different to @@ -2551,7 +2571,7 @@ if (whichrrs & HOST_FIND_BY_SRV) if ((dnssec_request || dnssec_require) && !dns_is_secure(dnsa) && dns_is_aa(dnsa)) - debug_printf("DNS lookup of %.256s (SRV) requested AD, but got AA\n", host->name); + debug_printf_indent("DNS lookup of %.256s (SRV) requested AD, but got AA\n", host->name); if (dnssec_request) { @@ -2561,7 +2581,7 @@ if (whichrrs & HOST_FIND_BY_SRV) { dnssec = DS_NO; lookup_dnssec_authenticated = US"no"; } } - if (temp_fully_qualified_name != g->s && fully_qualified_name != NULL) + if (temp_fully_qualified_name != s && fully_qualified_name) *fully_qualified_name = temp_fully_qualified_name + prefix_length; /* On DNS failures, we give the "try again" error unless the domain is @@ -2580,7 +2600,7 @@ if (whichrrs & HOST_FIND_BY_SRV) &domainlist_anchor, NULL, MCL_DOMAIN, TRUE, NULL) != OK) #endif { yield = HOST_FIND_AGAIN; goto out; } - DEBUG(D_host_lookup) debug_printf("DNS_%s treated as DNS_NODATA " + DEBUG(D_host_lookup) debug_printf_indent("DNS_%s treated as DNS_NODATA " "(domain in srv_fail_domains)\n", rc == DNS_FAIL ? "FAIL":"AGAIN"); } } @@ -2603,12 +2623,13 @@ if (rc != DNS_SUCCEED && whichrrs & HOST_FIND_BY_MX) if ( (dnssec_request || dnssec_require) && !dns_is_secure(dnsa) && dns_is_aa(dnsa)) - debug_printf("DNS lookup of %.256s (MX) requested AD, but got AA\n", host->name); + debug_printf_indent("DNS lookup of %.256s (MX) requested AD, but got AA\n", host->name); if (dnssec_request) if (dns_is_secure(dnsa)) { - DEBUG(D_host_lookup) debug_printf("%s (MX resp) DNSSEC\n", host->name); + DEBUG(D_host_lookup) + debug_printf_indent("%s (MX resp) DNSSEC\n", host->name); dnssec = DS_YES; lookup_dnssec_authenticated = US"yes"; } else @@ -2619,13 +2640,14 @@ if (rc != DNS_SUCCEED && whichrrs & HOST_FIND_BY_MX) switch (rc) { case DNS_NOMATCH: - yield = HOST_FIND_FAILED; goto out; + yield = HOST_FIND_FAILED; + goto out; case DNS_SUCCEED: if (!dnssec_require || dns_is_secure(dnsa)) break; DEBUG(D_host_lookup) - debug_printf("dnssec fail on MX for %.256s", host->name); + debug_printf_indent("dnssec fail on MX for %.256s\n", host->name); #ifndef STAND_ALONE if (match_isinlist(host->name, CUSS &mx_fail_domains, 0, &domainlist_anchor, NULL, MCL_DOMAIN, TRUE, NULL) != OK) @@ -2641,7 +2663,7 @@ if (rc != DNS_SUCCEED && whichrrs & HOST_FIND_BY_MX) &domainlist_anchor, NULL, MCL_DOMAIN, TRUE, NULL) != OK) #endif { yield = HOST_FIND_AGAIN; goto out; } - DEBUG(D_host_lookup) debug_printf("DNS_%s treated as DNS_NODATA " + DEBUG(D_host_lookup) debug_printf_indent("DNS_%s treated as DNS_NODATA " "(domain in mx_fail_domains)\n", (rc == DNS_FAIL)? "FAIL":"AGAIN"); break; } @@ -2655,7 +2677,7 @@ if (rc != DNS_SUCCEED) { if (!(whichrrs & (HOST_FIND_BY_A | HOST_FIND_BY_AAAA))) { - DEBUG(D_host_lookup) debug_printf("Address records are not being sought\n"); + DEBUG(D_host_lookup) debug_printf_indent("Address records are not being sought\n"); yield = HOST_FIND_FAILED; goto out; } @@ -2676,16 +2698,16 @@ if (rc != DNS_SUCCEED) if (rc == HOST_FOUND) rc = host_scan_for_local_hosts(host, &last, removed); - else - if (rc == HOST_IGNORED) rc = HOST_FIND_FAILED; /* No special action */ + else if (rc == HOST_IGNORED) + rc = HOST_FIND_FAILED; /* No special action */ DEBUG(D_host_lookup) if (host->address) { if (fully_qualified_name) - debug_printf("fully qualified name = %s\n", *fully_qualified_name); + debug_printf_indent("fully qualified name = %s\n", *fully_qualified_name); for (host_item * h = host; h != last->next; h = h->next) - debug_printf("%s %s mx=%d sort=%d %s\n", h->name, + debug_printf_indent("%s %s mx=%d sort=%d %s\n", h->name, h->address ? h->address : US"", h->mx, h->sort_key, h->status >= hstatus_unusable ? US"*" : US""); } @@ -2725,6 +2747,7 @@ for (dns_record * rr = dns_next_rr(dnsa, &dnss, RESET_ANSWERS); const uschar * s = rr->data; /* MUST be unsigned for GETSHORT */ uschar data[256]; + if (rr_bad_size(rr, sizeof(uint16_t))) continue; GETSHORT(precedence, s); /* Pointer s is advanced */ /* For MX records, we use a random "weight" which causes multiple records of @@ -2737,6 +2760,8 @@ for (dns_record * rr = dns_next_rr(dnsa, &dnss, RESET_ANSWERS); /* SRV records are specified with a port and a weight. The weight is used in a special algorithm. However, to start with, we just use it to order the records of equal priority (precedence). */ + + if (rr_bad_increment(rr, s, 2 * sizeof(uint16_t))) continue; GETSHORT(weight, s); GETSHORT(port, s); } @@ -2759,7 +2784,7 @@ for (dns_record * rr = dns_next_rr(dnsa, &dnss, RESET_ANSWERS); if (strcmpic(h->name, data) == 0) { DEBUG(D_host_lookup) - debug_printf("discarded duplicate host %s (MX=%d)\n", data, + debug_printf_indent("discarded duplicate host %s (MX=%d)\n", data, precedence > h->mx ? precedence : h->mx); if (precedence >= h->mx) goto NEXT_MX_RR; /* Skip greater precedence */ if (h == host) /* Override first item */ @@ -2869,16 +2894,16 @@ if (ind_type == T_SRV) if (host == last && host->name[0] == 0) { - DEBUG(D_host_lookup) debug_printf("the single SRV record is \".\"\n"); + DEBUG(D_host_lookup) debug_printf_indent("the single SRV record is \".\"\n"); yield = HOST_FIND_FAILED; goto out; } DEBUG(D_host_lookup) { - debug_printf("original ordering of hosts from SRV records:\n"); + debug_printf_indent("original ordering of hosts from SRV records:\n"); for (h = host; h != last->next; h = h->next) - debug_printf(" %s P=%d W=%d\n", h->name, h->mx, h->sort_key % 1000); + debug_printf_indent(" %s P=%d W=%d\n", h->name, h->mx, h->sort_key % 1000); } for (pptr = &host, h = host; h != last; pptr = &h->next, h = h->next) @@ -3071,7 +3096,7 @@ if (h != last && !disable_ipv6) for (h = host; h != last; h = h->next) h->next = next; *next = temp; } -#endif +#endif /*HAVE_IPV6*/ /* Remove any duplicate IP addresses and then scan the list of hosts for any whose IP addresses are on the local host. If any are found, all hosts with the @@ -3089,8 +3114,8 @@ if (rc != HOST_FIND_FAILED) yield = rc; DEBUG(D_host_lookup) { if (fully_qualified_name) - debug_printf("fully qualified name = %s\n", *fully_qualified_name); - debug_printf("host_find_bydns yield = %s (%d); returned hosts:\n", + debug_printf_indent("fully qualified name = %s\n", *fully_qualified_name); + debug_printf_indent("host_find_bydns yield = %s (%d); returned hosts:\n", yield == HOST_FOUND ? "HOST_FOUND" : yield == HOST_FOUND_LOCAL ? "HOST_FOUND_LOCAL" : yield == HOST_FIND_SECURITY ? "HOST_FIND_SECURITY" : @@ -3099,7 +3124,7 @@ DEBUG(D_host_lookup) yield); for (h = host; h != last->next; h = h->next) { - debug_printf(" %s %s MX=%d %s", h->name, + debug_printf_indent(" %s %s MX=%d %s", h->name, !h->address ? US"" : h->address, h->mx, h->dnssec == DS_YES ? US"DNSSEC " : US""); if (h->port != PORT_NONE) debug_printf("port=%d ", h->port); diff --git a/src/src/imap_utf7.c b/src/src/imap_utf7.c index 6c9b5c179..9d7665971 100644 --- a/src/src/imap_utf7.c +++ b/src/src/imap_utf7.c @@ -1,3 +1,4 @@ +/* Copyright (c) The Exim Maintainers 2023 */ /* 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 */ diff --git a/src/src/ip.c b/src/src/ip.c index 6ff8fe626..d5343e005 100644 --- a/src/src/ip.c +++ b/src/src/ip.c @@ -2,8 +2,8 @@ * Exim - an Internet mail transport agent * *************************************************/ +/* Copyright (c) The Exim Maintainers 2020 - 2023 */ /* 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 */ diff --git a/src/src/local_scan.h b/src/src/local_scan.h index c276b882d..11f271d1b 100644 --- a/src/src/local_scan.h +++ b/src/src/local_scan.h @@ -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 - 2020 */ /* See the file NOTICE for conditions of use and distribution. */ /* SPDX-License-Identifier: GPL-2.0-or-later */ @@ -153,9 +153,9 @@ field is always NULL except for one_time aliases that had errors_to on the routers that generated them. */ typedef struct recipient_item { - uschar *address; /* the recipient address */ + const uschar *address; /* the recipient address */ int pno; /* parent number for "one_time" alias, or -1 */ - uschar *errors_to; /* the errors_to address or NULL */ + const uschar *errors_to; /* the errors_to address or NULL */ uschar *orcpt; /* DSN orcpt */ int dsn_flags; /* DSN flags */ #ifdef EXPERIMENTAL_BRIGHTMAIL @@ -181,7 +181,7 @@ extern uschar *message_id; /* Internal id of message being handled * extern uschar *received_protocol; /* Name of incoming protocol */ extern int recipients_count; /* Number of recipients */ extern recipient_item *recipients_list;/* List of recipient addresses */ -extern unsigned char *sender_address; /* Sender address */ +extern const unsigned char *sender_address; /* Sender address */ extern uschar *sender_host_address; /* IP address of sender, as chars */ extern uschar *sender_host_authenticated; /* Name of authentication mechanism */ extern uschar *sender_host_name; /* Host name from lookup */ @@ -207,8 +207,8 @@ extern int lss_match_domain(uschar *, uschar *); extern int lss_match_local_part(uschar *, uschar *, BOOL); extern int lss_match_address(uschar *, uschar *, BOOL); extern int lss_match_host(uschar *, uschar *, uschar *); -extern void receive_add_recipient(uschar *, int); -extern BOOL receive_remove_recipient(uschar *); +extern void receive_add_recipient(const uschar *, int); +extern BOOL receive_remove_recipient(const uschar *); extern uschar *rfc2047_decode(uschar *, BOOL, const uschar *, int, int *, uschar **); extern int smtp_fflush(void); diff --git a/src/src/log.c b/src/src/log.c index fac577d5a..f12721cf5 100644 --- a/src/src/log.c +++ b/src/src/log.c @@ -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 */ @@ -601,6 +601,22 @@ if (type == lt_debug) unlink(CS debuglog_name); +/* Append to a gstring, in no-extend (or rebuffer) mode +and without taint-checking. Thanks to the no-extend, the +gstring struct never needs reallocation; we ignore the +infore that the initial space allocation for the string +was exceeded, and just leave it potentially truncated. */ + +static void +string_fmt_append_noextend(gstring * g, char * fmt, ...) +{ +va_list ap; +va_start(ap, fmt); +/* can return NULL if it truncates; just ignore */ +(void) string_vformat(g, SVFMT_TAINT_NOCHK, fmt, ap); +va_end(ap); +} + /************************************************* * Add configuration file info to log line * *************************************************/ @@ -609,24 +625,28 @@ if (type == lt_debug) unlink(CS debuglog_name); once for real). Arguments: - ptr pointer to the end of the line we are building - flags log flags + g extensible-string referring to static buffer, + usable after return + flags log flags -Returns: updated pointer +Returns: nothing */ -static gstring * +static void log_config_info(gstring * g, int flags) { -g = string_cat(g, US"Exim configuration error"); +string_fmt_append_noextend(g, "Exim configuration error"); if (flags & (LOG_CONFIG_FOR & ~LOG_CONFIG)) - return string_cat(g, US" for "); - -if (flags & (LOG_CONFIG_IN & ~LOG_CONFIG)) - g = string_fmt_append(g, " in line %d of %s", config_lineno, config_filename); + string_fmt_append_noextend(g, " for "); +else + { + if (flags & (LOG_CONFIG_IN & ~LOG_CONFIG)) + string_fmt_append_noextend(g, " in line %d of %s", + config_lineno, config_filename); -return string_catn(g, US":\n ", 4); + string_fmt_append_noextend(g, ":\n "); + } } @@ -813,7 +833,7 @@ log_write(unsigned int selector, int flags, const char *format, ...) int paniclogfd; ssize_t written_len; gstring gs = { .size = LOG_BUFFER_SIZE-2, .ptr = 0, .s = log_buffer }; -gstring * g; +gstring * g = &gs; va_list ap; /* If panic_recurseflag is set, we have failed to open the panic log. This is @@ -823,7 +843,7 @@ original log line that caused the problem. Afterwards, expire. */ if (panic_recurseflag) { - uschar *extra = panic_save_buffer ? panic_save_buffer : US""; + uschar * extra = panic_save_buffer ? panic_save_buffer : US""; if (debug_file) debug_printf("%s%s", extra, log_buffer); if (log_stderr && log_stderr != debug_file) fprintf(log_stderr, "%s%s", extra, log_buffer); @@ -924,45 +944,43 @@ in one go so that it doesn't get split when multi-processing. */ DEBUG(D_any|D_v) { - int i; - - g = string_catn(&gs, US"LOG:", 4); + string_fmt_append_noextend(g, "LOG:"); /* Show the selector that was passed into the call. */ - for (i = 0; i < log_options_count; i++) + for (int i = 0; i < log_options_count; i++) { unsigned int bitnum = log_options[i].bit; if (bitnum < BITWORDSIZE && selector == BIT(bitnum)) - g = string_fmt_append(g, " %s", log_options[i].name); + string_fmt_append_noextend(g, " %s", log_options[i].name); } - g = string_fmt_append(g, "%s%s%s%s\n ", + string_fmt_append_noextend(g, "%s%s%s%s\n ", flags & LOG_MAIN ? " MAIN" : "", flags & LOG_PANIC ? " PANIC" : "", (flags & LOG_PANIC_DIE) == LOG_PANIC_DIE ? " DIE" : "", flags & LOG_REJECT ? " REJECT" : ""); - if (flags & LOG_CONFIG) g = log_config_info(g, flags); + if (flags & LOG_CONFIG) log_config_info(g, flags); /* We want to be able to log tainted info, but log_buffer is directly malloc'd. So use deliberately taint-nonchecking routines to build into it, trusting that we will never expand the results. */ va_start(ap, format); - i = g->ptr; if (!string_vformat(g, SVFMT_TAINT_NOCHK, format, ap)) { - g->ptr = i; - g = string_cat(g, US"**** log string overflowed log buffer ****"); + uschar * s = US"**** log string overflowed log buffer ****"; + gstring_trim(g, Ustrlen(s)); + string_fmt_append_noextend(g, "%s", s); } va_end(ap); debug_printf("%Y\n", g); - gs.size = LOG_BUFFER_SIZE-2; /* Having used the buffer for debug output, */ - gs.ptr = 0; /* reset it for the real use. */ - gs.s = log_buffer; + /* Having used the buffer for debug output, reset it for the real use. */ + + gstring_reset(g); } /* If no log file is specified, we are in a mess. */ @@ -986,33 +1004,32 @@ if (!write_rejectlog) flags &= ~LOG_REJECT; /* Create the main message in the log buffer. Do not include the message id when called by a utility. */ -g = string_fmt_append(&gs, "%s ", tod_stamp(tod_log)); +string_fmt_append_noextend(&gs, "%s ", tod_stamp(tod_log)); if (LOGGING(pid)) { if (!syslog_pid) pid_position[0] = g->ptr; /* remember begin … */ - g = string_fmt_append(g, "[%d] ", (int)getpid()); + string_fmt_append_noextend(g, "[%ld] ", (long)getpid()); if (!syslog_pid) pid_position[1] = g->ptr; /* … and end+1 of the PID */ } if (f.really_exim && message_id[0]) - g = string_fmt_append(g, "%s ", message_id); + string_fmt_append_noextend(g, "%s ", message_id); if (flags & LOG_CONFIG) - g = log_config_info(g, flags); + log_config_info(g, flags); va_start(ap, format); { - int i = g->ptr; - /* We want to be able to log tainted info, but log_buffer is directly malloc'd. So use deliberately taint-nonchecking routines to build into it, trusting that we will never expand the results. */ if (!string_vformat(g, SVFMT_TAINT_NOCHK, format, ap)) { - g->ptr = i; - g = string_cat(g, US"**** log string overflowed log buffer ****\n"); + uschar * s = US"**** log string overflowed log buffer ****\n"; + gstring_trim(g, Ustrlen(s)); + string_fmt_append_noextend(g, "%s", s); } } va_end(ap); @@ -1020,31 +1037,29 @@ va_end(ap); /* Add the raw, unrewritten, sender to the message if required. This is done this way because it kind of fits with LOG_RECIPIENTS. */ -if ( flags & LOG_SENDER - && g->ptr < LOG_BUFFER_SIZE - 10 - Ustrlen(raw_sender)) - g = string_fmt_append_f(g, SVFMT_TAINT_NOCHK, " from <%s>", raw_sender); +if (flags & LOG_SENDER) + string_fmt_append_noextend(g, " from <%s>", raw_sender); /* Add list of recipients to the message if required; the raw list, before rewriting, was saved in raw_recipients. There may be none, if an ACL discarded them all. */ -if ( flags & LOG_RECIPIENTS - && g->ptr < LOG_BUFFER_SIZE - 6 - && raw_recipients_count > 0) +if (flags & LOG_RECIPIENTS && raw_recipients_count > 0) { - int i; - g = string_fmt_append_f(g, SVFMT_TAINT_NOCHK, " for", NULL); - for (i = 0; i < raw_recipients_count; i++) - { - uschar * s = raw_recipients[i]; - if (LOG_BUFFER_SIZE - g->ptr < Ustrlen(s) + 3) break; - g = string_fmt_append_f(g, SVFMT_TAINT_NOCHK, " %s", s); + string_fmt_append_noextend(g, " for"); + for (int i = 0; i < raw_recipients_count; i++) + if (!string_fmt_append_f(g, SVFMT_TAINT_NOCHK, " %s", raw_recipients[i])) + { + uschar * s = US""; + gstring_trim(g, Ustrlen(s)); + string_fmt_append_noextend(g, "%s", s); + break; } } /* actual size, now we are placing the newline (and space for NUL) */ gs.size = LOG_BUFFER_SIZE; -g = string_catn(g, US"\n", 1); +string_fmt_append_noextend(g, "\n"); string_from_gstring(g); /* Handle loggable errors when running a utility, or when address testing. @@ -1118,8 +1133,7 @@ if ( flags & LOG_MAIN /* Failing to write to the log is disastrous */ - written_len = write_gstring_to_fd_buf(mainlogfd, g); - if (written_len != g->ptr) + if ((written_len = write_gstring_to_fd_buf(mainlogfd, g)) != g->ptr) { log_write_failed(US"main log", g->ptr, written_len); /* That function does not return */ @@ -1136,53 +1150,39 @@ if (flags & LOG_REJECT) { if (header_list && LOGGING(rejected_header)) { - gstring * g2; int i; if (recipients_count > 0) { /* List the sender */ - g2 = string_fmt_append_f(g, SVFMT_TAINT_NOCHK, + string_fmt_append_noextend(g, "Envelope-from: <%s>\n", sender_address); - if (g2) g = g2; /* List up to 5 recipients */ - g2 = string_fmt_append_f(g, SVFMT_TAINT_NOCHK, + string_fmt_append_noextend(g, "Envelope-to: <%s>\n", recipients_list[0].address); - if (g2) g = g2; for (i = 1; i < recipients_count && i < 5; i++) - { - g2 = string_fmt_append_f(g, SVFMT_TAINT_NOCHK, + string_fmt_append_noextend(g, " <%s>\n", recipients_list[i].address); - if (g2) g = g2; - } if (i < recipients_count) - { - g2 = string_fmt_append_f(g, SVFMT_TAINT_NOCHK, " ...\n", NULL); - if (g2) g = g2; - } + string_fmt_append_noextend(g, " ...\n", NULL); } - /* A header with a NULL text is an unfilled in Received: header */ + /* A header with a NULL text is an unfilled-in Received: header */ for (header_line * h = header_list; h; h = h->next) if (h->text) - { - g2 = string_fmt_append_f(g, SVFMT_TAINT_NOCHK, - "%c %s", h->type, h->text); - if (g2) - g = g2; - else /* Buffer is full; truncate */ - { - gstring_trim(g, 100); /* For message and separator */ + if (!string_fmt_append_f(g, SVFMT_TAINT_NOCHK, + "%c %s", h->type, h->text)) + { /* Buffer is full; truncate */ + gstring_trim(g, 100); /* space for message and separator */ gstring_trim_trailing(g, '\n'); - g = string_cat(g, US"\n*** truncated ***\n"); + string_fmt_append_noextend(g, "\n*** truncated ***\n"); break; } - } } /* Write to syslog or to a log file */ @@ -1233,8 +1233,7 @@ if (flags & LOG_REJECT) if (fstat(rejectlogfd, &statbuf) >= 0) rejectlog_inode = statbuf.st_ino; } - written_len = write_gstring_to_fd_buf(rejectlogfd, g); - if (written_len != g->ptr) + if ((written_len = write_gstring_to_fd_buf(rejectlogfd, g)) != g->ptr) { log_write_failed(US"reject log", g->ptr, written_len); /* That function does not return */ @@ -1268,8 +1267,7 @@ if (flags & LOG_PANIC) if (panic_save_buffer) (void) write(paniclogfd, panic_save_buffer, Ustrlen(panic_save_buffer)); - written_len = write_gstring_to_fd_buf(paniclogfd, g); - if (written_len != g->ptr) + if ((written_len = write_gstring_to_fd_buf(paniclogfd, g)) != g->ptr) { int save_errno = errno; write_syslog(LOG_CRIT, log_buffer); @@ -1466,7 +1464,7 @@ if (Ustrcmp(which, "debug") == 0) return; } fprintf(stderr, "exim: %s\n", errmsg); - exit(EXIT_FAILURE); + exim_exit(EXIT_FAILURE); } else log_write(0, LOG_CONFIG|LOG_PANIC_DIE, "%s", errmsg); } @@ -1563,3 +1561,5 @@ if (kill) unlink_log(lt_debug); /* End of log.c */ +/* vi: sw ai sw=2 +*/ diff --git a/src/src/lookups/README b/src/src/lookups/README index 2e87edadd..614b349ec 100644 --- a/src/src/lookups/README +++ b/src/src/lookups/README @@ -75,7 +75,7 @@ The arguments are: uschar **errmsg where to put an error message if there is a problem The yield of xxx_open() is a void * value representing the open file or -database. For real files is is normally the FILE or DBM value. For other +database. For real files it is normally the FILE or DBM value. For other kinds of lookup, if there is no natural value to use, (-1) is recommended. The value should not be NULL (or 0) as that is taken to indicate failure of the xxx_open() function. For single-key lookups, the handle is cached along diff --git a/src/src/lookups/dbmdb.c b/src/src/lookups/dbmdb.c index aa930e654..d68110b12 100644 --- a/src/src/lookups/dbmdb.c +++ b/src/src/lookups/dbmdb.c @@ -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 @@ -102,7 +102,8 @@ exim_datum_size_set(&key, length); if (exim_dbget(d, &key, &data)) { - *result = string_copyn(exim_datum_data_get(&data), exim_datum_size_get(&data)); + unsigned len = exim_datum_size_get(&data); + *result = len > 0 ? string_copyn(exim_datum_data_get(&data), len) : US""; exim_datum_free(&data); /* Some DBM libraries need a free() call */ return OK; } @@ -283,3 +284,5 @@ static lookup_info *_lookup_list[] = { &dbm_lookup_info, &dbmz_lookup_info, &dbm lookup_module_info dbmdb_lookup_module_info = { LOOKUP_MODULE_INFO_MAGIC, _lookup_list, 3 }; /* End of lookups/dbmdb.c */ +/* vi: aw ai sw=2 +*/ diff --git a/src/src/lookups/dnsdb.c b/src/src/lookups/dnsdb.c index 1563eda56..5d441de43 100644 --- a/src/src/lookups/dnsdb.c +++ b/src/src/lookups/dnsdb.c @@ -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 */ @@ -154,8 +154,7 @@ gstring * yield = string_get(256); /* If the string starts with '>' we change the output separator. If it's followed by ';' or ',' we set the TXT output separator. */ -while (isspace(*keystring)) keystring++; -if (*keystring == '>') +if (Uskip_whitespace(&keystring) == '>') { outsep = keystring + 1; keystring += 2; @@ -169,7 +168,7 @@ if (*keystring == '>') outsep2 = US""; keystring++; } - while (isspace(*keystring)) keystring++; + Uskip_whitespace(&keystring); } /* Check for a modifier keyword. */ @@ -234,14 +233,14 @@ for (;;) else break; - while (isspace(*keystring)) keystring++; + Uskip_whitespace(&keystring); if (*keystring++ != ',') { *errmsg = US"dnsdb modifier syntax error"; rc = DEFER; goto out; } - while (isspace(*keystring)) keystring++; + Uskip_whitespace(&keystring); } /* Figure out the "type" value if it is not T_TXT. @@ -272,7 +271,7 @@ if ((equals = Ustrchr(keystring, '=')) != NULL) } keystring = equals + 1; - while (isspace(*keystring)) keystring++; + Uskip_whitespace(&keystring); } /* Initialize the resolver in case this is the first time it has been used. */ @@ -387,45 +386,55 @@ while ((domain = string_nextinlist(&keystring, &sep, NULL, 0))) } /* Other kinds of record just have one piece of data each, but there may be - several of them, of course. */ + several of them, of course. TXT & SPF can have data in multiple chunks. */ if (yield->ptr) yield = string_catn(yield, outsep, 1); if (type == T_TXT || type == T_SPF) - { - if (!outsep2) /* output only the first item of data */ - yield = string_catn(yield, US (rr->data+1), (rr->data)[0]); - else - for (unsigned data_offset = 0; data_offset < rr->size; ) - { - uschar chunk_len = (rr->data)[data_offset]; - if (*outsep2 && data_offset != 0) - yield = string_catn(yield, outsep2, 1); - yield = string_catn(yield, US ((rr->data) + ++data_offset), chunk_len); - data_offset += chunk_len; - } - } + for (unsigned data_offset = 0; data_offset + 1 < rr->size; ) + { + uschar chunk_len = (rr->data)[data_offset]; + int remain; + + if (outsep2 && *outsep2 && data_offset != 0) + yield = string_catn(yield, outsep2, 1); + + /* Apparently there are resolvers that do not check RRs before passing + them on, and glibc fails to do so. So every application must... + Check for chunk len exceeding RR */ + + remain = rr->size - ++data_offset; + if (chunk_len > remain) + chunk_len = remain; + yield = string_catn(yield, US ((rr->data) + data_offset), chunk_len); + data_offset += chunk_len; + + if (!outsep2) break; /* output only the first chunk of the RR */ + } else if (type == T_TLSA) - { - uint8_t usage, selector, matching_type; - uint16_t payload_length; - uschar s[MAX_TLSA_EXPANDED_SIZE]; - uschar * sp = s; - uschar * p = US rr->data; + if (rr->size < 3) + continue; + else + { + uint8_t usage, selector, matching_type; + uint16_t payload_length; + uschar s[MAX_TLSA_EXPANDED_SIZE]; + uschar * sp = s; + uschar * p = US rr->data; + + usage = *p++; + selector = *p++; + matching_type = *p++; + /* What's left after removing the first 3 bytes above */ + payload_length = rr->size - 3; + sp += sprintf(CS s, "%d%c%d%c%d%c", usage, *outsep2, + selector, *outsep2, matching_type, *outsep2); + /* Now append the cert/identifier, one hex char at a time */ + while (payload_length-- > 0 && sp-s < (MAX_TLSA_EXPANDED_SIZE - 4)) + sp += sprintf(CS sp, "%02x", *p++); - usage = *p++; - selector = *p++; - matching_type = *p++; - /* What's left after removing the first 3 bytes above */ - payload_length = rr->size - 3; - sp += sprintf(CS s, "%d%c%d%c%d%c", usage, *outsep2, - selector, *outsep2, matching_type, *outsep2); - /* Now append the cert/identifier, one hex char at a time */ - while (payload_length-- > 0 && sp-s < (MAX_TLSA_EXPANDED_SIZE - 4)) - sp += sprintf(CS sp, "%02x", *p++); - - yield = string_cat(yield, s); - } + yield = string_cat(yield, s); + } else /* T_CNAME, T_CSA, T_MX, T_MXH, T_NS, T_PTR, T_SOA, T_SRV */ { int priority, weight, port; @@ -435,17 +444,20 @@ while ((domain = string_nextinlist(&keystring, &sep, NULL, 0))) switch (type) { case T_MXH: + if (rr_bad_size(rr, sizeof(uint16_t))) continue; /* mxh ignores the priority number and includes only the hostnames */ GETSHORT(priority, p); break; case T_MX: + if (rr_bad_size(rr, sizeof(uint16_t))) continue; GETSHORT(priority, p); sprintf(CS s, "%d%c", priority, *outsep2); yield = string_cat(yield, s); break; case T_SRV: + if (rr_bad_size(rr, 3*sizeof(uint16_t))) continue; GETSHORT(priority, p); GETSHORT(weight, p); GETSHORT(port, p); @@ -455,6 +467,7 @@ while ((domain = string_nextinlist(&keystring, &sep, NULL, 0))) break; case T_CSA: + if (rr_bad_size(rr, 3*sizeof(uint16_t))) continue; /* See acl_verify_csa() for more comments about CSA. */ GETSHORT(priority, p); GETSHORT(weight, p); @@ -505,7 +518,7 @@ while ((domain = string_nextinlist(&keystring, &sep, NULL, 0))) if (type == T_SOA && outsep2 != NULL) { - unsigned long serial, refresh, retry, expire, minimum; + unsigned long serial = 0, refresh = 0, retry = 0, expire = 0, minimum = 0; p += rc; yield = string_catn(yield, outsep2, 1); @@ -521,8 +534,11 @@ while ((domain = string_nextinlist(&keystring, &sep, NULL, 0))) else yield = string_cat(yield, s); p += rc; - GETLONG(serial, p); GETLONG(refresh, p); - GETLONG(retry, p); GETLONG(expire, p); GETLONG(minimum, p); + if (!rr_bad_increment(rr, p, 5 * sizeof(u_int32_t))) + { + GETLONG(serial, p); GETLONG(refresh, p); + GETLONG(retry, p); GETLONG(expire, p); GETLONG(minimum, p); + } sprintf(CS s, "%c%lu%c%lu%c%lu%c%lu%c%lu", *outsep2, serial, *outsep2, refresh, *outsep2, retry, *outsep2, expire, *outsep2, minimum); diff --git a/src/src/lookups/dsearch.c b/src/src/lookups/dsearch.c index 74439bfc8..1229368ba 100644 --- a/src/src/lookups/dsearch.c +++ b/src/src/lookups/dsearch.c @@ -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 +*/ diff --git a/src/src/lookups/ldap.c b/src/src/lookups/ldap.c index 82d6954ff..0c29b6c9a 100644 --- a/src/src/lookups/ldap.c +++ b/src/src/lookups/ldap.c @@ -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 */ @@ -1083,20 +1083,15 @@ control_ldap_search(const uschar *ldap_url, int search_type, uschar **res, uschar **errmsg) { BOOL defer_break = FALSE; -int timelimit = LDAP_NO_LIMIT; -int sizelimit = LDAP_NO_LIMIT; +int timelimit = LDAP_NO_LIMIT, sizelimit = LDAP_NO_LIMIT; int tcplimit = 0; int sep = 0; int dereference = LDAP_DEREF_NEVER; -void* referrals = LDAP_OPT_ON; -const uschar *url = ldap_url; -const uschar *p; -uschar *user = NULL; -uschar *password = NULL; -uschar *local_servers = NULL; -const uschar *list; +void * referrals = LDAP_OPT_ON; +const uschar * url = ldap_url, * p, * list; +uschar * user = NULL, * password = NULL, * local_servers = NULL; -while (isspace(*url)) url++; +Uskip_whitespace(&url); /* Until the string begins "ldap", search for the other parameter settings that are recognized. They are of the form NAME=VALUE, with the value being @@ -1175,7 +1170,7 @@ while (strncmpic(url, US"ldap", 4) != 0) DEBUG(D_lookup) debug_printf_indent("LDAP query error: %s\n", *errmsg); return DEFER; } - while (isspace(*url)) url++; + Uskip_whitespace(&url); continue; } } diff --git a/src/src/lookups/lf_check_file.c b/src/src/lookups/lf_check_file.c index c4c05e44d..5d6bc4bb7 100644 --- a/src/src/lookups/lf_check_file.c +++ b/src/src/lookups/lf_check_file.c @@ -2,8 +2,8 @@ * Exim - an Internet mail transport agent * *************************************************/ +/* Copyright (c) The Exim Maintainers 2020 - 2023 */ /* Copyright (c) University of Cambridge 1995 - 2009 */ -/* Copyright (c) The Exim Maintainers 2020 */ /* See the file NOTICE for conditions of use and distribution. */ /* SPDX-License-Identifier: GPL-2.0-or-later */ diff --git a/src/src/lookups/lf_sqlperform.c b/src/src/lookups/lf_sqlperform.c index ecb0a3221..0f3984ba7 100644 --- a/src/src/lookups/lf_sqlperform.c +++ b/src/src/lookups/lf_sqlperform.c @@ -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 */ @@ -13,6 +13,15 @@ +static int +server_len_for_logging(const uschar * server) +{ +const uschar * s = Ustrchr(server, '/'); +if (!s) return 64; +if (!(s = Ustrchr(s+1, '/'))) return 64; +return (int) (s - server); +} + /************************************************* * Call SQL server(s) to run an actual query * *************************************************/ @@ -30,6 +39,7 @@ Arguments: result where to pass back the result errmsg where to pass back an error message do_cache to be set zero if data is changed + opts options (which suffixed the lookup name, minus cache-control ones) or NULL func the lookup function to call Returns: the return from the lookup function, or DEFER @@ -42,19 +52,19 @@ lf_sqlperform(const uschar *name, const uschar *optionname, int(*fn)(const uschar *, uschar *, uschar **, uschar **, BOOL *, uint *, const uschar *)) { int rc; -uschar *server; +uschar * server; BOOL defer_break = FALSE; DEBUG(D_lookup) debug_printf_indent("%s query: \"%s\" opts '%s'\n", name, query, opts); -/* Handle queries that do have server information at the start. */ +/* Handle queries that do have server information at the start (old style). */ if (Ustrncmp(query, "servers", 7) == 0) { int qsep = 0; - const uschar *s, *ss; - const uschar *qserverlist; - uschar *qserver; + const uschar * s, * ss, * qserverlist; + + log_write(0, LOG_MAIN|LOG_CONFIG_IN, "WARNING: obsolete syntax used for lookup"); s = query + 7; skip_whitespace(&s); @@ -81,35 +91,37 @@ if (Ustrncmp(query, "servers", 7) == 0) } qserverlist = string_sprintf("%.*s", (int)(ss - s), s); + query = ss + 1; - while ((qserver = string_nextinlist(&qserverlist, &qsep, NULL, 0))) + for (uschar * qsrv; qsrv = string_nextinlist(&qserverlist, &qsep, NULL, 0); ) { - if (Ustrchr(qserver, '/')) - server = qserver; + if (Ustrchr(qsrv, '/')) + server = qsrv; /* full server spec */ else - { - int len = Ustrlen(qserver); + { /* only name; search in option list */ + int len = Ustrlen(qsrv); const uschar * serverlist = optserverlist; for (int sep = 0; server = string_nextinlist(&serverlist, &sep, NULL, 0);) - if (Ustrncmp(server, qserver, len) == 0 && server[len] == '/') + if (Ustrncmp(server, qsrv, len) == 0 && server[len] == '/') break; if (!server) { - *errmsg = string_sprintf("%s server \"%s\" not found in %s", name, - qserver, optionname); + *errmsg = string_sprintf("%s server \"%.*s\" not found in %s", + name, server_len_for_logging(qsrv), qsrv, optionname); return DEFER; } } if (is_tainted(server)) { - *errmsg = string_sprintf("%s server \"%s\" is tainted", name, server); + *errmsg = string_sprintf("%s server \"%.*s\" is tainted", + name, server_len_for_logging(server), server); return DEFER; } - rc = (*fn)(ss+1, server, result, errmsg, &defer_break, do_cache, opts); + rc = (*fn)(query, server, result, errmsg, &defer_break, do_cache, opts); if (rc != DEFER || defer_break) return rc; } } @@ -137,7 +149,7 @@ else *errmsg = string_sprintf("no %s servers defined (%s option)", name, optionname); else - for (int d = 0; (server = string_nextinlist(&serverlist, &d, NULL, 0)); ) + for (int d = 0; server = string_nextinlist(&serverlist, &d, NULL, 0); ) { /* If not a full spec assume from options; scan main list for matching hostname */ @@ -161,7 +173,8 @@ else if (is_tainted(server)) { - *errmsg = string_sprintf("%s server \"%s\" is tainted", name, server); + *errmsg = string_sprintf("%s server \"%.*s\" is tainted", + name, server_len_for_logging(server), server); return DEFER; } @@ -174,3 +187,5 @@ return DEFER; } /* End of lf_sqlperform.c */ +/* vi: aw ai sw=2 +*/ diff --git a/src/src/lookups/lsearch.c b/src/src/lookups/lsearch.c index fcbd36952..6728fecc7 100644 --- a/src/src/lookups/lsearch.c +++ b/src/src/lookups/lsearch.c @@ -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 */ @@ -291,8 +291,8 @@ for (BOOL this_is_eol, last_was_eol = TRUE; this_is_comment = (this_is_comment || (buffer[0] == 0 || buffer[0] == '#')); if (this_is_comment) continue; if (!isspace((uschar)buffer[0])) break; - while (isspace((uschar)*s)) s++; - *(--s) = ' '; + Uskip_whitespace(&s); + *--s = ' '; } if (this_is_comment) continue; diff --git a/src/src/lookups/oracle.c b/src/src/lookups/oracle.c index d0604c245..9eb936b25 100644 --- a/src/src/lookups/oracle.c +++ b/src/src/lookups/oracle.c @@ -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 */ @@ -408,9 +408,9 @@ while (cda->rc != NO_DATA_FOUND) /* Loop for each row */ else for (int i = 0; i < num_fields; i++) { int slen; - uschar *s = US desc[i].buf; + uschar * s = US desc[i].buf; - while (*s != 0 && isspace(*s)) s++; + Uskip_whitespace(&s); slen = Ustrlen(s); while (slen > 0 && isspace(s[slen-1])) slen--; result = string_catn(result, s, slen); diff --git a/src/src/lookups/pgsql.c b/src/src/lookups/pgsql.c index 5d52f28b1..144663f39 100644 --- a/src/src/lookups/pgsql.c +++ b/src/src/lookups/pgsql.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) The Exim Maintainers 2020 - 2022 */ +/* Copyright (c) The Exim Maintainers 2020 - 2023 */ /* 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 */ diff --git a/src/src/lookups/readsock.c b/src/src/lookups/readsock.c index 73cc02813..dca4a40b9 100644 --- a/src/src/lookups/readsock.c +++ b/src/src/lookups/readsock.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) The Exim Maintainers 2021 - 2022 */ +/* Copyright (c) The Exim Maintainers 2021 - 2023 */ /* Copyright (c) Jeremy Harris 2020 */ /* See the file NOTICE for conditions of use and distribution. */ /* SPDX-License-Identifier: GPL-2.0-or-later */ diff --git a/src/src/lookups/redis.c b/src/src/lookups/redis.c index 7b680f086..a97496ba6 100644 --- a/src/src/lookups/redis.c +++ b/src/src/lookups/redis.c @@ -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 */ @@ -212,7 +212,7 @@ if(sdata[1]) int siz, ptr, i; uschar c; - while (isspace(*s)) s++; + Uskip_whitespace(&s); for (i = 0; *s && i < nele(argv); i++) { @@ -224,7 +224,7 @@ if(sdata[1]) argv[i] = string_from_gstring(g); DEBUG(D_lookup) debug_printf_indent("REDIS: argv[%d] '%s'\n", i, argv[i]); - while (isspace(*s)) s++; + Uskip_whitespace(&s); } /* Run the command. We use the argv form rather than plain as that parses diff --git a/src/src/lookups/sqlite.c b/src/src/lookups/sqlite.c index 6c7af4225..9f6c9e5aa 100644 --- a/src/src/lookups/sqlite.c +++ b/src/src/lookups/sqlite.c @@ -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); diff --git a/src/src/lss.c b/src/src/lss.c index 55df5775e..77baa69a0 100644 --- a/src/src/lss.c +++ b/src/src/lss.c @@ -2,6 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ +/* Copyright (c) The Exim Maintainers 2023 */ /* 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 */ diff --git a/src/src/macro_predef.c b/src/src/macro_predef.c index 1cf1a4742..29ecfdcc8 100644 --- a/src/src/macro_predef.c +++ b/src/src/macro_predef.c @@ -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) Jeremy Harris 1995 - 2018 */ /* See the file NOTICE for conditions of use and distribution. */ /* SPDX-License-Identifier: GPL-2.0-or-later */ @@ -160,6 +160,9 @@ due to conflicts with other common macros. */ #ifndef DISABLE_DNSSEC builtin_macro_create(US"_HAVE_DNSSEC"); #endif +#ifndef DISABLE_ESMTP_LIMITS + builtin_macro_create(US"_HAVE_ESMTP_LIMITS"); +#endif #ifndef DISABLE_EVENT builtin_macro_create(US"_HAVE_EVENT"); #endif @@ -211,10 +214,25 @@ 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 +#ifdef USE_SQLITE + builtin_macro_create(US"_HAVE_HINTS_SQLITE"); +#elif defined(USE_TDB) + builtin_macro_create(US"_HAVE_HINTS_TDB"); +#elif defined(USE_DB) + builtin_macro_create(US"_HAVE_HINTS_BDB"); +#elif defined(USE_GDBM) + builtin_macro_create(US"_HAVE_HINTS_GDBM"); +#else + builtin_macro_create(US"_HAVE_HINTS_NDBM"); +#endif + #ifdef LOOKUP_LSEARCH builtin_macro_create(US"_HAVE_LOOKUP_LSEARCH"); #endif @@ -309,9 +327,6 @@ exp_features(void) #ifdef EXPERIMENTAL_DSN_INFO builtin_macro_create(US"_EXP_DSNI"); #endif -#ifdef EXPERIMENTAL_ESMTP_LIMITS - builtin_macro_create(US"_EXP_LIMITS"); -#endif #ifdef EXPERIMENTAL_QUEUEFILE builtin_macro_create(US"_EXP_QUEUEFILE"); #endif diff --git a/src/src/macro_predef.h b/src/src/macro_predef.h index 94f68dfa3..4f105c6d6 100644 --- a/src/src/macro_predef.h +++ b/src/src/macro_predef.h @@ -2,8 +2,8 @@ * Exim - an Internet mail transport agent * *************************************************/ +/* Copyright (c) The Exim Maintainers 2021 - 2023 */ /* Copyright (c) Jeremy Harris 2017 - 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 */ diff --git a/src/src/macros.h b/src/src/macros.h index 250858ab4..1a619b951 100644 --- a/src/src/macros.h +++ b/src/src/macros.h @@ -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 */ @@ -107,8 +107,9 @@ don't make the file descriptors two-way. */ /* Debugging control */ #define LOG_NAME_SIZE 256 -#define DEBUG(x) if (debug_selector & (x)) -#define HDEBUG(x) if (host_checking || debug_selector & (x)) +#define IS_DEBUG(x) (debug_selector & (x)) +#define DEBUG(x) if (IS_DEBUG(x)) +#define HDEBUG(x) if (host_checking || IS_DEBUG(x)) /* The default From: text for DSNs */ @@ -827,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 @@ -971,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, @@ -1000,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) @@ -1057,6 +1067,10 @@ enum { FILTER_UNSET, FILTER_FORWARD, FILTER_EXIM, FILTER_SIEVE }; #define UTF8_VERT_RIGHT "\xE2\x94\x9C" #define UTF8_UP_RIGHT "\xE2\x95\xB0" #define UTF8_VERT_2DASH "\xE2\x95\x8E" +#define UTF8_LEFT_TRIANGLE "\xE2\x97\x80" +#define UTF8_RIGHT_TRIANGLE "\xE2\x96\xB6" +#define UTF8_LIGHT_SHADE "\xE2\x96\x91" +#define UTF8_L_ARROW_HOOK "\xE2\x86\xA9" /* Options on tls_close */ @@ -1103,14 +1117,22 @@ should not be one active. */ #define RESUME_USED BIT(4) #define RESUME_DECODE_STRING \ - US"not requested or offered : 0x02 :client requested, no server ticket" \ - ": 0x04 : 0x05 : 0x06 :client offered session, no server action" \ - ": 0x08 :no client request: 0x0A :client requested new ticket, server provided" \ - ": 0x0C :client offered session, not used: 0x0E :client offered session, server only provided new ticket" \ - ": 0x10 :session resumed unasked: 0x12 :session resumed unasked" \ - ": 0x14 : 0x15 : 0x16 :session resumed" \ - ": 0x18 :session resumed unasked: 0x1A :session resumed unasked" \ - ": 0x1C :session resumed: 0x1E :session resumed, also new ticket" + US"not requested or offered" \ + ": 0x02 :client requested, no server ticket" \ + ": 0x04 : 0x05 " \ + ": 0x06 :client offered session, no server action" \ + ": 0x08 :no client request" \ + ": 0x0A :client requested new ticket, server provided" \ + ": 0x0C :client offered session, not used" \ + ": 0x0E :client offered session, server only provided new ticket" \ + ": 0x10 :session resumed unasked" \ + ": 0x12 :session resumed unasked" \ + ": 0x14 : 0x15" \ + ": 0x16 :session resumed" \ + ": 0x18 :session resumed unasked" \ + ": 0x1A :session resumed unasked" \ + ": 0x1C :session resumed" \ + ": 0x1E :session resumed, also new ticket" /* Flags for string_vformat */ #define SVFMT_EXTEND BIT(0) @@ -1167,4 +1189,26 @@ typedef unsigned mcs_flags; #define SR_FINAL TRUE #define SR_NOT_FINAL FALSE +/* Return codes for smtp_write_mail_and_rcpt_cmds() */ +typedef enum { + sw_mrc_ok, /* good, rcpt results in addr->transport_return (PENDING_OK, DEFER, FAIL) */ + sw_mrc_bad_mail, /* MAIL response error */ + sw_mrc_bad_read, /* any non-MAIL read i/o error */ + sw_mrc_nonmail_read_timeo, /* non-MAIL response timeout */ + sw_mrc_bad_internal, /* internal error; channel still usable */ + sw_mrc_tx_fail, /* transmit failed */ +} sw_mrc_t; + +/* Recent versions of PCRE2 are allocating 20kB per match, rather than the previous 112 B. +When doing en extended loop of matching, release store periodically. */ + +#define REGEX_LOOPCOUNT_STORE_RESET 1000 + +/* Debug an option access. Use for non-list ones about to be expanded +(lists have their own debugging, under D_list). */ +#define GET_OPTION(name) \ + DEBUG(D_expand) debug_printf("try option " name "\n"); + /* End of macros.h */ +/* vi: aw ai sw=2 +*/ diff --git a/src/src/malware.c b/src/src/malware.c index f36c46b0f..408e2299b 100644 --- a/src/src/malware.c +++ b/src/src/malware.c @@ -3,7 +3,7 @@ *************************************************/ /* - * Copyright (c) The Exim Maintainers 2015 - 2022 + * Copyright (c) The Exim Maintainers 2015 - 2024 * Copyright (c) Tom Kistner 2003 - 2015 * License: GPL * SPDX-License-Identifier: GPL-2.0-or-later @@ -2238,7 +2238,7 @@ Returns: Exim message processing code (OK, FAIL, DEFER, ...) where true means malware was found (condition applies) */ int -malware_in_file(uschar *eml_filename) +malware_in_file(const uschar * eml_filename) { uschar message_id_buf[64]; int ret; diff --git a/src/src/match.c b/src/src/match.c index 07070362d..4f4f2c777 100644 --- a/src/src/match.c +++ b/src/src/match.c @@ -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 */ @@ -194,27 +194,23 @@ if (cb->flags & MCS_AT_SPECIAL && pattern[0] == '@') { int rc; host_item h; - BOOL prim = FALSE; - BOOL secy = FALSE; - BOOL removed = FALSE; + BOOL prim = FALSE, secy = FALSE, removed = FALSE; const uschar *ss = pattern + 4; const uschar *ignore_target_hosts = NULL; - if (strncmpic(ss, US"any", 3) == 0) ss += 3; + if (strncmpic(ss, US"any", 3) == 0) + ss += 3; else if (strncmpic(ss, US"primary", 7) == 0) - { - ss += 7; - prim = TRUE; - } + { ss += 7; prim = TRUE; } else if (strncmpic(ss, US"secondary", 9) == 0) - { - ss += 9; - secy = TRUE; - } - else goto NOT_AT_SPECIAL; + { ss += 9; secy = TRUE; } + else + goto NOT_AT_SPECIAL; - if (strncmpic(ss, US"/ignore=", 8) == 0) ignore_target_hosts = ss + 8; - else if (*ss) goto NOT_AT_SPECIAL; + if (strncmpic(ss, US"/ignore=", 8) == 0) + ignore_target_hosts = ss + 8; + else if (*ss) + goto NOT_AT_SPECIAL; h.next = NULL; h.name = s; @@ -431,24 +427,24 @@ unsigned int * original_cache_bits = *cache_ptr; BOOL include_unknown = FALSE, ignore_unknown = FALSE, include_defer = FALSE, ignore_defer = FALSE; const uschar * list; -uschar * sss; -uschar * ot = NULL; +uschar * ot = NULL, * sss; BOOL textonly_re; /* Save time by not scanning for the option name when we don't need it. */ HDEBUG(D_any) { - uschar * listname = readconf_find_option(listptr); + const uschar * listname = readconf_find_option(listptr); if (*listname) ot = string_sprintf("%s in %s?", name, listname); } -/* If the list is empty, the answer is no. Skip the debugging output for -an unnamed list. */ +/* If the list is empty, the answer is no. */ if (!*listptr) { - HDEBUG(D_lists) if (ot) debug_printf_indent("%s no (option unset)\n", ot); + HDEBUG(D_lists) + if (ot) debug_printf_indent("%s no (option unset)\n", ot); + else debug_printf_indent("%s not in empty list (option unset? cannot trace name)\n", name); return FAIL; } @@ -505,7 +501,7 @@ if (textonly_re) switch (type) #define LIST_LIMIT_PR 2048 HDEBUG(D_any) if (!ot) - { + { /* We failed to identify an option name, so give the list text */ int n, m; gstring * g = string_fmt_append(NULL, "%s in \"%n%.*s%n\"", name, &n, LIST_LIMIT_PR, list, &m); @@ -527,7 +523,7 @@ while ((sss = string_nextinlist(&list, &sep, NULL, 0))) { uschar * ss = sss; - HDEBUG(D_lists) debug_printf_indent("list element: %s\n", ss); + HDEBUG(D_lists) debug_printf_indent("list element: %W\n", ss); /* Address lists may contain +caseful, to restore caseful matching of the local part. We have to know the layout of the control block, unfortunately. @@ -599,7 +595,7 @@ while ((sss = string_nextinlist(&list, &sep, NULL, 0))) if (*ss == '!') { yield = FAIL; - while (isspace((*(++ss)))); + while (isspace(*++ss)) ; } else yield = OK; @@ -618,7 +614,7 @@ while ((sss = string_nextinlist(&list, &sep, NULL, 0))) namedlist_block * nb; tree_node * t; - DEBUG(D_lists) + HDEBUG(D_lists) { debug_printf_indent(" start sublist %s\n", ss+1); expand_level += 2; } if (!(t = tree_search(*anchorptr, ss+1))) @@ -655,7 +651,7 @@ while ((sss = string_nextinlist(&list, &sep, NULL, 0))) { int res = match_check_list(&(nb->string), 0, anchorptr, &use_cache_bits, func, arg, type, name, valueptr); - DEBUG(D_lists) + HDEBUG(D_lists) { expand_level -= 2; debug_printf_indent(" end sublist %s\n", ss+1); } switch (res) @@ -695,7 +691,7 @@ while ((sss = string_nextinlist(&list, &sep, NULL, 0))) p->next = nb->cache_data; nb->cache_data = p; if (*valueptr) - DEBUG(D_lists) debug_printf_indent("data from lookup saved for " + HDEBUG(D_lists) debug_printf_indent("data from lookup saved for " "cache for %s: key '%s' value '%s'\n", ss, p->key, *valueptr); } } @@ -707,7 +703,7 @@ while ((sss = string_nextinlist(&list, &sep, NULL, 0))) else { - DEBUG(D_lists) + HDEBUG(D_lists) { expand_level -= 2; debug_printf_indent("cached %s match for %s\n", @@ -725,7 +721,7 @@ while ((sss = string_nextinlist(&list, &sep, NULL, 0))) *valueptr = p->data; break; } - DEBUG(D_lists) debug_printf_indent("cached lookup data = %s\n", *valueptr); + HDEBUG(D_lists) debug_printf_indent("cached lookup data = %s\n", *valueptr); } } @@ -749,7 +745,7 @@ while ((sss = string_nextinlist(&list, &sep, NULL, 0))) { case OK: HDEBUG(D_lists) debug_printf_indent("%s %s (matched \"%s\")\n", ot, - (yield == OK)? "yes" : "no", sss); + yield == OK ? "yes" : "no", sss); goto YIELD_RETURN; case DEFER: @@ -757,8 +753,8 @@ while ((sss = string_nextinlist(&list, &sep, NULL, 0))) error = string_sprintf("DNS lookup of \"%s\" deferred", ss); if (ignore_defer) { - HDEBUG(D_lists) debug_printf_indent("%s: item ignored by +ignore_defer\n", - error); + HDEBUG(D_lists) + debug_printf_indent("%s: item ignored by +ignore_defer\n", error); break; } if (include_defer) @@ -777,8 +773,8 @@ while ((sss = string_nextinlist(&list, &sep, NULL, 0))) case ERROR: if (ignore_unknown) { - HDEBUG(D_lists) debug_printf_indent("%s: item ignored by +ignore_unknown\n", - error); + HDEBUG(D_lists) debug_printf_indent( + "%s: item ignored by +ignore_unknown\n", error); } else { @@ -812,8 +808,8 @@ while ((sss = string_nextinlist(&list, &sep, NULL, 0))) if (!f) { - uschar * listname = readconf_find_option(listptr); - if (listname[0] == 0) + const uschar * listname = readconf_find_option(listptr); + if (!*listname) listname = string_sprintf("\"%s\"", *listptr); log_write(0, LOG_MAIN|LOG_PANIC_DIE, "%s", string_open_failed("%s when checking %s", sss, listname)); @@ -825,15 +821,14 @@ while ((sss = string_nextinlist(&list, &sep, NULL, 0))) while (Ufgets(filebuffer, sizeof(filebuffer), f) != NULL) { - uschar *error; - uschar *sss = filebuffer; + uschar * error, * sss = filebuffer; while ((ss = Ustrchr(sss, '#')) != NULL) { if ((type != MCL_ADDRESS && type != MCL_LOCALPART) || ss == filebuffer || isspace(ss[-1])) { - *ss = 0; + *ss = '\0'; break; } sss = ss + 1; @@ -841,28 +836,27 @@ while ((sss = string_nextinlist(&list, &sep, NULL, 0))) ss = filebuffer + Ustrlen(filebuffer); /* trailing space */ while (ss > filebuffer && isspace(ss[-1])) ss--; - *ss = 0; + *ss = '\0'; ss = filebuffer; - while (isspace(*ss)) ss++; /* leading space */ - - if (!*ss) continue; /* ignore empty */ + if (!Uskip_whitespace(&ss)) /* leading space */ + continue; /* ignore empty */ file_yield = yield; /* positive yield */ sss = ss; /* for debugging */ if (*ss == '!') /* negation */ { - file_yield = (file_yield == OK)? FAIL : OK; - while (isspace((*(++ss)))); + file_yield = file_yield == OK ? FAIL : OK; + while (isspace(*++ss)) ; } switch ((func)(arg, ss, valueptr, &error)) { case OK: (void)fclose(f); - HDEBUG(D_lists) debug_printf_indent("%s %s (matched \"%s\" in %s)\n", ot, - yield == OK ? "yes" : "no", sss, filename); + HDEBUG(D_lists) debug_printf_indent("%s %s (matched \"%s\" in %s)\n", + ot, yield == OK ? "yes" : "no", sss, filename); /* The "pattern" being matched came from the file; we use a stack-local. Copy it to allocated memory now we know it matched. */ @@ -876,8 +870,8 @@ while ((sss = string_nextinlist(&list, &sep, NULL, 0))) error = string_sprintf("DNS lookup of %s deferred", ss); if (ignore_defer) { - HDEBUG(D_lists) debug_printf_indent("%s: item ignored by +ignore_defer\n", - error); + HDEBUG(D_lists) + debug_printf_indent("%s: item ignored by +ignore_defer\n", error); break; } (void)fclose(f); @@ -886,16 +880,21 @@ while ((sss = string_nextinlist(&list, &sep, NULL, 0))) log_write(0, LOG_MAIN, "%s: accepted by +include_defer", error); goto OK_RETURN; - case ERROR: /* host name lookup failed - this can only */ - if (ignore_unknown) /* be for an incoming host (not outgoing) */ + /* The ERROR return occurs when checking hosts, when either a forward + or reverse lookup has failed. It can also occur in a match_ip list if a + non-IP address item is encountered. The error string gives details of + which it was. */ + + case ERROR: + if (ignore_unknown) { - HDEBUG(D_lists) debug_printf_indent("%s: item ignored by +ignore_unknown\n", - error); + HDEBUG(D_lists) debug_printf_indent( + "%s: item ignored by +ignore_unknown\n", error); } else - { + { HDEBUG(D_lists) debug_printf_indent("%s %s (%s)\n", ot, - include_unknown? "yes":"no", error); + include_unknown ? "yes":"no", error); (void)fclose(f); if (!include_unknown) { @@ -919,20 +918,19 @@ while ((sss = string_nextinlist(&list, &sep, NULL, 0))) /* End of list reached: if the last item was negated yield OK, else FAIL. */ -HDEBUG(D_lists) - HDEBUG(D_lists) - { - expand_level--; - debug_printf_indent("%s %s (end of list)\n", ot, yield == OK ? "no":"yes"); - } - return yield == OK ? FAIL : OK; - +HDEBUG(D_any) + { + HDEBUG(D_lists) expand_level--; + debug_printf_indent("%s %s (end of list)\n", ot, yield == OK ? "no":"yes"); + } +return yield == OK ? FAIL : OK; + /* Something deferred */ DEFER_RETURN: - HDEBUG(D_lists) + HDEBUG(D_any) { - expand_level--; + HDEBUG(D_lists) expand_level--; debug_printf_indent("%s list match deferred for %s\n", ot, sss); } return DEFER; @@ -1152,7 +1150,7 @@ if (pattern[0] == '@' && pattern[1] == '@') if (*ss == '!') { local_yield = FAIL; - while (isspace((*(++ss)))); + while (isspace(*++ss)) ; } else local_yield = OK; @@ -1387,3 +1385,5 @@ return match_address_list(address, TRUE, TRUE, listptr, NULL, -1, sep, NULL); } /* End of match.c */ +/* vi: aw ai sw=2 +*/ diff --git a/src/src/mime.c b/src/src/mime.c index 7d30b5462..975ddca85 100644 --- a/src/src/mime.c +++ b/src/src/mime.c @@ -3,7 +3,7 @@ *************************************************/ /* - * Copyright (c) The Exim Maintainers 2015 - 2022 + * Copyright (c) The Exim Maintainers 2015 - 2023 * Copyright (c) Tom Kistner 2004 - 2015 * License: GPL * SPDX-License-Identifier: GPL-2.0-or-later diff --git a/src/src/moan.c b/src/src/moan.c index 9c30c8edd..19d29190b 100644 --- a/src/src/moan.c +++ b/src/src/moan.c @@ -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 */ @@ -30,8 +30,9 @@ Returns: nothing void moan_write_from(FILE *f) { -uschar * s = expand_string(dsn_from); -if (!s) +uschar * s; +GET_OPTION("dsn_from"); +if (!(s = expand_string(dsn_from))) { log_write(0, LOG_MAIN|LOG_PANIC, "Failed to expand dsn_from (using default): %s", expand_string_message); @@ -158,8 +159,8 @@ Returns: TRUE if message successfully sent */ BOOL -moan_send_message(uschar *recipient, int ident, error_block *eblock, - header_line *headers, FILE *message_file, uschar *firstline) +moan_send_message(const uschar * recipient, int ident, error_block * eblock, + header_line * headers, FILE * message_file, uschar * firstline) { int written = 0; int fd; @@ -175,6 +176,7 @@ uschar * s, * s2; /* For DMARC if there is a specific sender set, expand the variable for the header From: and grab the address from that for the envelope FROM. */ +GET_OPTION("dmarc_forensic_sender"); if ( ident == ERRMESS_DMARC_FORENSIC && dmarc_forensic_sender && (s = expand_string(dmarc_forensic_sender)) @@ -513,9 +515,12 @@ if (check_sender && message_file && f.trusted_caller && { uschar *new_sender = NULL; if (regex_match_and_setup(regex_From, big_buffer, 0, -1)) + { + GET_OPTION("uucp_from_sender"); new_sender = expand_string(uucp_from_sender); + } if (new_sender) sender_address = new_sender; - else firstline = big_buffer; + else firstline = big_buffer; } /* If viable sender address, send a message */ @@ -561,7 +566,7 @@ switch(ident) case ERRMESS_TOOMANYRECIP: log_write(0, LOG_MAIN, "%s: too many recipients (max set to %d)", msg, - recipients_max); + recipients_max_expanded); break; case ERRMESS_LOCAL_SCAN: @@ -631,7 +636,7 @@ if (addr) fprintf(f, "\nThe following address(es) have yet to be delivered:\n"); for (; addr; addr = addr->next) { - uschar * parent = addr->parent ? addr->parent->address : NULL; + const uschar * parent = addr->parent ? addr->parent->address : NULL; fprintf(f, " %s", addr->address); if (parent) fprintf(f, " <%s>", parent); if (addr->basic_errno > 0) fprintf(f, ": %s", strerror(addr->basic_errno)); @@ -734,35 +739,35 @@ Returns: additional recipient list or NULL */ uschar * -moan_check_errorcopy(uschar *recipient) +moan_check_errorcopy(const uschar * recipient) { -uschar *item, *localpart, *domain; -const uschar *listptr = errors_copy; +uschar * item; +const uschar * localpart, * domain; +const uschar * listptr = errors_copy; uschar *yield = NULL; int sep = 0; int llen; -if (errors_copy == NULL) return NULL; +if (!errors_copy) return NULL; /* Set up pointer to the local part and domain, and compute the length of the local part. */ localpart = recipient; domain = Ustrrchr(recipient, '@'); -if (domain == NULL) return NULL; /* should not occur, but avoid crash */ +if (!domain) return NULL; /* should not occur, but avoid crash */ llen = domain++ - recipient; /* Scan through the configured items */ while ((item = string_nextinlist(&listptr, &sep, NULL, 0))) { - const uschar *newaddress = item; - const uschar *pattern = string_dequote(&newaddress); + const uschar * newaddress = item; + const uschar * pattern = string_dequote(&newaddress); /* If no new address found, just skip this item. */ - while (isspace(*newaddress)) newaddress++; - if (*newaddress == 0) continue; + if (!Uskip_whitespace(&newaddress)) continue; /* We now have an item to match as an address in item, and the additional address in newaddress. If the pattern matches, expand the new address string diff --git a/src/src/mytypes.h b/src/src/mytypes.h index 954f683c8..c39083be8 100644 --- a/src/src/mytypes.h +++ b/src/src/mytypes.h @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) The Exim Maintainers 2020 - 2022 */ +/* Copyright (c) The Exim Maintainers 2020 - 2023 */ /* 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 */ diff --git a/src/src/os.c b/src/src/os.c index 87a336935..dce5fca3d 100644 --- a/src/src/os.c +++ b/src/src/os.c @@ -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 */ @@ -12,7 +12,8 @@ # include # include #else -# define DEBUG(x) if (debug_selector & (x)) +# define IS_DEBUG(x) (debug_selector & (x)) +# define DEBUG(x) if (IS_DEBUG(x)) #endif #ifndef CS @@ -877,9 +878,7 @@ os_getcwd(unsigned char * buffer, size_t size) return US getcwd(CS buffer, size); } #else -#ifndef PATH_MAX -# define PATH_MAX 4096 -#endif +# include "path_max.h" unsigned char * os_getcwd(unsigned char * buffer, size_t size) { @@ -893,6 +892,21 @@ return buffer ? buffer : realloc(b, strlen(b) + 1); #endif /* ----------------------------------------------------------------------- */ +/*********************************************************** +* strchrnul() * +***********************************************************/ + +#if !defined(EXIM_HAVE_STRCHRNUL) +char * +strchrnul(const char * s, int c) +{ +while (*s != c && *s) s++; +return CS s; +} +#endif + + +/* ----------------------------------------------------------------------- */ diff --git a/src/src/parse.c b/src/src/parse.c index ead8751ae..e86dc4130 100644 --- a/src/src/parse.c +++ b/src/src/parse.c @@ -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 */ @@ -69,30 +69,31 @@ Returns: pointer past the end of the address */ uschar * -parse_find_address_end(const uschar *s, BOOL nl_ends) +parse_find_address_end(const uschar * s, BOOL nl_ends) { BOOL source_routing = *s == '@'; -int no_term = source_routing? 1 : 0; +int no_term = source_routing ? 1 : 0; -while (*s != 0 && (*s != ',' || no_term > 0) && (*s != '\n' || !nl_ends)) +while (*s && (*s != ',' || no_term > 0) && (*s != '\n' || !nl_ends)) { /* Skip single quoted characters. Strictly these should not occur outside quoted strings in RFC 822 addresses, but they can in RFC 821 addresses. Pity about the lack of consistency, isn't it? */ - if (*s == '\\' && s[1] != 0) s += 2; + if (*s == '\\' && s[1]) + s += 2; /* Skip quoted items that are not inside brackets. Note that quoted pairs are allowed inside quoted strings. */ else if (*s == '\"') - { - while (*(++s) != 0 && (*s != '\n' || !nl_ends)) + while (*++s && (*s != '\n' || !nl_ends)) { - if (*s == '\\' && s[1] != 0) s++; - else if (*s == '\"') { s++; break; } + if (*s == '\\' && s[1]) + s++; + else if (*s == '\"') + { s++; break; } } - } /* Skip comments, which may include nested brackets, but quotes are not recognized inside comments, though quoted pairs are. */ @@ -100,12 +101,13 @@ while (*s != 0 && (*s != ',' || no_term > 0) && (*s != '\n' || !nl_ends)) else if (*s == '(') { int level = 1; - while (*(++s) != 0 && (*s != '\n' || !nl_ends)) - { - if (*s == '\\' && s[1] != 0) s++; - else if (*s == '(') level++; - else if (*s == ')' && --level <= 0) { s++; break; } - } + while (*++s && (*s != '\n' || !nl_ends)) + if (*s == '\\' && s[1]) + s++; + else if (*s == '(') + level++; + else if (*s == ')' && --level <= 0) + { s++; break; } } /* Non-special character; just advance. Passing the colon in a source @@ -117,10 +119,12 @@ while (*s != 0 && (*s != ',' || no_term > 0) && (*s != '\n' || !nl_ends)) if (*s == '<') { source_routing = s[1] == '@'; - no_term = source_routing? 2 : 1; + no_term = source_routing ? 2 : 1; } - else if (*s == '>') no_term--; - else if (source_routing && *s == ':') no_term--; + else if (*s == '>') + no_term--; + else if (source_routing && *s == ':') + no_term--; s++; } } @@ -1359,7 +1363,7 @@ for (;;) *error = string_sprintf("\"%.*s\" is not permitted", len, s); return FF_ERROR; } - while (*ss && isspace(*ss)) ss++; /* skip leading whitespace */ + Uskip_whitespace(&ss); /* skip leading whitespace */ if ((len = Ustrlen(ss)) > 0) /* ignore trailing newlines */ for (const uschar * t = ss + len - 1; t >= ss && *t == '\n'; t--) len--; *error = string_copyn(ss, len); /* becomes the error */ diff --git a/src/src/path_max.h b/src/src/path_max.h new file mode 100644 index 000000000..d8df2c7bc --- /dev/null +++ b/src/src/path_max.h @@ -0,0 +1,19 @@ +/************************************************* +* Exim - an Internet mail transport agent * +*************************************************/ + +/* Copyright (c) The Exim Maintainers 2024 */ +/* See the file NOTICE for conditions of use and distribution. */ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +/* This was in exim.h - but not all files needing it can include all of that. */ +/* Needed by macros.h */ +/* Some systems have PATH_MAX and some have MAX_PATH_LEN. */ +#ifndef PATH_MAX +# ifdef MAX_PATH_LEN +# define PATH_MAX MAX_PATH_LEN +# else +# define PATH_MAX 4096 +# endif +#endif + diff --git a/src/src/pdkim/pdkim.c b/src/src/pdkim/pdkim.c index 22b850242..4fb22a113 100644 --- a/src/src/pdkim/pdkim.c +++ b/src/src/pdkim/pdkim.c @@ -1,9 +1,9 @@ /* * PDKIM - a RFC4871 (DKIM) implementation * - * Copyright (c) The Exim Maintainers 2021 - 2022 - * Copyright (C) 2009 - 2016 Tom Kistner + * Copyright (c) The Exim Maintainers 2021 - 2024 * Copyright (C) 2016 - 2020 Jeremy Harris + * Copyright (C) 2009 - 2016 Tom Kistner * SPDX-License-Identifier: GPL-2.0-or-later * * http://duncanthrax.net/pdkim/ @@ -512,10 +512,6 @@ for (uschar * p = raw_hdr; ; p++) } if (where == PDKIM_HDR_TAG) - { - if (c >= 'a' && c <= 'z') - cur_tag = string_catn(cur_tag, p, 1); - if (c == '=') { if (Ustrcmp(string_from_gstring(cur_tag), "b") == 0) @@ -526,7 +522,8 @@ for (uschar * p = raw_hdr; ; p++) where = PDKIM_HDR_VALUE; goto NEXT_CHAR; } - } + else if (!isspace(c)) + cur_tag = string_catn(cur_tag, p, 1); if (where == PDKIM_HDR_VALUE) { @@ -553,17 +550,17 @@ for (uschar * p = raw_hdr; ; p++) switch (cur_tag->s[1]) { case '\0': pdkim_decode_base64(cur_val->s, &sig->sighash); break; - case 'h': if (cur_tag->ptr == 2) - pdkim_decode_base64(cur_val->s, &sig->bodyhash); + case 'h': if (cur_tag->ptr != 2) goto bad_tag; + pdkim_decode_base64(cur_val->s, &sig->bodyhash); break; - default: break; + default: goto bad_tag; } break; case 'v': /* version */ /* We only support version 1, and that is currently the only version there is. */ sig->version = - Ustrcmp(cur_val->s, PDKIM_SIGNATURE_VERSION) == 0 ? 1 : -1; + Ustrcmp(cur_val->s, PDKIM_SIGNATURE_VERSION) == 0 ? 1 : -1; break; case 'a': /* algorithm */ { @@ -578,6 +575,7 @@ for (uschar * p = raw_hdr; ; p++) if (Ustrcmp(elem, pdkim_hashes[i].dkim_hashname) == 0) { sig->hashtype = i; break; } } + break; case 'c': /* canonicalization */ pdkim_cstring_to_canons(cur_val->s, 0, @@ -586,15 +584,15 @@ for (uschar * p = raw_hdr; ; p++) case 'q': /* Query method (for pubkey)*/ for (int i = 0; pdkim_querymethods[i]; i++) if (Ustrcmp(cur_val->s, pdkim_querymethods[i]) == 0) - { + { sig->querymethod = i; /* we never actually use this */ break; } break; case 's': /* Selector */ - sig->selector = string_copyn(cur_val->s, cur_val->ptr); break; + sig->selector = string_copy_from_gstring(cur_val); break; case 'd': /* SDID */ - sig->domain = string_copyn(cur_val->s, cur_val->ptr); break; + sig->domain = string_copy_from_gstring(cur_val); break; case 'i': /* AUID */ sig->identity = pdkim_decode_qp(cur_val->s); break; case 't': /* Timestamp */ @@ -604,16 +602,18 @@ for (uschar * p = raw_hdr; ; p++) case 'l': /* Body length count */ sig->bodylength = strtol(CS cur_val->s, NULL, 10); break; case 'h': /* signed header fields */ - sig->headernames = string_copyn(cur_val->s, cur_val->ptr); break; + sig->headernames = string_copy_from_gstring(cur_val); break; case 'z': /* Copied headfields */ sig->copiedheaders = pdkim_decode_qp(cur_val->s); break; /*XXX draft-ietf-dcrup-dkim-crypto-05 would need 'p' tag support for rsafp signatures. But later discussion is dropping those. */ default: - DEBUG(D_acl) debug_printf(" Unknown tag encountered\n"); - break; + goto bad_tag; } } + else +bad_tag: DEBUG(D_acl) debug_printf(" Unknown tag encountered: %Y\n", cur_tag); + cur_tag = cur_val = NULL; in_b_val = FALSE; where = PDKIM_HDR_LIMBO; @@ -659,25 +659,36 @@ return sig; /* -------------------------------------------------------------------------- */ pdkim_pubkey * -pdkim_parse_pubkey_record(const uschar *raw_record) +pdkim_parse_pubkey_record(const uschar * raw_record) { -const uschar * ele; -int sep = ';'; -pdkim_pubkey * pub; +pdkim_pubkey * pub = store_get(sizeof(pdkim_pubkey), GET_TAINTED); -pub = store_get(sizeof(pdkim_pubkey), GET_TAINTED); memset(pub, 0, sizeof(pdkim_pubkey)); -while ((ele = string_nextinlist(&raw_record, &sep, NULL, 0))) +for (const uschar * ele = raw_record, * tspec, * end, * val; *ele; ele = end) { - const uschar * val; + Uskip_whitespace(&ele); + end = US strchrnul(CS ele, ';'); + tspec = string_copyn(ele, end - ele); + if (*end) end++; /* skip the ; */ - if ((val = Ustrchr(ele, '='))) + if ((val = Ustrchr(tspec, '='))) { - int taglen = val++ - ele; + int taglen = val++ - tspec; + + DEBUG(D_acl) debug_printf(" %.*s=%s\n", taglen, tspec, val); + while (taglen > 1 && isspace(tspec[taglen-1])) + taglen--; /* Ignore whitespace before = */ + Uskip_whitespace(&val); /* Ignore whitespace after = */ + if (isspace(val[ Ustrlen(val)-1 ])) + { /* Ignore whitespace after value */ + gstring * g = string_cat(NULL, val); + while (isspace(gstring_last_char(g))) + gstring_trim(g, 1); + val = string_from_gstring(g); + } - DEBUG(D_acl) debug_printf(" %.*s=%s\n", taglen, ele, val); - switch (ele[0]) + if (taglen == 1) switch (tspec[0]) { case 'v': pub->version = val; break; case 'h': pub->hashes = val; break; @@ -689,8 +700,11 @@ while ((ele = string_nextinlist(&raw_record, &sep, NULL, 0))) case 't': if (Ustrchr(val, 'y')) pub->testing = 1; if (Ustrchr(val, 's')) pub->no_subdomaining = 1; break; - default: DEBUG(D_acl) debug_printf(" Unknown tag encountered\n"); break; + default: goto bad_tag; } + else +bad_tag: + DEBUG(D_acl) debug_printf(" Unknown tag encountered\n"); } } diff --git a/src/src/pdkim/signing.c b/src/src/pdkim/signing.c index 35ca79fc1..b4754c1a1 100644 --- a/src/src/pdkim/signing.c +++ b/src/src/pdkim/signing.c @@ -1,6 +1,6 @@ /* * PDKIM - a RFC4871 (DKIM) implementation - * Copyright (c) The Exim Maintainers 1995 - 2022 + * Copyright (c) The Exim Maintainers 1995 - 2023 * SPDX-License-Identifier: GPL-2.0-or-later * * signing/verification interface @@ -308,7 +308,7 @@ makes sure that important subsystems are initialized. */ if (!gcry_check_version (GCRYPT_VERSION)) { fputs ("libgcrypt version mismatch\n", stderr); - exit (2); + exim_exit(2); } /* We don't want to see any warnings, e.g. because we have not yet diff --git a/src/src/priv.c b/src/src/priv.c index 9305f8b45..66bd046af 100644 --- a/src/src/priv.c +++ b/src/src/priv.c @@ -1,4 +1,8 @@ -/* Copyright (c) The Exim Maintainers 2022 */ +/************************************************* +* Exim - an Internet mail transport agent * +*************************************************/ + +/* Copyright (c) The Exim Maintainers 2022 - 2023 */ /* SPDX-License-Identifier: GPL-2.0-or-later */ #include "exim.h" diff --git a/src/src/proxy.c b/src/src/proxy.c index fbce11163..46c98c8d0 100644 --- a/src/src/proxy.c +++ b/src/src/proxy.c @@ -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 */ @@ -396,7 +396,7 @@ else if (ret >= 8 && memcmp(hdr.v1.line, "PROXY", 5) == 0) /* Step through the string looking for the required fields. Ensure strict adherence to required formatting, exit for any error. */ p += 5; - if (!isspace(*(p++))) + if (!isspace(*p++)) { DEBUG(D_receive) debug_printf("Missing space after PROXY command\n"); goto proxyfail; @@ -417,7 +417,7 @@ else if (ret >= 8 && memcmp(hdr.v1.line, "PROXY", 5) == 0) } p += Ustrlen(iptype); - if (!isspace(*(p++))) + if (!isspace(*p++)) { DEBUG(D_receive) debug_printf("Missing space after TCP4/6 command\n"); goto proxyfail; diff --git a/src/src/queue.c b/src/src/queue.c index fa4fc0aec..b811a53bd 100644 --- a/src/src/queue.c +++ b/src/src/queue.c @@ -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 */ @@ -354,13 +354,13 @@ Returns: nothing */ void -queue_run(qrunner * q, uschar * start_id, uschar * stop_id, BOOL recurse) +queue_run(qrunner * q, const uschar * start_id, const uschar * stop_id, BOOL recurse) { BOOL force_delivery = q->queue_run_force || deliver_selectstring || deliver_selectstring_sender; -const pcre2_code *selectstring_regex = NULL; -const pcre2_code *selectstring_regex_sender = NULL; -uschar *log_detail = NULL; +const pcre2_code * selectstring_regex = NULL; +const pcre2_code * selectstring_regex_sender = NULL; +uschar * log_detail = NULL; int subcount = 0; uschar subdirs[64]; pid_t qpid[4] = {0}; /* Parallelism factor for q2stage 1st phase */ @@ -394,20 +394,19 @@ f.queue_running = TRUE; if (!recurse) { - uschar extras[8]; - uschar *p = extras; + uschar extras[8], * p = extras; if (q->queue_2stage) *p++ = 'q'; if (q->queue_run_first_delivery) *p++ = 'i'; if (q->queue_run_force) *p++ = 'f'; if (q->deliver_force_thaw) *p++ = 'f'; if (q->queue_run_local) *p++ = 'l'; - *p = 0; + *p = '\0'; p = big_buffer; p += sprintf(CS p, "pid=%d", (int)queue_run_pid); - if (extras[0] != 0) + if (*extras) p += sprintf(CS p, " -q%s", extras); if (deliver_selectstring) @@ -444,6 +443,15 @@ if (deliver_selectstring_sender && f.deliver_selectstring_sender_regex) selectstring_regex_sender = regex_must_compile(deliver_selectstring_sender, MCS_CASELESS, FALSE); +#ifndef DISABLE_TLS +if (!queue_tls_init) + { + queue_tls_init = TRUE; + /* Preload TLS library info for smtp transports. */ + tls_client_creds_reload(FALSE); + } +#endif + /* If the spool is split into subdirectories, we want to process it one directory at a time, so as to spread out the directory scanning and the delivering when there are lots of messages involved, except when @@ -585,7 +593,7 @@ for (int i = queue_run_in_order ? -1 : 0; else if ( deliver_selectstring_sender && !(f.deliver_selectstring_sender_regex ? regex_match(selectstring_regex_sender, sender_address, -1, NULL) - : (strstric(sender_address, deliver_selectstring_sender, FALSE) + : (strstric_c(sender_address, deliver_selectstring_sender, FALSE) != NULL) ) ) { @@ -601,10 +609,10 @@ for (int i = queue_run_in_order ? -1 : 0; int i; for (i = 0; i < recipients_count; i++) { - uschar *address = recipients_list[i].address; + const uschar * address = recipients_list[i].address; if ( (f.deliver_selectstring_regex ? regex_match(selectstring_regex, address, -1, NULL) - : (strstric(address, deliver_selectstring, FALSE) != NULL) + : (strstric_c(address, deliver_selectstring, FALSE) != NULL) ) && tree_search(tree_nonrecipients, address) == NULL ) @@ -664,23 +672,15 @@ for (int i = queue_run_in_order ? -1 : 0; name. The return of the process is zero if a delivery was attempted. */ fq->text[Ustrlen(fq->text)-2] = 0; - set_process_info("running queue: %s", fq->text); + set_process_info("running queue%s: %s", + q->queue_2stage ? "(ph 1)" : "", fq->text); #ifdef MEASURE_TIMING report_time_since(×tamp_startup, US"queue msg selected"); #endif -#ifndef DISABLE_TLS - if (!queue_tls_init) - { - queue_tls_init = TRUE; - /* Preload TLS library info for smtp transports. Once, and only if we - have a delivery to do. */ - tls_client_creds_reload(FALSE); - } -#endif - single_item_retry: - if ((pid = exim_fork(US"qrun-delivery")) == 0) + if ((pid = exim_fork( + q->queue_2stage ? US"qrun-p1-delivery" : US"qrun-delivery")) == 0) { int rc; (void)close(pfd[pipe_read]); @@ -797,6 +797,7 @@ if (q->queue_2stage) report_time_since(×tamp_startup, US"queue_run 1st phase done"); #endif q->queue_2stage = f.queue_2stage = FALSE; + DEBUG(D_queue_run) debug_printf("queue_run phase 2 start\n"); queue_run(q, start_id, stop_id, TRUE); } @@ -813,7 +814,7 @@ if (!recurse) void -single_queue_run(qrunner * q, uschar * start_id, uschar * stop_id) +single_queue_run(qrunner * q, const uschar * start_id, const uschar * stop_id) { DEBUG(D_queue_run) debug_printf("Single queue run%s%s%s%s\n", start_id ? US" starting at " : US"", @@ -919,7 +920,7 @@ Returns: nothing */ void -queue_list(int option, uschar ** list, int count) +queue_list(int option, const uschar ** list, int count) { int subcount; int now = (int)time(NULL); @@ -961,7 +962,9 @@ each time. */ if (option == QL_MSGID_ONLY) /* Print only the message IDs from the chain */ for (; qf; qf = qf->next) - fprintf(stdout, "%.*s\n", MESSAGE_ID_LENGTH, qf->text); + fprintf(stdout, "%.*s\n", + is_old_message_id(qf->text) ? MESSAGE_ID_LENGTH_OLD : MESSAGE_ID_LENGTH, + qf->text); else for (; qf && (reset_point = store_mark()); @@ -1021,7 +1024,9 @@ else for (; } fprintf(stdout, "%s %.*s", - string_format_size(size, big_buffer), MESSAGE_ID_LENGTH, qf->text); + string_format_size(size, big_buffer), + is_old_message_id(qf->text) ? MESSAGE_ID_LENGTH_OLD : MESSAGE_ID_LENGTH, + qf->text); if (env_read && sender_address) { @@ -1093,7 +1098,7 @@ Returns: FALSE if there was any problem */ BOOL -queue_action(uschar * id, int action, uschar ** argv, int argc, +queue_action(const uschar * id, int action, const uschar ** argv, int argc, int recipients_arg) { BOOL yield = TRUE; @@ -1369,9 +1374,10 @@ switch(action) tree_search(tree_nonrecipients, recipients_list[i].address); if (!delivered) { - uschar * save_local = deliver_localpart; + const uschar * save_local = deliver_localpart; const uschar * save_domain = deliver_domain; - uschar * addr = recipients_list[i].address, * errmsg = NULL; + const uschar * addr = recipients_list[i].address; + uschar * errmsg = NULL; int start, end, dom; if (!parse_extract_address(addr, &errmsg, &start, &end, &dom, TRUE)) @@ -1614,3 +1620,5 @@ else DEBUG(D_queue_run) debug_printf(" socket: %s\n", strerror(errno)); #endif /*!COMPILE_UTILITY*/ /* End of queue.c */ +/* vi: aw ai sw=2 +*/ diff --git a/src/src/rda.c b/src/src/rda.c index 9c2aa5022..776805ca4 100644 --- a/src/src/rda.c +++ b/src/src/rda.c @@ -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 */ @@ -466,7 +466,7 @@ Returns: FALSE if data missing */ static BOOL -rda_read_string(int fd, uschar **sp) +rda_read_string(int fd, uschar ** sp) { int len; @@ -866,9 +866,9 @@ if (yield == FF_DELIVERED || yield == FF_NOTDELIVERED || for (;;) { int i, reply_options; - address_item *addr; - uschar *recipient; - uschar *expandn[EXPAND_MAXN + 2]; + address_item * addr; + uschar * recipient, * s; + uschar * expandn[EXPAND_MAXN + 2]; /* First string is the address; NULL => end of addresses */ @@ -885,10 +885,11 @@ if (yield == FF_DELIVERED || yield == FF_NOTDELIVERED || if ( read(fd, &addr->mode, sizeof(addr->mode)) != sizeof(addr->mode) || read(fd, &addr->flags, sizeof(addr->flags)) != sizeof(addr->flags) - || !rda_read_string(fd, &addr->prop.errors_address) + || !rda_read_string(fd, &s) || read(fd, &i, sizeof(i)) != sizeof(i) ) goto DISASTER; + addr->prop.errors_address = s; addr->prop.ignore_error = (i != 0); /* Next comes a possible setting for $thisaddress and any numerical diff --git a/src/src/readconf.c b/src/src/readconf.c index d6d6f53a5..940c5d4d3 100644 --- a/src/src/readconf.c +++ b/src/src/readconf.c @@ -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 */ @@ -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} }, @@ -209,7 +212,7 @@ static optionlist optionlist_config[] = { { "ldap_start_tls", opt_bool, {&eldap_start_tls} }, { "ldap_version", opt_int, {&eldap_version} }, #endif -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS { "limits_advertise_hosts", opt_stringptr, {&limits_advertise_hosts} }, #endif { "local_from_check", opt_bool, {&local_from_check} }, @@ -293,7 +296,7 @@ static optionlist optionlist_config[] = { { "received_header_text", opt_stringptr, {&received_header_text} }, { "received_headers_max", opt_int, {&received_headers_max} }, { "recipient_unqualified_hosts", opt_stringptr, {&recipient_unqualified_hosts} }, - { "recipients_max", opt_int, {&recipients_max} }, + { "recipients_max", opt_stringptr, {&recipients_max} }, { "recipients_max_reject", opt_bool, {&recipients_max_reject} }, #ifdef LOOKUP_REDIS { "redis_servers", opt_stringptr, {&redis_servers} }, @@ -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} }, }; @@ -592,46 +598,104 @@ static int syslog_list_size = sizeof(syslog_list)/sizeof(syslog_fac_item); pointer variables in the options table or in option tables for various drivers. For debugging output, it is useful to be able to find the name of the option which is currently being processed. This function finds it, if it exists, by -searching the table(s). +searching the table(s) for a value with the given content. Arguments: a value that is presumed to be in the table above Returns: the option name, or an empty string */ -uschar * -readconf_find_option(void *p) +const uschar * +readconf_find_option(void * listptr) { -for (int i = 0; i < nelem(optionlist_config); i++) - if (p == optionlist_config[i].v.value) return US optionlist_config[i].name; +uschar * list = * USS listptr; +const uschar * name = NULL, * drname = NULL; + +for (optionlist * o = optionlist_config; /* main-config options */ + o < optionlist_config + optionlist_config_size; o++) + if (listptr == o->v.value) + return US o->name; for (router_instance * r = routers; r; r = r->next) + if (router_name && Ustrcmp(r->name, router_name) == 0) { - router_info *ri = r->info; - for (int i = 0; i < *ri->options_count; i++) - { - if ((ri->options[i].type & opt_mask) != opt_stringptr) continue; - if (p == CS (r->options_block) + ri->options[i].v.offset) - return US ri->options[i].name; - } + const router_info * ri = r->info; + + /* Check for a listptr match first */ + + for (optionlist * o = optionlist_routers; /* generic options */ + o < optionlist_routers + optionlist_routers_size; o++) + if ( (o->type & opt_mask) == opt_stringptr + && listptr == CS r + o->v.offset) + return US o->name; + + for (optionlist * o = ri->options; /* private options */ + o < ri->options + *ri->options_count; o++) + if ( (o->type & opt_mask) == opt_stringptr + && listptr == CS (r->options_block) + o->v.offset) + return US o->name; + + /* Check for a list addr match, unless null */ + + if (!list) continue; + + for (optionlist * o = optionlist_routers; /* generic options */ + o < optionlist_routers + optionlist_routers_size; o++) + if ( (o->type & opt_mask) == opt_stringptr + && list == * USS(CS r + o->v.offset)) + if (name) return string_sprintf("DUP: %s %s vs. %s %s", + drname, name, r->name, o->name); + else { name = US o->name; drname = r->name; } + + for (optionlist * o = ri->options; /* private options */ + o < ri->options + *ri->options_count; o++) + if ( (o->type & opt_mask) == opt_stringptr + && list == * USS(CS (r->options_block) + o->v.offset)) + if (name) return string_sprintf("DUP: %s %s vs. %s %s", + drname, name, r->name, o->name); + else { name = US o->name; drname = r->name; } } for (transport_instance * t = transports; t; t = t->next) + if (transport_name && Ustrcmp(t->name, transport_name) == 0) { - transport_info *ti = t->info; - for (int i = 0; i < *ti->options_count; i++) - { - optionlist * op = &ti->options[i]; - if ((op->type & opt_mask) != opt_stringptr) continue; - if (p == ( op->type & opt_public - ? CS t - : CS t->options_block - ) - + op->v.offset) - return US op->name; - } + const transport_info * ti = t->info; + + /* Check for a listptr match first */ + + for (optionlist * o = optionlist_transports; /* generic options */ + o < optionlist_transports + optionlist_transports_size; o++) + if ( (o->type & opt_mask) == opt_stringptr + && listptr == CS t + o->v.offset) + return US o->name; + + for (optionlist * o = ti->options; /* private options */ + o < ti->options + *ti->options_count; o++) + if ( (o->type & opt_mask) == opt_stringptr + && listptr == CS t->options_block + o->v.offset) + return US o->name; + + /* Check for a list addr match, unless null */ + + if (!list) continue; + + for (optionlist * o = optionlist_transports; /* generic options */ + o < optionlist_transports + optionlist_transports_size; o++) + if ( (o->type & opt_mask) == opt_stringptr + && list == * USS(CS t + o->v.offset)) + if (name) return string_sprintf("DUP: %s %s vs. %s %s", + drname, name, t->name, o->name); + else { name = US o->name; drname = t->name; } + + for (optionlist * o = ti->options; /* private options */ + o < ti->options + *ti->options_count; o++) + if ( (o->type & opt_mask) == opt_stringptr + && list == * USS(CS t->options_block + o->v.offset)) + if (name) return string_sprintf("DUP: %s %s vs. %s %s", + drname, name, t->name, o->name); + else { name = US o->name; drname = t->name; } } -return US""; +return name ? name : US""; } @@ -1050,7 +1114,7 @@ for (;;) (Ustrncmp(ss+8, "_if_exists", 10) == 0 && isspace(ss[18])))) { uschar *t; - int include_if_exists = isspace(ss[8])? 0 : 10; + int include_if_exists = isspace(ss[8]) ? 0 : 10; config_file_item *save; struct stat statbuf; @@ -1644,8 +1708,7 @@ uschar name2[EXIM_DRIVERNAME_MAX]; /* There may be leading spaces; thereafter, we expect an option name starting with a letter. */ -while (isspace(*s)) s++; -if (!isalpha(*s)) +if (!isalpha( Uskip_whitespace(&s) )) log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN, "option setting expected: %s", s); /* Read the name of the option, and skip any subsequent white space. If @@ -1660,7 +1723,7 @@ for (int n = 0; n < 2; n++) s++; } name[ptr] = 0; - while (isspace(*s)) s++; + Uskip_whitespace(&s); if (Ustrcmp(name, "hide") != 0) break; issecure = opt_secure; ptr = 0; @@ -1720,7 +1783,7 @@ else if (*s && (offset != 0 || *s != '=')) /* Skip white space after = */ -if (*s == '=') while (isspace((*(++s)))); +if (*s == '=') while (isspace(*++s)); /* If there is a data block and the opt_public flag is not set, change the data block pointer to the private options block. */ @@ -2202,8 +2265,7 @@ switch (type) log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN, "absolute value of integer \"%s\" is too large (overflow)", s); - while (isspace(*endptr)) endptr++; - if (*endptr) + if (Uskip_whitespace(&endptr)) extra_chars_error(endptr, inttype, US"integer value for ", name); value = (int)lvalue; @@ -2251,8 +2313,7 @@ switch (type) if (errno == ERANGE) log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN, "absolute value of integer \"%s\" is too large (overflow)", s); - while (isspace(*endptr)) endptr++; - if (*endptr != 0) + if (Uskip_whitespace(&endptr)) extra_chars_error(endptr, inttype, US"integer value for ", name); if (data_block) @@ -2347,7 +2408,7 @@ switch (type) list[count+1] = value; if (snext == NULL) break; s = snext + 1; - while (isspace(*s)) s++; + Uskip_whitespace(&s); } if (count > list[0] - 2) @@ -2741,7 +2802,7 @@ Returns: Boolean success */ BOOL -readconf_print(const uschar *name, uschar *type, BOOL no_labels) +readconf_print(const uschar * name, const uschar * type, BOOL no_labels) { BOOL names_only = FALSE; optionlist *ol2 = NULL; @@ -3121,8 +3182,8 @@ readconf_main(BOOL nowarn) { int sep = 0; struct stat statbuf; -uschar *s, *filename; -const uschar *list = config_main_filelist; +uschar * s, * filename; +const uschar * list = config_main_filelist; /* Loop through the possible file names */ @@ -3210,7 +3271,7 @@ if (config_file) if (os_getcwd(buf, PATH_MAX) == NULL) { perror("exim: getcwd"); - exit(EXIT_FAILURE); + exim_exit(EXIT_FAILURE); } g = string_cat(NULL, buf); @@ -3240,7 +3301,7 @@ to a safe place. Later we change to $spool_directory. */ if (Uchdir("/") < 0) { perror("exim: chdir `/': "); - exit(EXIT_FAILURE); + exim_exit(EXIT_FAILURE); } /* Check the status of the file we have opened, if we have retained root @@ -3459,7 +3520,7 @@ leading "log_". */ if (syslog_facility_str) { int i; - uschar *s = syslog_facility_str; + uschar * s = syslog_facility_str; if ((Ustrlen(syslog_facility_str) >= 4) && (strncmpic(syslog_facility_str, US"log_", 4) == 0)) @@ -3481,10 +3542,11 @@ if (syslog_facility_str) if (*pid_file_path) { - if (!(s = expand_string(pid_file_path))) + const uschar * t = expand_cstring(pid_file_path); + if (!t) log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to expand pid_file_path " "\"%s\": %s", pid_file_path, expand_string_message); - pid_file_path = s; + pid_file_path = t; } /* Set default value of process_log_path */ @@ -3569,8 +3631,7 @@ if (host_number_string) "failed to expand localhost_number \"%s\": %s", host_number_string, expand_string_message); n = Ustrtol(s, &end, 0); - while (isspace(*end)) end++; - if (*end) + if (Uskip_whitespace(&end)) log_write(0, LOG_PANIC_DIE|LOG_CONFIG, "localhost_number value is not a number: %s", s); if (n > LOCALHOST_MAX) @@ -4018,10 +4079,9 @@ Returns: time in seconds or fixed point number * 1000 */ static int -retry_arg(const uschar **paddr, int type) +retry_arg(const uschar ** paddr, int type) { -const uschar *p = *paddr; -const uschar *pp; +const uschar * p = *paddr, * pp; if (*p++ != ',') log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN, "comma expected"); @@ -4029,7 +4089,7 @@ Uskip_whitespace(&p); pp = p; while (isalnum(*p) || (type == 1 && *p == '.')) p++; -if (*p != 0 && !isspace(*p) && *p != ',' && *p != ';') +if (*p && !isspace(*p) && *p != ',' && *p != ';') log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN, "comma or semicolon expected"); *paddr = p; @@ -4432,10 +4492,8 @@ for (const config_line_item * i = config_lines; i; i = i->next) r = store_mark(); /* skip over to the first non-space */ - for (current = string_copy(i->line); *current && isspace(*current); ++current) - ; - - if (!*current) + current = string_copy(i->line); + if (!Uskip_whitespace(¤t)) continue; /* Collapse runs of spaces. We stop this if we encounter one of the @@ -4443,11 +4501,10 @@ for (const config_line_item * i = config_lines; i; i = i->next) for (p = current; *p; p++) if (isspace(*p)) { - uschar *next; + uschar * next = p; if (*p != ' ') *p = ' '; - for (next = p; isspace(*next); ++next) - ; + Uskip_whitespace(&p); if (next - p > 1) memmove(p+1, next, Ustrlen(next)+1); diff --git a/src/src/receive.c b/src/src/receive.c index dbb43e749..9fae6ad60 100644 --- a/src/src/receive.c +++ b/src/src/receive.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) The Exim Maintainers 2020 - 2022 */ +/* Copyright (c) The Exim Maintainers 2020 - 2023 */ /* 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 */ @@ -137,9 +137,9 @@ Returns: TRUE for a trusted caller */ BOOL -receive_check_set_sender(uschar *newsender) +receive_check_set_sender(const uschar * newsender) { -uschar *qnewsender; +const uschar * qnewsender; if (f.trusted_caller) return TRUE; if (!newsender || !untrusted_set_sender) return FALSE; qnewsender = Ustrchr(newsender, '@') @@ -290,12 +290,11 @@ Returns: FALSE if there isn't enough space, or if the information cannot BOOL receive_check_fs(int msg_size) { -int_eximarith_t space; int inodes; if (check_spool_space > 0 || msg_size > 0 || check_spool_inodes > 0) { - space = receive_statvfs(TRUE, &inodes); + int_eximarith_t space = receive_statvfs(TRUE, &inodes); DEBUG(D_receive) debug_printf("spool directory space = " PR_EXIM_ARITH "K inodes = %d " @@ -313,7 +312,7 @@ if (check_spool_space > 0 || msg_size > 0 || check_spool_inodes > 0) if (check_log_space > 0 || check_log_inodes > 0) { - space = receive_statvfs(FALSE, &inodes); + int_eximarith_t space = receive_statvfs(FALSE, &inodes); DEBUG(D_receive) debug_printf("log directory space = " PR_EXIM_ARITH "K inodes = %d " @@ -514,7 +513,7 @@ Returns: nothing */ void -receive_add_recipient(uschar * recipient, int pno) +receive_add_recipient(const uschar * recipient, int pno) { if (recipients_count >= recipients_list_max) { @@ -591,7 +590,7 @@ Returns: TRUE if it did remove something; FALSE otherwise */ BOOL -receive_remove_recipient(uschar *recipient) +receive_remove_recipient(const uschar * recipient) { DEBUG(D_receive) debug_printf("receive_remove_recipient(\"%s\") called\n", recipient); @@ -829,100 +828,114 @@ July 2003: Bare CRs cause trouble. We now treat them as line terminators as well, so that there are no CRs in spooled messages. However, the message terminating dot is not recognized between two bare CRs. +Dec 2023: getting a site to send a body including an "LF . LF" sequence +followed by SMTP commands is a possible "smtp smuggling" attack. If +the first (header) line for the message has a proper CRLF then enforce +that for the body: convert bare LF to a space. + Arguments: - fout a FILE to which to write the message; NULL if skipping + fout a FILE to which to write the message; NULL if skipping + strict_crlf require full CRLF sequence as a line ending Returns: One of the END_xxx values indicating why it stopped reading */ static int -read_message_data_smtp(FILE *fout) +read_message_data_smtp(FILE * fout, BOOL strict_crlf) { -int ch_state = 0; -int ch; -int linelength = 0; +enum { s_linestart, s_normal, s_had_cr, s_had_nl_dot, s_had_dot_cr } ch_state = + s_linestart; +int linelength = 0, ch; while ((ch = (receive_getc)(GETC_BUFFER_UNLIMITED)) != EOF) { if (ch == 0) body_zerocount++; switch (ch_state) { - case 0: /* After LF or CRLF */ - if (ch == '.') - { - ch_state = 3; - continue; /* Don't ever write . after LF */ - } - ch_state = 1; + case s_linestart: /* After LF or CRLF */ + if (ch == '.') + { + ch_state = s_had_nl_dot; + continue; /* Don't ever write . after LF */ + } + ch_state = s_normal; - /* Else fall through to handle as normal uschar. */ + /* Else fall through to handle as normal uschar. */ - case 1: /* Normal state */ - if (ch == '\n') - { - ch_state = 0; - body_linecount++; + case s_normal: /* Normal state */ + if (ch == '\r') + { + ch_state = s_had_cr; + continue; /* Don't write the CR */ + } + if (ch == '\n') /* Bare LF at end of line */ + if (strict_crlf) + ch = ' '; /* replace LF with space */ + else + { /* treat as line ending */ + ch_state = s_linestart; + body_linecount++; + if (linelength > max_received_linelength) + max_received_linelength = linelength; + linelength = -1; + } + break; + + case s_had_cr: /* After (unwritten) CR */ + body_linecount++; /* Any char ends line */ if (linelength > max_received_linelength) - max_received_linelength = linelength; + max_received_linelength = linelength; linelength = -1; - } - else if (ch == '\r') - { - ch_state = 2; - continue; - } - break; + if (ch == '\n') /* proper CRLF */ + ch_state = s_linestart; + else + { + message_size++; /* convert the dropped CR to a stored NL */ + if (fout && fputc('\n', fout) == EOF) return END_WERROR; + cutthrough_data_put_nl(); + if (ch == '\r') /* CR; do not write */ + continue; + ch_state = s_normal; /* not LF or CR; process as standard */ + } + break; - case 2: /* After (unwritten) CR */ - body_linecount++; - if (linelength > max_received_linelength) - max_received_linelength = linelength; - linelength = -1; - if (ch == '\n') - { - ch_state = 0; - } - else - { - message_size++; - if (fout != NULL && fputc('\n', fout) == EOF) return END_WERROR; - cutthrough_data_put_nl(); - if (ch != '\r') ch_state = 1; else continue; - } - break; + case s_had_nl_dot: /* After [CR] LF . */ + if (ch == '\n') /* [CR] LF . LF */ + if (strict_crlf) + ch = ' '; /* replace LF with space */ + else + return END_DOT; + else if (ch == '\r') /* [CR] LF . CR */ + { + ch_state = s_had_dot_cr; + continue; /* Don't write the CR */ + } + /* The dot was removed on reaching s_had_nl_dot. For a doubled dot, here, + reinstate it to cutthrough. The current ch, dot or not, is passed both to + cutthrough and to file below. */ + else if (ch == '.') + { + uschar c = ch; + cutthrough_data_puts(&c, 1); + } + ch_state = s_normal; + break; - case 3: /* After [CR] LF . */ - if (ch == '\n') - return END_DOT; - if (ch == '\r') - { - ch_state = 4; - continue; - } - /* The dot was removed at state 3. For a doubled dot, here, reinstate - it to cutthrough. The current ch, dot or not, is passed both to cutthrough - and to file below. */ - if (ch == '.') - { - uschar c= ch; - cutthrough_data_puts(&c, 1); - } - ch_state = 1; - break; + case s_had_dot_cr: /* After [CR] LF . CR */ + if (ch == '\n') + return END_DOT; /* Preferred termination */ - case 4: /* After [CR] LF . CR */ - if (ch == '\n') return END_DOT; - message_size++; - body_linecount++; - if (fout != NULL && fputc('\n', fout) == EOF) return END_WERROR; - cutthrough_data_put_nl(); - if (ch == '\r') - { - ch_state = 2; - continue; - } - ch_state = 1; - break; + message_size++; /* convert the dropped CR to a stored NL */ + body_linecount++; + if (fout && fputc('\n', fout) == EOF) return END_WERROR; + cutthrough_data_put_nl(); + if (ch == '\r') + { + ch_state = s_had_cr; + continue; /* CR; do not write */ + } + ch_state = s_normal; + break; } /* Add the character to the spool file, unless skipping; then loop for the @@ -1138,7 +1151,7 @@ receive_swallow_smtp(void) { if (message_ended >= END_NOTENDED) message_ended = chunking_state <= CHUNKING_OFFERED - ? read_message_data_smtp(NULL) + ? read_message_data_smtp(NULL, FALSE) : read_message_bdat_smtp_wire(NULL); } @@ -1190,6 +1203,8 @@ static void give_local_error(int errcode, uschar *text1, uschar *text2, int error_rc, FILE *f, header_line *hptr) { +DEBUG(D_all) debug_printf("%s%s\n", text2, text1); + if (error_handling == ERRORS_SENDER) { error_block eblock; @@ -1558,6 +1573,7 @@ uschar * timestamp = expand_string(US"${tod_full}"); header_line * received_header= header_list; if (recipients_count == 1) received_for = recipients_list[0].address; +GET_OPTION("received_header_text"); received = expand_string(received_header_text); received_for = NULL; @@ -1732,7 +1748,7 @@ uschar *user_msg, *log_msg; /* Working header pointers */ rmark reset_point; -header_line *next; +header_line * next; /* Flags for noting the existence of certain headers (only one left) */ @@ -1740,15 +1756,16 @@ BOOL date_header_exists = FALSE; /* Pointers to receive the addresses of headers whose contents we need. */ -header_line *from_header = NULL; -header_line *subject_header = NULL; -header_line *msgid_header = NULL; -header_line *received_header; +header_line * from_header = NULL; +#ifdef SUPPORT_DMARC +header_line * dmarc_from_header = NULL; +#endif +header_line * subject_header = NULL, * msgid_header = NULL, * received_header; BOOL msgid_header_newly_created = FALSE; /* Variables for use when building the Received: header. */ -uschar *timestamp; +uschar * timestamp; int tslen; /* Time of creation of message_id */ @@ -1960,8 +1977,10 @@ for (;;) if (ch == '\n') { - if (first_line_ended_crlf == TRUE_UNSET) first_line_ended_crlf = FALSE; - else if (first_line_ended_crlf) receive_ungetc(' '); + if (first_line_ended_crlf == TRUE_UNSET) + first_line_ended_crlf = FALSE; + else if (first_line_ended_crlf) + receive_ungetc(' '); goto EOL; } @@ -1970,14 +1989,20 @@ for (;;) This implements the dot-doubling rule, though header lines starting with dots aren't exactly common. They are legal in RFC 822, though. If the following is CRLF or LF, this is the line that that terminates the + entire message. We set message_ended to indicate this has happened (to prevent further reading), and break out of the loop, having freed the empty header, and set next = NULL to indicate no data line. */ if (f.dot_ends && ptr == 0 && ch == '.') { + /* leading dot while in headers-read mode */ ch = (receive_getc)(GETC_BUFFER_UNLIMITED); - if (ch == '\r') + if (ch == '\n' && first_line_ended_crlf == TRUE /* and not TRUE_UNSET */ ) + /* dot, LF but we are in CRLF mode. Attack? */ + ch = ' '; /* replace the LF with a space */ + + else if (ch == '\r') { ch = (receive_getc)(GETC_BUFFER_UNLIMITED); if (ch != '\n') @@ -2013,7 +2038,8 @@ for (;;) ch = (receive_getc)(GETC_BUFFER_UNLIMITED); if (ch == '\n') { - if (first_line_ended_crlf == TRUE_UNSET) first_line_ended_crlf = TRUE; + if (first_line_ended_crlf == TRUE_UNSET) + first_line_ended_crlf = TRUE; goto EOL; } @@ -2176,8 +2202,9 @@ OVERSIZE: { if (!f.sender_address_forced) { - uschar *uucp_sender = expand_string(uucp_from_sender); - if (!uucp_sender) + uschar * uucp_sender; + GET_OPTION("uucp_from_sender"); + if (!(uucp_sender = expand_string(uucp_from_sender))) log_write(0, LOG_MAIN|LOG_PANIC, "expansion of \"%s\" failed after matching " "\"From \" line: %s", uucp_from_sender, expand_string_message); @@ -2225,8 +2252,7 @@ OVERSIZE: if (isspace(*p)) break; while (mac_isgraph(*p) && *p != ':') p++; - while (isspace(*p)) p++; - if (*p != ':') + if (Uskip_whitespace(&p) != ':') { body_zerocount = had_zero; break; @@ -2421,19 +2447,23 @@ for (header_line * h = header_list->next; h; h = h->next) case htype_from: h->type = htype_from; +#ifdef SUPPORT_DMARC + if (!is_resent) dmarc_from_header = h; +#endif if (!resents_exist || is_resent) { from_header = h; if (!smtp_input) { int len; - uschar *s = Ustrchr(h->text, ':') + 1; - while (isspace(*s)) s++; + uschar * s = Ustrchr(h->text, ':') + 1; + + Uskip_whitespace(&s); len = h->slen - (s - h->text) - 1; if (Ustrlen(originator_login) == len && strncmpic(s, originator_login, len) == 0) { - uschar *name = is_resent? US"Resent-From" : US"From"; + uschar * name = is_resent ? US"Resent-From" : US"From"; header_add(htype_from, "%s: %s <%s@%s>\n", name, originator_name, originator_login, qualify_domain_sender); from_header = header_last; @@ -2488,15 +2518,13 @@ for (header_line * h = header_list->next; h; h = h->next) if (filter_test != FTEST_NONE) { - uschar *start = h->text + 12; - uschar *end = start + Ustrlen(start); - while (isspace(*start)) start++; + uschar * start = h->text + 12; + uschar * end = start + Ustrlen(start); + + Uskip_whitespace(&start); while (end > start && isspace(end[-1])) end--; if (*start == '<' && end[-1] == '>') - { - start++; - end--; - } + { start++; end--; } return_path = string_copyn(start, end - start); printf("Return-path taken from \"Return-path:\" header line\n"); } @@ -2599,12 +2627,12 @@ if (extract_recip) if ((h->type == htype_to || h->type == htype_cc || h->type == htype_bcc) && (!contains_resent_headers || strncmpic(h->text, US"resent-", 7) == 0)) { - uschar *s = Ustrchr(h->text, ':') + 1; - while (isspace(*s)) s++; + uschar * s = Ustrchr(h->text, ':') + 1; + Uskip_whitespace(&s); f.parse_allow_group = TRUE; /* Allow address group syntax */ - while (*s != 0) + while (*s) { uschar *ss = parse_find_address_end(s, FALSE); uschar *recipient, *errmess, *pp; @@ -2612,7 +2640,7 @@ if (extract_recip) /* Check on maximum */ - if (recipients_max > 0 && ++rcount > recipients_max) + if (recipients_max_expanded > 0 && ++rcount > recipients_max_expanded) give_local_error(ERRMESS_TOOMANYRECIP, US"too many recipients", US"message rejected: ", error_rc, stdin, NULL); /* Does not return */ @@ -2680,7 +2708,7 @@ if (extract_recip) /* Move on past this address */ s = ss + (*ss ? 1 : 0); - while (isspace(*s)) s++; + Uskip_whitespace(&s); } /* Next address */ f.parse_allow_group = FALSE; /* Reset group syntax flags */ @@ -2796,6 +2824,7 @@ if ( !msgid_header /* Permit only letters, digits, dots, and hyphens in the domain */ + GET_OPTION("message_id_header_domain"); if (message_id_domain) { uschar *new_id_domain = expand_string(message_id_domain); @@ -2817,6 +2846,7 @@ if ( !msgid_header /* Permit all characters except controls and RFC 2822 specials in the additional text part. */ + GET_OPTION("message_id_header_text"); if (message_id_text) { uschar *new_id_text = expand_string(message_id_text); @@ -3046,7 +3076,7 @@ if ( from_header it has already been rewritten as part of verification for SMTP input. */ DEBUG(D_rewrite) - { debug_printf("global rewrite rules\n"); acl_level++; } + { debug_printf("rewrite rules on sender address\n"); acl_level++; } if (global_rewrite_rules && !sender_address_unrewritten && *sender_address) { /* deconst ok as src was not const */ @@ -3073,7 +3103,7 @@ documented as happening *after* recipient addresses are taken from the headers by the -t command line option. An added Sender: gets rewritten here. */ DEBUG(D_rewrite) - { debug_printf("rewrite headers\n"); acl_level++; } + { debug_printf("qualify and rewrite headers\n"); acl_level++; } for (header_line * h = header_list->next, * newh; h; h = h->next) if ((newh = rewrite_header(h, NULL, NULL, global_rewrite_rules, rewrite_existflags, TRUE))) @@ -3112,9 +3142,11 @@ new Received:) has not yet been set. */ DEBUG(D_receive) { debug_printf(">>Headers after rewriting and local additions:\n"); + acl_level++; for (header_line * h = header_list->next; h; h = h->next) - debug_printf("%c %s", h->type, h->text); + debug_printf_indent("%c %s", h->type, h->text); debug_printf("\n"); + acl_level--; } /* The headers are now complete in store. If we are running in filter @@ -3161,7 +3193,7 @@ if (cutthrough.cctx.sock >= 0 && cutthrough.delivery) /* Open a new spool file for the data portion of the message. We need -to access it both via a file descriptor and a stream. Try to make the +to access it both via a file descriptor and a stdio stream. Try to make the directory if it isn't there. */ spool_name = spool_fname(US"input", message_subdir, message_id, US"-D"); @@ -3230,7 +3262,7 @@ if (!ferror(spool_data_file) && !(receive_feof)() && message_ended != END_DOT) if (smtp_input) { message_ended = chunking_state <= CHUNKING_OFFERED - ? read_message_data_smtp(spool_data_file) + ? read_message_data_smtp(spool_data_file, first_line_ended_crlf) : spool_wireformat ? read_message_bdat_smtp_wire(spool_data_file) : read_message_bdat_smtp(spool_data_file); @@ -3380,8 +3412,8 @@ if (extract_recip && (bad_addresses || recipients_count == 0)) } } - log_write(0, LOG_MAIN|LOG_PANIC, "%s %s found in headers", - message_id, bad_addresses ? "bad addresses" : "no recipients"); + log_write(0, LOG_MAIN|LOG_PANIC, "%s found in headers", + bad_addresses ? "bad addresses" : "no recipients"); fseek(spool_data_file, (long int)spool_data_start_offset(message_id), SEEK_SET); @@ -3490,6 +3522,7 @@ else dkim_exim_verify_finish(); /* Check if we must run the DKIM ACL */ + GET_OPTION("acl_smtp_dkim"); if (acl_smtp_dkim && dkim_verify_signers && *dkim_verify_signers) { uschar * dkim_verify_signers_expanded = @@ -3579,79 +3612,88 @@ else #endif /* DISABLE_DKIM */ #ifdef WITH_CONTENT_SCAN - if ( recipients_count > 0 - && acl_smtp_mime - && !run_mime_acl(acl_smtp_mime, &smtp_yield, &smtp_reply, &blackholed_by) - ) - goto TIDYUP; + if (recipients_count > 0) + { + GET_OPTION("acl_smtp_mime"); + if (acl_smtp_mime + && !run_mime_acl(acl_smtp_mime, &smtp_yield, &smtp_reply, &blackholed_by) + ) + goto TIDYUP; + } #endif /* WITH_CONTENT_SCAN */ #ifdef SUPPORT_DMARC - dmarc_store_data(from_header); + dmarc_store_data(dmarc_from_header); #endif #ifndef DISABLE_PRDR - if (prdr_requested && recipients_count > 1 && acl_smtp_data_prdr) + if (prdr_requested && recipients_count > 1) { - int all_pass = OK; - int all_fail = FAIL; + GET_OPTION("acl_smtp_data_prdr"); + if (acl_smtp_data_prdr) + { + int all_pass = OK; + int all_fail = FAIL; - smtp_printf("353 PRDR content analysis beginning\r\n", SP_MORE); - /* Loop through recipients, responses must be in same order received */ - for (unsigned int c = 0; recipients_count > c; c++) - { - uschar * addr= recipients_list[c].address; - uschar * msg= US"PRDR R=<%s> %s"; - uschar * code; - DEBUG(D_receive) - debug_printf("PRDR processing recipient %s (%d of %d)\n", - addr, c+1, recipients_count); - rc = acl_check(ACL_WHERE_PRDR, addr, - acl_smtp_data_prdr, &user_msg, &log_msg); - - /* If any recipient rejected content, indicate it in final message */ - all_pass |= rc; - /* If all recipients rejected, indicate in final message */ - all_fail &= rc; - - switch (rc) - { - case OK: case DISCARD: code = US"250"; break; - case DEFER: code = US"450"; break; - default: code = US"550"; break; - } - if (user_msg != NULL) - smtp_user_msg(code, user_msg); - else + smtp_printf("353 PRDR content analysis beginning\r\n", SP_MORE); + /* Loop through recipients, responses must be in same order received */ + for (unsigned int c = 0; recipients_count > c; c++) { + const uschar * addr = recipients_list[c].address; + uschar * msg= US"PRDR R=<%s> %s"; + uschar * code; + DEBUG(D_receive) + debug_printf("PRDR processing recipient %s (%d of %d)\n", + addr, c+1, recipients_count); + rc = acl_check(ACL_WHERE_PRDR, addr, + acl_smtp_data_prdr, &user_msg, &log_msg); + + /* If any recipient rejected content, indicate it in final message */ + all_pass |= rc; + /* If all recipients rejected, indicate in final message */ + all_fail &= rc; + switch (rc) - { - case OK: case DISCARD: - msg = string_sprintf(CS msg, addr, "acceptance"); break; - case DEFER: - msg = string_sprintf(CS msg, addr, "temporary refusal"); break; - default: - msg = string_sprintf(CS msg, addr, "refusal"); break; - } - smtp_user_msg(code, msg); - } - if (log_msg) log_write(0, LOG_MAIN, "PRDR %s %s", addr, log_msg); - else if (user_msg) log_write(0, LOG_MAIN, "PRDR %s %s", addr, user_msg); - else log_write(0, LOG_MAIN, "%s", CS msg); + { + case OK: case DISCARD: code = US"250"; break; + case DEFER: code = US"450"; break; + default: code = US"550"; break; + } + if (user_msg != NULL) + smtp_user_msg(code, user_msg); + else + { + switch (rc) + { + case OK: case DISCARD: + msg = string_sprintf(CS msg, addr, "acceptance"); break; + case DEFER: + msg = string_sprintf(CS msg, addr, "temporary refusal"); break; + default: + msg = string_sprintf(CS msg, addr, "refusal"); break; + } + smtp_user_msg(code, msg); + } + if (log_msg) log_write(0, LOG_MAIN, "PRDR %s %s", addr, log_msg); + else if (user_msg) log_write(0, LOG_MAIN, "PRDR %s %s", addr, user_msg); + else log_write(0, LOG_MAIN, "%s", CS msg); - if (rc != OK) { receive_remove_recipient(addr); c--; } - } - /* Set up final message, used if data acl gives OK */ - smtp_reply = string_sprintf("%s id=%s message %s", - all_fail == FAIL ? US"550" : US"250", - message_id, - all_fail == FAIL - ? US"rejected for all recipients" - : all_pass == OK - ? US"accepted" - : US"accepted for some recipients"); - if (recipients_count == 0) - goto NOT_ACCEPTED; + if (rc != OK) { receive_remove_recipient(addr); c--; } + } + /* Set up final message, used if data acl gives OK */ + smtp_reply = string_sprintf("%s id=%s message %s", + all_fail == FAIL ? US"550" : US"250", + message_id, + all_fail == FAIL + ? US"rejected for all recipients" + : all_pass == OK + ? US"accepted" + : US"accepted for some recipients"); + if (recipients_count == 0) + goto NOT_ACCEPTED; + } + else + prdr_requested = FALSE; } else prdr_requested = FALSE; @@ -3660,6 +3702,7 @@ else /* Check the recipients count again, as the MIME ACL might have changed them. */ + GET_OPTION("acl_smtp_data"); if (acl_smtp_data && recipients_count > 0) { rc = acl_check(ACL_WHERE_DATA, NULL, acl_smtp_data, &user_msg, &log_msg); @@ -3697,6 +3740,7 @@ else { #ifdef WITH_CONTENT_SCAN + GET_OPTION("acl_not_smtp_mime"); if ( acl_not_smtp_mime && !run_mime_acl(acl_not_smtp_mime, &smtp_yield, &smtp_reply, &blackholed_by) @@ -3704,9 +3748,10 @@ else goto TIDYUP; #endif /* WITH_CONTENT_SCAN */ + GET_OPTION("acl_not_smtp"); if (acl_not_smtp) { - uschar *user_msg, *log_msg; + uschar * user_msg, * log_msg; f.authentication_local = TRUE; rc = acl_check(ACL_WHERE_NOTSMTP, NULL, acl_not_smtp, &user_msg, &log_msg); if (rc == DISCARD) @@ -4029,7 +4074,15 @@ else receive_messagecount++; -if (fflush(spool_data_file)) +if ( fflush(spool_data_file) +#if _POSIX_C_SOURCE >= 199309L || _XOPEN_SOURCE >= 500 +# ifdef ENABLE_DISABLE_FSYNC + || !disable_fsync && fdatasync(data_fd) +# else + || fdatasync(data_fd) +# endif +#endif + ) { errmsg = string_sprintf("Spool write error: %s", strerror(errno)); log_write(0, LOG_MAIN, "%s\n", errmsg); @@ -4391,7 +4444,7 @@ data file will be flushed(!) out thereby. Nevertheless, it is theoretically possible for fclose() to fail - and this has been seen on obscure filesystems (probably one that delayed the actual media write as long as possible) but what to do? What has happened to the lock if this happens? -It's a mes because we already logged the acceptance. +It's a mess because we already logged the acceptance. We can at least log the issue, try to remove spoolfiles and respond with a temp-reject. We do not want to close before logging acceptance because we want to hold the lock until we know that logging worked. @@ -4425,8 +4478,8 @@ if (spool_data_file && cutthrough_done == NOT_TRIED) Uunlink(spool_fname(US"input", message_subdir, message_id, US"-H")); Uunlink(spool_fname(US"msglog", message_subdir, message_id, US"")); - /* Claim a data ACL temp-reject, just to get reject logging and resposponse */ - smtp_handle_acl_fail(ACL_WHERE_DATA, rc, NULL, log_msg); + /* Claim a data ACL temp-reject, just to get reject logging and response */ + if (smtp_input) smtp_handle_acl_fail(ACL_WHERE_DATA, rc, NULL, log_msg); smtp_reply = US""; /* Indicate reply already sent */ message_id[0] = 0; /* no message accepted */ @@ -4573,3 +4626,5 @@ return yield; /* TRUE if more messages (SMTP only) */ } /* End of receive.c */ +/* vi: se aw ai sw=2 +*/ diff --git a/src/src/regex.c b/src/src/regex.c index 757243e7f..94e2928b9 100644 --- a/src/src/regex.c +++ b/src/src/regex.c @@ -3,7 +3,7 @@ *************************************************/ /* - * Copyright (c) The Exim Maintainers 2016 - 2022 + * Copyright (c) The Exim Maintainers 2016 - 2024 * Copyright (c) Tom Kistner 2003-2015 * License: GPL * SPDX-License-Identifier: GPL-2.0-or-later @@ -24,19 +24,16 @@ typedef struct pcre_list { struct pcre_list * next; } pcre_list; -uschar regex_match_string_buffer[1024]; - extern FILE *mime_stream; extern uschar *mime_current_boundary; static pcre_list * -compile(const uschar * list, BOOL cacheable) +compile(const uschar * list, BOOL cacheable, int * cntp) { -int sep = 0; +int sep = 0, cnt = 0; uschar * regex_string; -pcre_list * re_list_head = NULL; -pcre_list * ri; +pcre_list * re_list_head = NULL, * ri; /* precompile our regexes */ while ((regex_string = string_nextinlist(&list, &sep, NULL, 0))) @@ -58,10 +55,19 @@ while ((regex_string = string_nextinlist(&list, &sep, NULL, 0))) ri->pcre_text = regex_string; ri->next = re_list_head; re_list_head = ri; + cnt++; } +if (cntp) *cntp = cnt; return re_list_head; } + +/* Check list of REs against buffer, returning OK for (first) match, +else FAIL. On match return allocated result strings in regex_vars[]. + +We use the perm-pool for that, so that our caller can release +other allocations. +*/ static int matcher(pcre_list * re_list_head, uschar * linebuffer, int len) { @@ -74,9 +80,10 @@ for (pcre_list * ri = re_list_head; ri; ri = ri->next) /* try matcher on the line */ if ((n = pcre2_match(ri->re, (PCRE2_SPTR)linebuffer, len, 0, 0, md, pcre_gen_mtc_ctx)) > 0) { - Ustrncpy(regex_match_string_buffer, ri->pcre_text, - sizeof(regex_match_string_buffer)-1); - regex_match_string = regex_match_string_buffer; + int save_pool = store_pool; + store_pool = POOL_PERM; + + regex_match_string = string_copy(ri->pcre_text); for (int nn = 1; nn < n; nn++) { @@ -86,6 +93,7 @@ for (pcre_list * ri = re_list_head; ri; ri = ri->next) regex_vars[nn-1] = string_copyn(linebuffer + ovec[off], len); } + store_pool = save_pool; return OK; } } @@ -110,9 +118,8 @@ regex(const uschar ** listptr, BOOL cacheable) unsigned long mbox_size; FILE * mbox_file; pcre_list * re_list_head; -uschar * linebuffer; long f_pos = 0; -int ret = FAIL; +int ret = FAIL, cnt, lcount = REGEX_LOOPCOUNT_STORE_RESET; regex_vars_clear(); @@ -136,26 +143,33 @@ else mbox_file = mime_stream; } -/* precompile our regexes */ -if (!(re_list_head = compile(*listptr, cacheable))) - return FAIL; /* no regexes -> nothing to do */ + /* precompile our regexes */ + if ((re_list_head = compile(*listptr, cacheable, &cnt))) + { + rmark reset_point = store_mark(); -/* match each line against all regexes */ -linebuffer = store_get(32767, GET_TAINTED); -while (fgets(CS linebuffer, 32767, mbox_file)) - { - if ( mime_stream && mime_current_boundary /* check boundary */ - && Ustrncmp(linebuffer, "--", 2) == 0 - && Ustrncmp((linebuffer+2), mime_current_boundary, - Ustrlen(mime_current_boundary)) == 0) - break; /* found boundary */ - - if ((ret = matcher(re_list_head, linebuffer, (int)Ustrlen(linebuffer))) == OK) - goto done; - } -/* no matches ... */ + /* match each line against all regexes */ + while (fgets(CS big_buffer, big_buffer_size, mbox_file)) + { + if ( mime_stream && mime_current_boundary /* check boundary */ + && Ustrncmp(big_buffer, "--", 2) == 0 + && Ustrncmp((big_buffer+2), mime_current_boundary, + Ustrlen(mime_current_boundary)) == 0) + break; /* found boundary */ + + if ((ret = matcher(re_list_head, big_buffer, (int)Ustrlen(big_buffer))) == OK) + break; + + if ((lcount -= cnt) <= 0) + { + store_reset(reset_point); reset_point = store_mark(); + lcount = REGEX_LOOPCOUNT_STORE_RESET; + } + } + + store_reset(reset_point); + } -done: if (!mime_stream) (void)fclose(mbox_file); else @@ -180,14 +194,11 @@ pcre_list * re_list_head = NULL; FILE * f; uschar * mime_subject = NULL; int mime_subject_len = 0; -int ret; +int ret = FAIL; +rmark reset_point; regex_vars_clear(); -/* precompile our regexes */ -if (!(re_list_head = compile(*listptr, cacheable))) - return FAIL; /* no regexes -> nothing to do */ - /* check if the file is already decoded */ if (!mime_decoded_filename) { /* no, decode it first */ @@ -210,12 +221,20 @@ if (!(f = fopen(CS mime_decoded_filename, "rb"))) return DEFER; } -/* get 32k memory, tainted */ -mime_subject = store_get(32767, GET_TAINTED); +reset_point = store_mark(); + { + /* precompile our regexes */ + if ((re_list_head = compile(*listptr, cacheable, NULL))) + { + /* get 32k memory, tainted */ + mime_subject = store_get(32767, GET_TAINTED); -mime_subject_len = fread(mime_subject, 1, 32766, f); + mime_subject_len = fread(mime_subject, 1, 32766, f); -ret = matcher(re_list_head, mime_subject, mime_subject_len); + ret = matcher(re_list_head, mime_subject, mime_subject_len); + } + } +store_reset(reset_point); (void)fclose(f); return ret; } diff --git a/src/src/regex_cache.c b/src/src/regex_cache.c index 91ca8ca02..3f02802d6 100644 --- a/src/src/regex_cache.c +++ b/src/src/regex_cache.c @@ -3,7 +3,7 @@ *************************************************/ /* - * Copyright (c) The Exim Maintainers 2022 + * Copyright (c) The Exim Maintainers 2022 - 2023 * License: GPL * SPDX-License-Identifier: GPL-2.0-or-later */ diff --git a/src/src/retry.c b/src/src/retry.c index 1897c782f..90319d9d7 100644 --- a/src/src/retry.c +++ b/src/src/retry.c @@ -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 */ @@ -31,7 +31,7 @@ Returns: TRUE if the ultimate timeout has been reached */ BOOL -retry_ultimate_address_timeout(uschar *retry_key, const uschar *domain, +retry_ultimate_address_timeout(const uschar * retry_key, const uschar *domain, dbdata_retry *retry_record, time_t now) { BOOL address_timeout; @@ -75,6 +75,29 @@ return address_timeout; +const uschar * +retry_host_key_build(const host_item * host, BOOL incl_ip, + const uschar * portstring) +{ +const uschar * s = host->name; +gstring * g = string_is_ip_address(s, NULL) + ? string_fmt_append(NULL, "T:[%s]", s) /* wrap a name which is a bare ip */ + : string_fmt_append(NULL, "T:%s", s); + +s = host->address; +if (incl_ip) + g = Ustrchr(s, ':') + ? string_fmt_append(g, ":[%s]", s) /* wrap an ipv6 */ + : string_fmt_append(g, ":%s", s); + +if (portstring) + g = string_cat(g, portstring); + +gstring_release_unused(g); +return string_from_gstring(g); +} + + /************************************************* * Set status of a host+address item * *************************************************/ @@ -124,11 +147,12 @@ Returns: TRUE if the host has expired but is usable because BOOL retry_check_address(const uschar *domain, host_item *host, uschar *portstring, - BOOL include_ip_address, uschar **retry_host_key, uschar **retry_message_key) + BOOL include_ip_address, + const uschar **retry_host_key, const uschar **retry_message_key) { BOOL yield = FALSE; time_t now = time(NULL); -uschar * host_key, * message_key; +const uschar * host_key, * message_key; open_db dbblock, * dbm_file; tree_node * node; dbdata_retry * host_retry_record, * message_retry_record; @@ -143,14 +167,11 @@ if (host->status != hstatus_unknown) return FALSE; host->status = hstatus_usable; /* Generate the host key for the unusable tree and the retry database. Ensure -host names are lower cased (that's what %S does). */ - -host_key = include_ip_address - ? string_sprintf("T:%S:%s%s", host->name, host->address, portstring) - : string_sprintf("T:%S%s", host->name, portstring); - -/* Generate the message-specific key */ +host names are lower cased (that's what %S does). +Generate the message-specific key too. +Be sure to maintain lack-of-spaces in retry keys; exinext depends on it. */ +host_key = retry_host_key_build(host, include_ip_address, portstring); message_key = string_sprintf("%s:%s", host_key, message_id); /* Search the tree of unusable IP addresses. This is filled in when deliveries @@ -290,7 +311,7 @@ Returns: nothing */ void -retry_add_item(address_item *addr, uschar *key, int flags) +retry_add_item(address_item * addr, const uschar * key, int flags) { retry_item * rti = store_get(sizeof(retry_item), GET_UNTAINTED); host_item * host = addr->host_used; @@ -343,11 +364,11 @@ Returns: pointer to retry rule, or NULL */ retry_config * -retry_find_config(const uschar *key, const uschar *alternate, int basic_errno, +retry_find_config(const uschar * key, const uschar * alternate, int basic_errno, int more_errno) { -const uschar *colon = Ustrchr(key, ':'); -retry_config *yield; +const uschar * colon = Ustrchr(key, ':'); +retry_config * yield; /* If there's a colon in the key, there are two possibilities: @@ -355,7 +376,8 @@ retry_config *yield; hostname:ip+port - In this case, we copy the host name. + In this case, we copy the host name (which could be an [ip], including + being an [ipv6], and we drop the []). (2) This is a key for a pipe, file, or autoreply delivery, in the format @@ -369,6 +391,8 @@ retry_config *yield; if (colon) key = isalnum(*key) ? string_copyn(key, colon-key) /* the hostname */ + : *key == '[' + ? string_copyn(key+1, Ustrchr(key, ']')-1-key) /* the ip */ : Ustrrchr(key, ':') + 1; /* Take from the last colon */ /* Sort out the keys */ @@ -521,11 +545,10 @@ void retry_update(address_item ** addr_defer, address_item ** addr_failed, address_item ** addr_succeed) { -open_db dbblock; -open_db *dbm_file = NULL; +open_db dbblock, * dbm_file = NULL; time_t now = time(NULL); -DEBUG(D_retry) debug_printf("Processing retry items\n"); +DEBUG(D_retry) { debug_printf("Processing retry items\n"); acl_level++; } /* Three-times loop to handle succeeded, failed, and deferred addresses. Deferred addresses must be handled after failed ones, because some may be moved @@ -538,7 +561,7 @@ for (int i = 0; i < 3; i++) address_item ** paddr = i==0 ? addr_succeed : i==1 ? addr_failed : addr_defer; address_item ** saved_paddr = NULL; - DEBUG(D_retry) debug_printf("%s addresses:\n", + DEBUG(D_retry) debug_printf_indent("%s addresses:\n", i == 0 ? "Succeeded" : i == 1 ? "Failed" : "Deferred"); /* Loop for each address on the chain. For deferred addresses, the whole @@ -560,7 +583,7 @@ for (int i = 0; i < 3; i++) int update_count = 0; int timedout_count = 0; - DEBUG(D_retry) debug_printf(" %s%s\n", addr->address, + DEBUG(D_retry) debug_printf_indent(" %s%s\n", addr->address, addr->retries ? "" : ": no retry items"); /* Loop for each retry item. */ @@ -585,7 +608,7 @@ for (int i = 0; i < 3; i++) if (!dbm_file) { DEBUG(D_deliver|D_retry|D_hints_lookup) - debug_printf("retry database not available for updating\n"); + debug_printf_indent("retry database not available for updating\n"); return; } @@ -607,7 +630,7 @@ for (int i = 0; i < 3; i++) { (void)dbfn_delete(dbm_file, rti->key); DEBUG(D_retry) - debug_printf("deleted retry information for %s\n", rti->key); + debug_printf_indent("deleted retry information for %s\n", rti->key); continue; } @@ -627,7 +650,7 @@ for (int i = 0; i < 3; i++) rti->flags & rf_host ? addr->domain : NULL, rti->basic_errno, rti->more_errno))) { - DEBUG(D_retry) debug_printf("No configured retry item for %s%s%s\n", + DEBUG(D_retry) debug_printf_indent("No configured retry item for %s%s%s\n", rti->key, rti->flags & rf_host ? US" or " : US"", rti->flags & rf_host ? addr->domain : US""); @@ -637,11 +660,11 @@ for (int i = 0; i < 3; i++) DEBUG(D_retry) if (rti->flags & rf_host) - debug_printf("retry for %s (%s) = %s %d %d\n", rti->key, + debug_printf_indent("retry for %s (%s) = %s %d %d\n", rti->key, addr->domain, retry->pattern, retry->basic_errno, retry->more_errno); else - debug_printf("retry for %s = %s %d %d\n", rti->key, retry->pattern, + debug_printf_indent("retry for %s = %s %d %d\n", rti->key, retry->pattern, retry->basic_errno, retry->more_errno); /* Set up the message for the database retry record. Because DBM @@ -654,7 +677,13 @@ for (int i = 0; i < 3; i++) ? US string_printing(rti->message) : US"unknown error"; message_length = Ustrlen(message); - if (message_length > EXIM_DB_RLIMIT) message_length = EXIM_DB_RLIMIT; + if (message_length > EXIM_DB_RLIMIT) + { + DEBUG(D_retry) + debug_printf_indent("truncating message from %u to %u bytes\n", + message_length, EXIM_DB_RLIMIT); + message_length = EXIM_DB_RLIMIT; + } /* Read a retry record from the database or construct a new one. Ignore an old one if it is too old since it was last updated. */ @@ -681,7 +710,7 @@ for (int i = 0; i < 3; i++) /* Compute how long this destination has been failing */ failing_interval = now - retry_record->first_failed; - DEBUG(D_retry) debug_printf("failing_interval=%d message_age=%d\n", + DEBUG(D_retry) debug_printf_indent("failing_interval=%d message_age=%d\n", failing_interval, message_age); /* For a non-host error, if the message has been on the queue longer @@ -763,7 +792,7 @@ for (int i = 0; i < 3; i++) ; if (now - received_time.tv_sec > last_rule->timeout) { - DEBUG(D_retry) debug_printf("on queue longer than maximum retry\n"); + DEBUG(D_retry) debug_printf_indent("on queue longer than maximum retry\n"); timedout_count++; rule = NULL; } @@ -827,16 +856,16 @@ for (int i = 0; i < 3; i++) retry_record->basic_errno = rti->basic_errno; retry_record->more_errno = rti->more_errno; Ustrncpy(retry_record->text, message, message_length); - retry_record->text[message_length] = 0; + retry_record->text[message_length] = 0; /* nul-term string in db */ DEBUG(D_retry) { int letter = retry_record->more_errno & 255; - debug_printf("Writing retry data for %s\n", rti->key); - debug_printf(" first failed=%d last try=%d next try=%d expired=%d\n", + debug_printf_indent("Writing retry data for %s\n", rti->key); + debug_printf_indent(" first failed=%d last try=%d next try=%d expired=%d\n", (int)retry_record->first_failed, (int)retry_record->last_try, (int)retry_record->next_try, retry_record->expired); - debug_printf(" errno=%d more_errno=", retry_record->basic_errno); + debug_printf_indent(" errno=%d more_errno=", retry_record->basic_errno); if (letter == 'A' || letter == 'M') debug_printf("%d,%c", (retry_record->more_errno >> 8) & 255, letter); @@ -856,12 +885,12 @@ for (int i = 0; i < 3; i++) if (update_count > 0 && update_count == timedout_count) if (!testflag(endaddr, af_retry_skipped)) { - DEBUG(D_retry) debug_printf("timed out: all retries expired\n"); + DEBUG(D_retry) debug_printf_indent("timed out: all retries expired\n"); timed_out = TRUE; } else DEBUG(D_retry) - debug_printf("timed out but some hosts were skipped\n"); + debug_printf_indent("timed out but some hosts were skipped\n"); } /* Loop for an address and its parents */ /* If this is a deferred address, and retry processing was requested by @@ -928,7 +957,9 @@ for (int i = 0; i < 3; i++) if (dbm_file) dbfn_close(dbm_file); -DEBUG(D_retry) debug_printf("end of retry processing\n"); +DEBUG(D_retry) { acl_level--; debug_printf("end of retry processing\n"); } } /* End of retry.c */ +/* vi: aw ai sw=2 +*/ diff --git a/src/src/rewrite.c b/src/src/rewrite.c index c6a7b9fa5..dd3b4fa74 100644 --- a/src/src/rewrite.c +++ b/src/src/rewrite.c @@ -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 */ @@ -104,7 +104,7 @@ rewrite_one(const uschar *s, int flag, BOOL *whole, BOOL add_header, uschar *nam { const uschar *yield = s; const uschar *subject = s; -uschar *domain = NULL; +const uschar *domain = NULL; BOOL done = FALSE; int rule_number = 1; int yield_start = 0, yield_end = 0; @@ -119,9 +119,9 @@ for (rewrite_rule * rule = rewrite_rules; { int start, end, pdomain; int count = 0; - uschar *save_localpart; - const uschar *save_domain; - uschar *error, *new; + const uschar * save_localpart; + const uschar * save_domain; + uschar * error, * new; const uschar * newparsed; /* Come back here for a repeat after a successful rewrite. We do this @@ -158,7 +158,7 @@ for (rewrite_rule * rule = rewrite_rules; else { - if (!domain) domain = Ustrrchr(subject, '@') + 1; + if (!domain) domain = CUstrrchr(subject, '@') + 1; /* Use the general function for matching an address against a list (here just one item, so use the "impossible value" separator UCHAR_MAX+1). */ @@ -182,16 +182,14 @@ for (rewrite_rule * rule = rewrite_rules; save_domain = deliver_domain; /* We have subject pointing to "localpart@domain" and domain pointing to - the domain. Temporarily terminate the local part so that it can be - set up as an expansion variable */ + the domain. Split into local part and domain so that it can be set up as + an expansion variable */ - domain[-1] = 0; - deliver_localpart = US subject; + deliver_localpart = US string_copyn(subject, domain-subject-1); deliver_domain = domain; new = expand_string(rule->replacement); - domain[-1] = '@'; deliver_localpart = save_localpart; deliver_domain = save_domain; } @@ -450,13 +448,13 @@ rewrite_one_header(header_line *h, int flag, rewrite_rule *rewrite_rules, int existflags, BOOL replace) { int lastnewline = 0; -header_line *newh = NULL; +header_line * newh = NULL; rmark function_reset_point = store_mark(); -uschar *s = Ustrchr(h->text, ':') + 1; +uschar * s = Ustrchr(h->text, ':') + 1; -while (isspace(*s)) s++; +Uskip_whitespace(&s); -DEBUG(D_rewrite) +DEBUG(D_rewrite) /* The header text includes the trailing newline */ debug_printf_indent("rewrite_one_header: type=%c:\n %s", h->type, h->text); f.parse_allow_group = TRUE; /* Allow group syntax */ @@ -470,25 +468,32 @@ We want to avoid keeping store for any intermediate versions. */ while (*s) { - uschar *sprev; - uschar *ss = parse_find_address_end(s, FALSE); - uschar *recipient, *new; + uschar * sprev = s; + uschar * ss = parse_find_address_end(s, FALSE), * ss1 = ss; + uschar * recipient, * new; rmark loop_reset_point = store_mark(); - uschar *errmess = NULL; + uschar * errmess = NULL; BOOL changed = FALSE; - int terminator = *ss; + uschar terminator = *ss; int start, end, domain; + /* If we hit the end of the header, trim trailing newline and whitespace */ + + if (!terminator) + { + while (ss1 > s && isspace(ss1[-1])) ss1--; + terminator = *ss1; + } + /* Temporarily terminate the string at this point, and extract the operative address within. Then put back the terminator and prepare for the next address, saving the start of the old one. */ - *ss = 0; + *ss1 = '\0'; recipient = parse_extract_address(s, &errmess, &start, &end, &domain, FALSE); - *ss = terminator; - sprev = s; - s = ss + (terminator ? 1 : 0); - while (isspace(*s)) s++; + *ss1 = terminator; + s = ss + (*ss ? 1 : 0); + Uskip_whitespace(&s); /* There isn't much we can do for syntactic disasters at this stage. Pro tem (possibly for ever) ignore them. @@ -503,8 +508,8 @@ while (*s) address, "To: undisclosed recpients:;" being the classic case. Ignore this one and carry on. */ - if ((rewrite_rules || routed_old) && Ustrcmp(errmess, "empty address") != 0) - log_write(0, LOG_MAIN, "rewrite: %s", errmess); + if (Ustrcmp(errmess, "empty address") != 0) + log_write(0, LOG_MAIN, "qualify/rewrite: %s", errmess); loop_reset_point = store_reset(loop_reset_point); continue; @@ -587,7 +592,8 @@ while (*s) point, because we may have a rewritten line from a previous time round the loop. */ - if (!changed) loop_reset_point = store_reset(loop_reset_point); + if (!changed) + loop_reset_point = store_reset(loop_reset_point); /* If the address has changed, create a new header containing the rewritten address. We do not need to set the chain pointers at this diff --git a/src/src/rfc2047.c b/src/src/rfc2047.c index 9d7a6e023..94178af73 100644 --- a/src/src/rfc2047.c +++ b/src/src/rfc2047.c @@ -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 */ @@ -313,8 +313,8 @@ while (mimeword) mimeword = decode_mimeword(string, lencheck, &q1, &q2, &endword, &dlen, &dptr); if (mimeword) { - uschar *s = string; - while (isspace(*s)) s++; + uschar * s = string; + Uskip_whitespace(&s); if (s == mimeword) string = s; } } diff --git a/src/src/route.c b/src/src/route.c index 82d51bc68..f42afd2ef 100644 --- a/src/src/route.c +++ b/src/src/route.c @@ -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 */ @@ -266,12 +266,12 @@ for (router_instance * r = routers; r; r = r->next) else if (Ustrncmp(s, "reroute:", 8) == 0) { s += 8; - while (isspace(*s)) s++; + Uskip_whitespace(&s); if (Ustrncmp(s, "rewrite:", 8) == 0) { r->self_rewrite = TRUE; s += 8; - while (isspace(*s)) s++; + Uskip_whitespace(&s); } r->self = s; r->self_code = self_reroute; @@ -616,7 +616,7 @@ uschar *check; if (!s) return OK; -DEBUG(D_route) debug_printf("checking require_files\n"); +DEBUG(D_route|D_expand) debug_printf("checking require_files\n"); listptr = s; while ((check = string_nextinlist(&listptr, &sep, NULL, 0))) @@ -637,7 +637,7 @@ while ((check = string_nextinlist(&listptr, &sep, NULL, 0))) /* Empty items are just skipped */ - if (*ss == 0) continue; + if (!*ss) continue; /* If there are no slashes in the string, we have a user name or uid, with optional group/gid. */ @@ -651,9 +651,9 @@ while ((check = string_nextinlist(&listptr, &sep, NULL, 0))) /* If there's a comma, temporarily terminate the user name/number at that point. Then set the uid. */ - if (comma != NULL) *comma = 0; + if (comma) *comma = 0; ok = route_finduser(ss, &pw, &uid); - if (comma != NULL) *comma = ','; + if (comma) *comma = ','; if (!ok) { @@ -663,24 +663,22 @@ while ((check = string_nextinlist(&listptr, &sep, NULL, 0))) /* If there was no comma, the gid is that associated with the user. */ - if (comma == NULL) - { - if (pw != NULL) gid = pw->pw_gid; else + if (!comma) + if (pw) + gid = pw->pw_gid; + else { *perror = string_sprintf("group missing after numerical uid %d for " "require_files", (int)uid); goto RETURN_DEFER; } - } else - { if (!route_findgroup(comma + 1, &gid)) { *perror = string_sprintf("group \"%s\" for require_files not found\n", comma + 1); goto RETURN_DEFER; } - } /* Note that we have values set, and proceed to next item */ @@ -695,13 +693,13 @@ while ((check = string_nextinlist(&listptr, &sep, NULL, 0))) if (*ss == '+') { eacces_code = 1; - while (isspace((*(++ss)))); + while (isspace(*++ss)); } if (*ss == '!') { invert = TRUE; - while (isspace((*(++ss)))); + while (isspace(*++ss)); } if (*ss != '/') @@ -859,12 +857,12 @@ Returns: OK if all the tests succeed */ static BOOL -check_router_conditions(router_instance *r, address_item *addr, int verify, - struct passwd **pw, uschar **perror) +check_router_conditions(router_instance * r, address_item * addr, int verify, + struct passwd ** pw, uschar ** perror) { int rc; -uschar *check_local_part; -unsigned int *localpart_cache; +uschar * check_local_part; +unsigned int * localpart_cache; /* Reset variables to hold a home directory and data from lookup of a domain or local part, and ensure search_find_defer is unset, in case there aren't any @@ -928,15 +926,12 @@ because that doesn't have the prefix or suffix stripped. A bit of massaging is required. Also, we only use the match cache for local parts that have not had a prefix or suffix stripped. */ +check_local_part = string_copy(addr->cc_local_part); if (!addr->prefix && !addr->suffix) - { localpart_cache = addr->localpart_cache; - check_local_part = addr->cc_local_part; - } else { localpart_cache = NULL; - check_local_part = string_copy(addr->cc_local_part); if (addr->prefix) check_local_part += Ustrlen(addr->prefix); if (addr->suffix) @@ -977,6 +972,7 @@ check_local_user before any subsequent expansions are done. Otherwise, $home could mean different things for different options, which would be extremely confusing. */ +GET_OPTION("router_home_directory"); if (r->router_home_directory) { uschar * router_home = expand_string(r->router_home_directory); @@ -1021,7 +1017,8 @@ if ((rc = check_files(r->require_files, perror)) != OK) if (r->condition) { - DEBUG(D_route) debug_printf("checking \"condition\" \"%.80s\"...\n", r->condition); + DEBUG(D_route|D_expand) + debug_printf("checking \"condition\" \"%.80s\"...\n", r->condition); if (!expand_check_condition(r->condition, r->name, US"router")) { if (f.search_find_defer) @@ -1443,6 +1440,7 @@ const uschar * varlist = r->set; tree_node ** root = (tree_node **) &addr->prop.variables; int sep = ';'; +GET_OPTION("set"); if (!varlist) return OK; /* Walk the varlist, creating variables */ @@ -1465,7 +1463,7 @@ for (uschar * ele; (ele = string_nextinlist(&varlist, &sep, NULL, 0)); ) } name += 2; - while (isspace(*assignment)) assignment++; + Uskip_whitespace(&assignment); if (!(val = expand_string(US assignment))) if (f.expand_string_forcedfail) @@ -1477,6 +1475,7 @@ for (uschar * ele; (ele = string_nextinlist(&varlist, &sep, NULL, 0)); ) /* Expand "more" if necessary; DEFER => an expansion failed */ + GET_OPTION("more"); yield = exp_bool(addr, US"router", r->name, D_route, US"more", r->more, r->expand_more, &more); if (yield != OK) return yield; @@ -1495,7 +1494,11 @@ for (uschar * ele; (ele = string_nextinlist(&varlist, &sep, NULL, 0)); ) { addr->message = string_sprintf("expansion of \"%s\" failed " "in %s router: %s", ele, r->name, expand_string_message); - return DEFER; + /* Caller will replace that for logging, if a DB lookup, to avoid exposing + passwords */ + DEBUG(D_route) debug_printf("%s\n", addr->message); + if (!f.search_find_defer) + return f.search_find_defer ? DEFER : FAIL; } if (!(node = tree_search(*root, name))) @@ -1549,8 +1552,8 @@ route_address(address_item *addr, address_item **paddr_local, { int yield = OK; BOOL unseen; -router_instance *r, *nextr; -const uschar *old_domain = addr->domain; +router_instance * r, * nextr; +const uschar * old_domain = addr->domain; HDEBUG(D_route) { @@ -1564,8 +1567,8 @@ instead of at the first router. */ for (r = addr->start_router ? addr->start_router : routers; r; r = nextr) { - uschar *error; - struct passwd *pw = NULL; + uschar * error; + struct passwd * pw = NULL; struct passwd pwcopy; BOOL loop_detected = FALSE; BOOL more; @@ -1739,11 +1742,11 @@ for (r = addr->start_router ? addr->start_router : routers; r; r = nextr) router traversal. On the addr string they are held as a variable tree, so as to maintain the post-expansion taints separate. */ - switch (set_router_vars(addr, r)) + switch (rc = set_router_vars(addr, r)) { case OK: break; case PASS: continue; /* with next router */ - default: goto ROUTE_EXIT; + default: yield = rc; goto ROUTE_EXIT; } /* Finally, expand the address_data field in the router. Forced failure @@ -1753,7 +1756,7 @@ for (r = addr->start_router ? addr->start_router : routers; r; r = nextr) if (r->address_data) { - DEBUG(D_route) debug_printf("processing address_data\n"); + DEBUG(D_route|D_expand) debug_printf("processing address_data\n"); if (!(deliver_address_data = expand_string(r->address_data))) { if (f.expand_string_forcedfail) @@ -1763,6 +1766,7 @@ for (r = addr->start_router ? addr->start_router : routers; r; r = nextr) /* Expand "more" if necessary; DEFER => an expansion failed */ + GET_OPTION("more"); yield = exp_bool(addr, US"router", r->name, D_route, US"more", r->more, r->expand_more, &more); if (yield != OK) goto ROUTE_EXIT; @@ -1865,12 +1869,13 @@ for (r = addr->start_router ? addr->start_router : routers; r; r = nextr) if (yield == PASS) { - if (r->pass_router != NULL) nextr = r->pass_router; + if (r->pass_router) nextr = r->pass_router; } else { /* Expand "more" if necessary */ + GET_OPTION("more"); yield = exp_bool(addr, US"router", r->name, D_route, US"more", r->more, r->expand_more, &more); if (yield != OK) goto ROUTE_EXIT; @@ -1896,18 +1901,21 @@ if (!r) HDEBUG(D_route) debug_printf("no more routers\n"); if (!addr->message) { - uschar *message = US"Unrouteable address"; - if (addr->router && addr->router->cannot_route_message) + uschar * message = US"Unrouteable address"; + if (addr->router) { - uschar *expmessage = expand_string(addr->router->cannot_route_message); - if (!expmessage) - { - if (!f.expand_string_forcedfail) - log_write(0, LOG_MAIN|LOG_PANIC, "failed to expand " - "cannot_route_message in %s router: %s", addr->router->name, - expand_string_message); - } - else message = expmessage; + uschar * s = addr->router->cannot_route_message; + GET_OPTION("cannot_route_message"); + if (s) + { + if ((s = expand_string(s))) + message = s; + else + if (!f.expand_string_forcedfail) + log_write(0, LOG_MAIN|LOG_PANIC, "failed to expand " + "cannot_route_message in %s router: %s", addr->router->name, + expand_string_message); + } } addr->user_message = addr->message = message; } @@ -1949,6 +1957,7 @@ networking, so it is included in the binary only if requested. */ #ifdef SUPPORT_TRANSLATE_IP_ADDRESS +GET_OPTION("translate_ip_address"); if (r->translate_ip_address) { int rc; diff --git a/src/src/routers/accept.c b/src/src/routers/accept.c index 63c8c22e4..c747a8ba3 100644 --- a/src/src/routers/accept.c +++ b/src/src/routers/accept.c @@ -2,13 +2,15 @@ * 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 */ #include "../exim.h" + +#ifdef ROUTER_ACCEPT /* Remainder of file */ #include "rf_functions.h" #include "accept.h" @@ -104,17 +106,17 @@ accept_router_options_block *ob = (accept_router_options_block *)(rblock->options_block); */ int rc; -uschar *errors_to; -uschar *remove_headers; -header_line *extra_headers; +const uschar * errors_to; +uschar * remove_headers; +header_line * extra_headers; DEBUG(D_route) debug_printf("%s router called for %s\n domain = %s\n", rblock->name, addr->address, addr->domain); /* Set up the errors address, if any. */ -rc = rf_get_errors_address(addr, rblock, verify, &errors_to); -if (rc != OK) return rc; +if ((rc = rf_get_errors_address(addr, rblock, verify, &errors_to)) != OK) + return rc; /* Set up the additional and removable headers for the address. */ @@ -133,8 +135,12 @@ addr->prop.errors_address = errors_to; addr->prop.extra_headers = extra_headers; addr->prop.remove_headers = remove_headers; -return rf_queue_add(addr, addr_local, addr_remote, rblock, pw)? OK : DEFER; +return rf_queue_add(addr, addr_local, addr_remote, rblock, pw) ? OK : DEFER; } #endif /*!MACRO_PREDEF*/ +#endif /*ROUTER_ACCEPT*/ + /* End of routers/accept.c */ +/* vi: aw ai sw=2 +*/ diff --git a/src/src/routers/dnslookup.c b/src/src/routers/dnslookup.c index d27757c7e..ef8243818 100644 --- a/src/src/routers/dnslookup.c +++ b/src/src/routers/dnslookup.c @@ -2,12 +2,14 @@ * 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 */ #include "../exim.h" + +#ifdef ROUTER_DNSLOOKUP /* Remainder of file */ #include "rf_functions.h" #include "dnslookup.h" @@ -151,14 +153,11 @@ host_item h; int rc; int widen_sep = 0; int whichrrs = HOST_FIND_BY_MX | HOST_FIND_BY_A | HOST_FIND_BY_AAAA; -dnslookup_router_options_block *ob = +dnslookup_router_options_block * ob = (dnslookup_router_options_block *)(rblock->options_block); -uschar *srv_service = NULL; -uschar *widen = NULL; -const uschar *pre_widen = addr->domain; -const uschar *post_widen = NULL; -const uschar *fully_qualified_name; -const uschar *listptr; +uschar * srv_service = NULL, * widen = NULL; +const uschar * pre_widen = addr->domain, * post_widen = NULL; +const uschar * fully_qualified_name, * listptr; uschar widen_buffer[256]; DEBUG(D_route) @@ -167,8 +166,8 @@ DEBUG(D_route) /* If an SRV check is required, expand the service name */ +GET_OPTION("check_srv"); if (ob->check_srv) - { if ( !(srv_service = expand_string(ob->check_srv)) && !f.expand_string_forcedfail) { @@ -176,8 +175,8 @@ if (ob->check_srv) rblock->name, ob->check_srv, expand_string_message); return DEFER; } - else whichrrs |= HOST_FIND_BY_SRV; - } + else + whichrrs |= HOST_FIND_BY_SRV; /* Set up the first of any widening domains. The code further down copes with either pre- or post-widening, but at present there is no way to turn on @@ -287,10 +286,15 @@ for (;;) if (ob->search_parents) flags |= HOST_FIND_SEARCH_PARENTS; } - rc = host_find_bydns(&h, CUS rblock->ignore_target_hosts, flags, - srv_service, ob->srv_fail_domains, ob->mx_fail_domains, - &rblock->dnssec, - &fully_qualified_name, &removed); + DEBUG(D_route) debug_printf_indent("main lookup for domain\n"); + { + expand_level++; + rc = host_find_bydns(&h, CUS rblock->ignore_target_hosts, flags, + srv_service, ob->srv_fail_domains, ob->mx_fail_domains, + &rblock->dnssec, + &fully_qualified_name, &removed); + expand_level--; + } if (removed) setflag(addr, af_local_host_removed); @@ -363,7 +367,7 @@ for (;;) As a common cause of this problem is MX records with IP addresses on the RHS, give a special message in this case. */ - if (h.mx >= 0 && h.address == NULL) + if (h.mx >= 0 && !h.address) { setflag(addr, af_pass_message); /* This is not a security risk */ if (h.name[0] == 0) @@ -472,7 +476,8 @@ return rf_queue_add(addr, addr_local, addr_remote, rblock, pw)? OK : DEFER; } -#endif /*!MACRO_PREDEF*/ +#endif /*!MACRO_PREDEF*/ +#endif /*ROUTER_DNSLOOKUP*/ /* End of routers/dnslookup.c */ /* vi: aw ai sw=2 */ diff --git a/src/src/routers/ipliteral.c b/src/src/routers/ipliteral.c index 1297b97f2..27c7fe6b3 100644 --- a/src/src/routers/ipliteral.c +++ b/src/src/routers/ipliteral.c @@ -2,13 +2,15 @@ * 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 */ #include "../exim.h" + +#ifdef ROUTER_IPLITERAL /* Remainder of file */ #include "rf_functions.h" #include "ipliteral.h" @@ -199,5 +201,6 @@ return rf_queue_add(addr, addr_local, addr_remote, rblock, pw)? OK : DEFER; } -#endif /*!MACRO_PREDEF*/ +#endif /*!MACRO_PREDEF*/ +#endif /*ROUTER_IPLITERAL*/ /* End of routers/ipliteral.c */ diff --git a/src/src/routers/iplookup.c b/src/src/routers/iplookup.c index 7faaea0cd..5078fdc00 100644 --- a/src/src/routers/iplookup.c +++ b/src/src/routers/iplookup.c @@ -2,13 +2,15 @@ * 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 */ #include "../exim.h" + +#ifdef ROUTER_IPLOOKUP /* Remainder of file */ #include "rf_functions.h" #include "iplookup.h" @@ -178,19 +180,17 @@ reply = store_get(256, GET_TAINTED); /* Build the query string to send. If not explicitly given, a default of "user@domain user@domain" is used. */ -if (ob->query == NULL) +GET_OPTION("query"); +if (!ob->query) query = string_sprintf("%s@%s %s@%s", addr->local_part, addr->domain, addr->local_part, addr->domain); else - { - query = expand_string(ob->query); - if (query == NULL) + if (!(query = expand_string(ob->query))) { addr->message = string_sprintf("%s router: failed to expand %s: %s", rblock->name, ob->query, expand_string_message); return DEFER; } - } query_len = Ustrlen(query); DEBUG(D_route) debug_printf("%s router query is \"%s\"\n", rblock->name, @@ -362,23 +362,24 @@ else /* If an explicit rerouting string is specified, expand it. Otherwise, use what was sent back verbatim. */ -if (ob->reroute != NULL) +GET_OPTION("reroute"); +if (ob->reroute) { reroute = expand_string(ob->reroute); expand_nmax = -1; - if (reroute == NULL) + if (!reroute) { addr->message = string_sprintf("%s router: failed to expand %s: %s", rblock->name, ob->reroute, expand_string_message); return DEFER; } } -else reroute = reply; +else + reroute = reply; /* We should now have a new address in the form user@domain. */ -domain = Ustrchr(reroute, '@'); -if (domain == NULL) +if (!(domain = Ustrchr(reroute, '@'))) { log_write(0, LOG_MAIN, "%s router: reroute string %s is not of the form " "user@domain", rblock->name, reroute); @@ -415,5 +416,6 @@ if (rc != OK) return rc; return OK; } -#endif /*!MACRO_PREDEF*/ +#endif /*!MACRO_PREDEF*/ +#endif /*ROUTER_IPLOOKUP*/ /* End of routers/iplookup.c */ diff --git a/src/src/routers/manualroute.c b/src/src/routers/manualroute.c index 160c866b9..d07ea3490 100644 --- a/src/src/routers/manualroute.c +++ b/src/src/routers/manualroute.c @@ -2,13 +2,15 @@ * 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 */ #include "../exim.h" + +#ifdef ROUTER_MANUALROUTE #include "rf_functions.h" #include "manualroute.h" @@ -118,8 +120,8 @@ if (ob->hai_code < 0) /* One of route_list or route_data must be specified */ -if ((ob->route_list == NULL && ob->route_data == NULL) || - (ob->route_list != NULL && ob->route_data != NULL)) +if ( !ob->route_list && !ob->route_data + || ob->route_list && ob->route_data) log_write(0, LOG_PANIC_DIE|LOG_CONFIG_FOR, "%s router:\n " "route_list or route_data (but not both) must be specified", rblock->name); @@ -154,17 +156,17 @@ static BOOL parse_route_item(const uschar *s, const uschar **domain, const uschar **hostlist, const uschar **options) { -while (*s != 0 && isspace(*s)) s++; +Uskip_whitespace(&s); if (domain) { if (!*s) return FALSE; /* missing data */ *domain = string_dequote(&s); - while (*s && isspace(*s)) s++; + Uskip_whitespace(&s); } *hostlist = string_dequote(&s); -while (*s && isspace(*s)) s++; +Uskip_whitespace(&s); *options = s; return TRUE; } @@ -291,6 +293,7 @@ string, decline. */ else { + GET_OPTION("route_data"); if (!(route_item = rf_expand_data(addr, ob->route_data, &rc))) return rc; (void) parse_route_item(route_item, NULL, &hostlist, &options); @@ -330,8 +333,9 @@ lookup_type = LK_DEFAULT; while (*options) { unsigned n; - const uschar *s = options; - while (*options != 0 && !isspace(*options)) options++; + const uschar * s = options; + + Uskip_nonwhite(&options); n = options-s; if (Ustrncmp(s, "randomize", n) == 0) randomize = TRUE; @@ -365,7 +369,7 @@ while (*options) if (*options) { options++; - while (*options != 0 && isspace(*options)) options++; + Uskip_whitespace(&options); } } @@ -487,5 +491,6 @@ addr->transport = transport; return OK; } -#endif /*!MACRO_PREDEF*/ +#endif /*!MACRO_PREDEF*/ +#endif /*ROUTER_MANUALROUTE*/ /* End of routers/manualroute.c */ diff --git a/src/src/routers/queryprogram.c b/src/src/routers/queryprogram.c index ae33682e2..267a8ec5f 100644 --- a/src/src/routers/queryprogram.c +++ b/src/src/routers/queryprogram.c @@ -2,12 +2,14 @@ * 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 */ #include "../exim.h" + +#ifdef ROUTER_QUERYPROGRAM /* Remainder of file */ #include "rf_functions.h" #include "queryprogram.h" @@ -287,6 +289,7 @@ if (curr_uid != root_uid && (uid != curr_uid || gid != curr_gid)) /* Set up the command to run */ +GET_OPTION("command"); if (!transport_set_up_command(&argvptr, /* anchor for arg list */ ob->command, /* raw command */ TSUC_EXPAND_ARGS, /* arguments expanded but must not be tainted */ @@ -360,10 +363,10 @@ buffer[len] = 0; DEBUG(D_route) debug_printf("command wrote: %s\n", buffer); rword = buffer; -while (isspace(*rword)) rword++; +Uskip_whitespace(&rword); rdata = rword; -while (*rdata && !isspace(*rdata)) rdata++; -if (*rdata) *rdata++ = 0; +Uskip_nonwhite(&rdata); +if (*rdata) *rdata++ = '\0'; /* The word must be a known yield name. If it is "REDIRECT", the rest of the line is redirection data, as for a .forward file. It may not contain filter @@ -534,5 +537,6 @@ addr->prop = addr_prop; return rf_queue_add(addr, addr_local, addr_remote, rblock, pw) ? OK : DEFER; } -#endif /*!MACRO_PREDEF*/ +#endif /*!MACRO_PREDEF*/ +#endif /*ROUTER_QUERYPROGRAM*/ /* End of routers/queryprogram.c */ diff --git a/src/src/routers/redirect.c b/src/src/routers/redirect.c index 6a17c2f8d..e1ee8bc33 100644 --- a/src/src/routers/redirect.c +++ b/src/src/routers/redirect.c @@ -2,13 +2,15 @@ * 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 */ #include "../exim.h" + +#ifdef ROUTER_REDIRECT /* Remainder of file */ #include "rf_functions.h" #include "redirect.h" @@ -306,9 +308,8 @@ redirect_router_options_block *ob = while (generated) { - address_item *parent; - address_item *next = generated; - uschar *errors_address = next->prop.errors_address; + address_item * next = generated, * parent; + const uschar * errors_address = next->prop.errors_address; generated = next->next; next->parent = addr; @@ -371,12 +372,11 @@ while (generated) in \N...\N to avoid expansion later. In Cygwin, home directories can contain $ characters. */ - if (rblock->home_directory != NULL) + if (rblock->home_directory) next->home_dir = rblock->home_directory; else if (rblock->check_local_user) next->home_dir = string_sprintf("\\N%s\\N", pw->pw_dir); - else if (rblock->router_home_directory != NULL && - testflag(addr, af_home_expanded)) + else if (rblock->router_home_directory && testflag(addr, af_home_expanded)) { next->home_dir = deliver_home; setflag(next, af_home_expanded); @@ -396,6 +396,7 @@ while (generated) if (next->address[0] == '|') { address_pipe = next->address; + GET_OPTION("pipe_transport"); if (rf_get_transport(ob->pipe_transport_name, &ob->pipe_transport, next, rblock->name, US"pipe_transport")) next->transport = ob->pipe_transport; @@ -403,6 +404,7 @@ while (generated) } else if (next->address[0] == '>') { + GET_OPTION("reply_transport"); if (rf_get_transport(ob->reply_transport_name, &ob->reply_transport, next, rblock->name, US"reply_transport")) next->transport = ob->reply_transport; @@ -413,15 +415,19 @@ while (generated) address_file = next->address; if (next->address[len-1] == '/') { + GET_OPTION("directory_transport"); if (rf_get_transport(ob->directory_transport_name, &(ob->directory_transport), next, rblock->name, US"directory_transport")) next->transport = ob->directory_transport; } else + { + GET_OPTION("file_transport"); if (rf_get_transport(ob->file_transport_name, &ob->file_transport, next, rblock->name, US"file_transport")) next->transport = ob->file_transport; + } address_file = NULL; } @@ -567,11 +573,15 @@ address. Otherwise, if a local qualify_domain is provided, set that up. */ if (ob->qualify_preserve_domain) qualify_domain_recipient = addr->domain; -else if (ob->qualify_domain) +else { - uschar *new_qdr = rf_expand_data(addr, ob->qualify_domain, &xrc); - if (!new_qdr) return xrc; - qualify_domain_recipient = new_qdr; + GET_OPTION("qualify_domain"); + if (ob->qualify_domain) + { + uschar *new_qdr = rf_expand_data(addr, ob->qualify_domain, &xrc); + if (!new_qdr) return xrc; + qualify_domain_recipient = new_qdr; + } } redirect.owners = ob->owners; @@ -721,7 +731,7 @@ if (eblock != NULL) ob->syntax_errors_text)) /* Custom message */ return DEFER; - if (filtertype != FILTER_FORWARD || generated == NULL) + if (filtertype != FILTER_FORWARD || !generated) { addr->message = US"syntax error in redirection data"; return DECLINE; @@ -734,7 +744,7 @@ calling sort_errors_and_headers() in case this router declines - that function may modify the errors_address field in the current address, and we don't want to do that for a decline. */ -if (generated != NULL) +if (generated) { if ((xrc = sort_errors_and_headers(rblock, addr, verify, &addr_prop)) != OK) return xrc; @@ -799,4 +809,5 @@ return yield; } #endif /*!MACRO_PREDEF*/ +#endif /*ROUTER_REDIRECT*/ /* End of routers/redirect.c */ diff --git a/src/src/routers/rf_expand_data.c b/src/src/routers/rf_expand_data.c index 9892567f0..a3074f807 100644 --- a/src/src/routers/rf_expand_data.c +++ b/src/src/routers/rf_expand_data.c @@ -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 */ @@ -31,7 +32,7 @@ uschar * rf_expand_data(address_item *addr, uschar *s, int *prc) { uschar *yield = expand_string(s); -if (yield != NULL) return yield; +if (yield) return yield; if (f.expand_string_forcedfail) { DEBUG(D_route) debug_printf("forced failure for expansion of \"%s\"\n", s); diff --git a/src/src/routers/rf_functions.h b/src/src/routers/rf_functions.h index 91ccfb132..597745f96 100644 --- a/src/src/routers/rf_functions.h +++ b/src/src/routers/rf_functions.h @@ -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 */ @@ -15,7 +16,7 @@ extern void rf_add_generated(router_instance *, address_item **, extern void rf_change_domain(address_item *, const uschar *, BOOL, address_item **); extern uschar *rf_expand_data(address_item *, uschar *, int *); extern int rf_get_errors_address(address_item *, router_instance *, - int, uschar **); + int, const uschar **); extern int rf_get_munge_headers(address_item *, router_instance *, header_line **, uschar **); extern BOOL rf_get_transport(uschar *, transport_instance **, address_item *, diff --git a/src/src/routers/rf_get_errors_address.c b/src/src/routers/rf_get_errors_address.c index f70bdf25e..6f8f7c7c3 100644 --- a/src/src/routers/rf_get_errors_address.c +++ b/src/src/routers/rf_get_errors_address.c @@ -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 */ @@ -35,17 +35,16 @@ Returns: OK if no problem */ int -rf_get_errors_address(address_item *addr, router_instance *rblock, - int verify, uschar **errors_to) +rf_get_errors_address(address_item * addr, router_instance * rblock, + int verify, const uschar ** errors_to) { -uschar *s; +uschar * s; *errors_to = addr->prop.errors_address; -if (rblock->errors_to == NULL) return OK; +if (!rblock->errors_to) return OK; -s = expand_string(rblock->errors_to); - -if (s == NULL) +GET_OPTION("errors_to"); +if (!(s = expand_string(rblock->errors_to))) { if (f.expand_string_forcedfail) { @@ -60,7 +59,7 @@ if (s == NULL) /* If the errors_to address is empty, it means "ignore errors" */ -if (*s == 0) +if (!*s) { addr->prop.ignore_error = TRUE; /* For locally detected errors */ *errors_to = US""; /* Return path for SMTP */ @@ -84,17 +83,14 @@ if (verify != v_none) else { BOOL save_address_test_mode = f.address_test_mode; - int save1 = 0; + const uschar * save_sender = sender_address; int i; const uschar ***p; const uschar *address_expansions_save[ADDRESS_EXPANSIONS_COUNT]; address_item *snew = deliver_make_addr(s, FALSE); if (sender_address) - { - save1 = sender_address[0]; - sender_address[0] = 0; - } + sender_address = US""; for (i = 0, p = address_expansions; *p;) address_expansions_save[i++] = **p++; @@ -124,7 +120,7 @@ else for (i = 0, p = address_expansions; *p; ) **p++ = address_expansions_save[i++]; - if (sender_address) sender_address[0] = save1; + sender_address = save_sender; } return OK; diff --git a/src/src/routers/rf_get_transport.c b/src/src/routers/rf_get_transport.c index d54e3c296..e6acca1b8 100644 --- a/src/src/routers/rf_get_transport.c +++ b/src/src/routers/rf_get_transport.c @@ -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 */ @@ -47,6 +47,7 @@ rf_get_transport(uschar *tpname, transport_instance **tpptr, address_item *addr, uschar *ss; BOOL expandable; +GET_OPTION("transport"); if (!tpname) { if (!require_name) return TRUE; @@ -57,7 +58,7 @@ if (!tpname) } expandable = Ustrchr(tpname, '$') != NULL; -if (*tpptr != NULL && !expandable) return TRUE; +if (*tpptr && !expandable) return TRUE; if (expandable) { diff --git a/src/src/routers/rf_self_action.c b/src/src/routers/rf_self_action.c index e5da4cb91..d6542583e 100644 --- a/src/src/routers/rf_self_action.c +++ b/src/src/routers/rf_self_action.c @@ -2,6 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ +/* Copyright (c) The Exim Maintainers 2023 */ /* 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 */ diff --git a/src/src/search.c b/src/src/search.c index b00bc9ab0..6c28b390e 100644 --- a/src/src/search.c +++ b/src/src/search.c @@ -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 */ @@ -247,7 +247,7 @@ if (mac_islookup(search_type, lookup_absfilequery)) if (*query == '/') { uschar * s = query; - while (*query && !isspace(*query)) query++; + Uskip_nonwhite(&query); *fnamep = string_copyn(s, query - s); Uskip_whitespace(&query); } @@ -590,35 +590,48 @@ else is either untainted or properly quoted for the lookup type. XXX Should we this move into lf_sqlperform() ? The server-taint check is there. + Also it already knows about looking for a "servers" spec in the query string. + Passing search_type down that far is an issue. */ if ( !filename && lookup_list[search_type]->quote && is_tainted(keystring) && !is_quoted_like(keystring, search_type)) { - uschar * s = acl_current_verb(); - if (!s) s = authenticator_current_name(); /* must be before transport */ - if (!s) s = transport_current_name(); /* must be before router */ - if (!s) s = router_current_name(); /* GCC ?: would be good, but not in clang */ - if (!s) s = US""; + const uschar * ks = keystring; + uschar * loc = acl_current_verb(); + if (!loc) loc = authenticator_current_name(); /* must be before transport */ + if (!loc) loc = transport_current_name(); /* must be before router */ + if (!loc) loc = router_current_name(); /* GCC ?: would be good, but not in clang */ + if (!loc) loc = US""; + + if (Ustrncmp(ks, "servers", 7) == 0) /* Avoid logging server/password */ + if ((ks = Ustrchr(keystring, ';'))) + while (isspace(*++ks)) + ; + else + ks = US""; + #ifdef enforce_quote_protection_notyet search_error_message = string_sprintf( "tainted search query is not properly quoted%s: %s%s", - s, keystring); + loc, ks); f.search_find_defer = TRUE; + goto out; #else - { - int q = quoter_for_address(keystring); - /* If we're called from a transport, no privs to open the paniclog; - the logging punts to using stderr - and that seems to stop the debug - stream. */ - log_write(0, - transport_name ? LOG_MAIN : LOG_MAIN|LOG_PANIC, - "tainted search query is not properly quoted%s: %s", s, keystring); - - DEBUG(D_lookup) debug_printf_indent("search_type %d (%s) quoting %d (%s)\n", + /* If we're called from a transport, no privs to open the paniclog; + the logging punts to using stderr - and that seems to stop the debug + stream. */ + log_write(0, + transport_name ? LOG_MAIN : LOG_MAIN|LOG_PANIC, + "tainted search query is not properly quoted%s: %s", loc, ks); + + DEBUG(D_lookup) + { + int q = quoter_for_address(ks); + debug_printf_indent("search_type %d (%s) quoting %d (%s)\n", search_type, lookup_list[search_type]->name, q, is_real_quoter(q) ? lookup_list[q]->name : US"none"); - } + } #endif } @@ -669,10 +682,11 @@ pointer to NULL here, because we cannot release the store at this stage. */ } } +out: DEBUG(D_lookup) { if (data) - debug_printf_indent("lookup yielded: %s\n", data); + debug_printf_indent("lookup yielded: %W\n", data); else if (f.search_find_defer) debug_printf_indent("lookup deferred: %s\n", search_error_message); else debug_printf_indent("lookup failed\n"); @@ -966,9 +980,15 @@ than the result. Return a de-tainted version of the key on the grounds that it have been validated by the lookup. */ if (yield && ret_key) + { yield = string_copy_taint(keystring, GET_UNTAINTED); + DEBUG(D_lookup) + debug_printf_indent("lookup yield replace by key: %s\n", yield); + } return yield; } /* End of search.c */ +/* vi: aw ai sw=2 +*/ diff --git a/src/src/sieve.c b/src/src/sieve.c index dc9010936..798dac827 100644 --- a/src/src/sieve.c +++ b/src/src/sieve.c @@ -3,7 +3,7 @@ *************************************************/ /* - * Copyright (c) The Exim Maintainers 2016 - 2022 + * Copyright (c) The Exim Maintainers 2016 - 2023 * Copyright (c) Michael Haardt 2003 - 2015 * See the file NOTICE for conditions of use and distribution. * SPDX-License-Identifier: GPL-2.0-or-later diff --git a/src/src/smtp_in.c b/src/src/smtp_in.c index ffc7779f8..c52d3f4d6 100644 --- a/src/src/smtp_in.c +++ b/src/src/smtp_in.c @@ -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 */ @@ -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 @@ -1227,7 +1237,7 @@ for (smtp_cmd_list * p = cmd_list; p < cmd_list + nelem(cmd_list); p++) follow the sender address. */ smtp_cmd_argument = smtp_cmd_buffer + p->len; - while (isspace(*smtp_cmd_argument)) smtp_cmd_argument++; + Uskip_whitespace(&smtp_cmd_argument); Ustrcpy(smtp_data_buffer, smtp_cmd_argument); smtp_cmd_data = smtp_data_buffer; @@ -1352,7 +1362,7 @@ if (host_checking) g = string_cat(g, hostname); else if (f.sender_host_unknown || f.sender_host_notsocket) - g = string_cat(g, sender_ident); + g = string_cat(g, sender_ident ? sender_ident : US"NULL"); else if (f.is_inetd) g = string_append(g, 2, hostname, US" (via inetd)"); @@ -1876,10 +1886,11 @@ while (done <= 0) /* Check maximum number allowed */ - if (recipients_max > 0 && recipients_count + 1 > recipients_max) + if ( recipients_max_expanded > 0 + && recipients_count + 1 > recipients_max_expanded) /* The function moan_smtp_batch() does not return. */ moan_smtp_batch(smtp_cmd_buffer, "%s too many recipients", - recipients_max_reject? "552": "452"); + recipients_max_reject ? "552": "452"); /* Apply SMTP rewrite, then extract address. Don't allow "<>" as a recipient address */ @@ -1945,6 +1956,9 @@ while (done <= 0) case HELP_CMD: case NOOP_CMD: case ETRN_CMD: +#ifndef DISABLE_WELLKNOWN + case WELLKNOWN_CMD: +#endif bsmtp_transaction_linecount = receive_linecount; break; @@ -2051,16 +2065,22 @@ else DEBUG(D_receive) static void log_connect_tls_drop(const uschar * what, const uschar * log_msg) { -gstring * g = s_tlslog(NULL); -uschar * tls = string_from_gstring(g); - -log_write(L_connection_reject, - log_reject_target, "%s%s%s dropped by %s%s%s", - LOGGING(dnssec) && sender_host_dnssec ? US" DS" : US"", - host_and_ident(TRUE), - tls ? tls : US"", - what, - log_msg ? US": " : US"", 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"", + host_and_ident(TRUE), + tls ? tls : US"", + what, + log_msg ? US": " : US"", log_msg); + } } @@ -2168,6 +2188,7 @@ lwr_receive_ungetc = NULL; /* Set up the message size limit; this may be host-specific */ +GET_OPTION("message_size_limit"); thismessage_size_limit = expand_string_integer(message_size_limit, TRUE); if (expand_string_message) { @@ -2537,11 +2558,16 @@ if (!f.sender_host_unknown) fl.helo_accept_junk = verify_check_host(&helo_accept_junk_hosts) == OK; } +/* Expand recipients_max, if needed */ + { + uschar * rme = expand_string(recipients_max); + recipients_max_expanded = atoi(CCS rme); + } /* For batch SMTP input we are now done. */ if (smtp_batched_input) return TRUE; -#if defined(SUPPORT_PROXY) || defined(SUPPORT_SOCKS) || defined(EXPERIMETAL_XCLIENT) +#if defined(SUPPORT_PROXY) || defined(SUPPORT_SOCKS) || defined(EXPERIMENTAL_XCLIENT) proxy_session = FALSE; #endif @@ -2560,6 +2586,7 @@ if (proxy_protocol_host()) /* Run the connect ACL if it exists */ user_msg = NULL; +GET_OPTION("acl_smtp_connect"); if (acl_smtp_connect) { int rc; @@ -2606,16 +2633,20 @@ if (user_msg) esclen = codelen - 4; } } -else if (!(s = expand_string(smtp_banner))) +else { - log_write(0, f.expand_string_forcedfail ? LOG_MAIN : LOG_MAIN|LOG_PANIC_DIE, - "Expansion of \"%s\" (smtp_banner) failed: %s", - smtp_banner, expand_string_message); - /* for force-fail */ -#ifndef DISABLE_TLS - if (tls_in.on_connect) tls_close(NULL, TLS_SHUTDOWN_WAIT); -#endif - return FALSE; + GET_OPTION("smtp_banner"); + if (!(s = expand_string(smtp_banner))) + { + log_write(0, f.expand_string_forcedfail ? LOG_MAIN : LOG_MAIN|LOG_PANIC_DIE, + "Expansion of \"%s\" (smtp_banner) failed: %s", + smtp_banner, expand_string_message); + /* for force-fail */ + #ifndef DISABLE_TLS + if (tls_in.on_connect) tls_close(NULL, TLS_SHUTDOWN_WAIT); + #endif + return FALSE; + } } /* Remove any terminating newlines; might as well remove trailing space too */ @@ -2814,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; @@ -2834,7 +2863,6 @@ for (;;) msg = nl + 1; Uskip_whitespace(&msg); } - } } @@ -2953,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 @@ -2976,9 +3005,9 @@ switch (where) if (where == ACL_WHERE_AUTH) /* avoid logging auth creds */ { - uschar * s; - for (s = smtp_cmd_data; *s && !isspace(*s); ) s++; - lim = s - smtp_cmd_data; /* atop after method */ + uschar * s = smtp_cmd_data; + Uskip_nonwhite(&s); + lim = s - smtp_cmd_data; /* stop after method */ } what = string_sprintf("%s %.*s", acl_wherenames[where], lim, place); } @@ -3085,7 +3114,7 @@ else the connection is not forcibly to be dropped, return 0. Otherwise, log why it is closing if required and return 2. */ -if (log_reject_target != 0) +if (log_reject_target) { #ifndef DISABLE_TLS gstring * g = s_tlslog(NULL); @@ -3176,6 +3205,7 @@ fl.smtp_exit_function_called = TRUE; /* Call the not-QUIT ACL, if there is one, unless no reason is given. */ +GET_OPTION("acl_smtp_notquit"); if (acl_smtp_notquit && reason) { smtp_notquit_reason = reason; @@ -3356,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); @@ -3512,6 +3542,7 @@ smtp_quit_handler(uschar ** user_msgp, uschar ** log_msgp) HAD(SCH_QUIT); f.smtp_in_quit = TRUE; incomplete_transaction_log(US"QUIT"); +GET_OPTION("acl_smtp_quit"); if ( acl_smtp_quit && acl_check(ACL_WHERE_QUIT, NULL, acl_smtp_quit, user_msgp, log_msgp) == ERROR) @@ -3561,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) { @@ -3666,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; @@ -3685,6 +3745,7 @@ while (done <= 0) for (auth_instance * au = auths; au; au = au->next) if (strcmpic(US"tls", au->driver_name) == 0) { + GET_OPTION("acl_smtp_auth"); if ( acl_smtp_auth && (rc = acl_check(ACL_WHERE_AUTH, NULL, acl_smtp_auth, &user_msg, &log_msg)) != OK @@ -3763,6 +3824,7 @@ while (done <= 0) /* Check the ACL */ + GET_OPTION("acl_smtp_auth"); if ( acl_smtp_auth && (rc = acl_check(ACL_WHERE_AUTH, NULL, acl_smtp_auth, &user_msg, &log_msg)) != OK @@ -3788,8 +3850,8 @@ while (done <= 0) if (*smtp_cmd_data) { - *smtp_cmd_data++ = 0; - while (isspace(*smtp_cmd_data)) smtp_cmd_data++; + *smtp_cmd_data++ = '\0'; + Uskip_whitespace(&smtp_cmd_data); } /* Search for an authentication mechanism which is configured for use @@ -3900,10 +3962,10 @@ while (done <= 0) if (!f.sender_host_unknown) { BOOL old_helo_verified = f.helo_verified; - uschar *p = smtp_cmd_data; + uschar * p = smtp_cmd_data; - while (*p != 0 && !isspace(*p)) { *p = tolower(*p); p++; } - *p = 0; + while (*p && !isspace(*p)) { *p = tolower(*p); p++; } + *p = '\0'; /* Force a reverse lookup if HELO quoted something in helo_lookup_domains because otherwise the log can be confusing. */ @@ -3957,6 +4019,7 @@ while (done <= 0) /* Apply an ACL check if one is defined; afterwards, recheck synchronization in case the client started sending in a delay. */ + GET_OPTION("acl_smtp_helo"); if (acl_smtp_helo) if ((rc = acl_check(ACL_WHERE_HELO, NULL, acl_smtp_helo, &user_msg, &log_msg)) != OK) @@ -4051,15 +4114,15 @@ while (done <= 0) g = string_catn(g, US"-SIZE\r\n", 7); } -#ifdef EXPERIMENTAL_ESMTP_LIMITS - if ( (smtp_mailcmd_max > 0 || recipients_max) +#ifndef DISABLE_ESMTP_LIMITS + if ( (smtp_mailcmd_max > 0 || recipients_max_expanded > 0) && verify_check_host(&limits_advertise_hosts) == OK) { g = string_fmt_append(g, "%.3s-LIMITS", smtp_code); if (smtp_mailcmd_max > 0) g = string_fmt_append(g, " MAILMAX=%d", smtp_mailcmd_max); - if (recipients_max) - g = string_fmt_append(g, " RCPTMAX=%d", recipients_max); + if (recipients_max_expanded > 0) + g = string_fmt_append(g, " RCPTMAX=%d", recipients_max_expanded); g = string_catn(g, US"\r\n", 2); } #endif @@ -4088,16 +4151,19 @@ while (done <= 0) /* Advertise ETRN/VRFY/EXPN if there's are ACL checking whether a host is permitted to issue them; a check is made when any host actually tries. */ + GET_OPTION("acl_smtp_etrn"); if (acl_smtp_etrn) { g = string_catn(g, smtp_code, 3); g = string_catn(g, US"-ETRN\r\n", 7); } + GET_OPTION("acl_smtp_vrfy"); if (acl_smtp_vrfy) { g = string_catn(g, smtp_code, 3); g = string_catn(g, US"-VRFY\r\n", 7); } + GET_OPTION("acl_smtp_expn"); if (acl_smtp_expn) { g = string_catn(g, smtp_code, 3); @@ -4187,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) { @@ -4226,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. */ @@ -4273,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: { @@ -4326,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) @@ -4493,6 +4575,7 @@ while (done <= 0) US"invalid data for AUTH"); goto COMMAND_LOOP; } + GET_OPTION("acl_smtp_mailauth"); if (!acl_smtp_mailauth) { ignore_msg = US"client not authenticated"; @@ -4689,6 +4772,7 @@ while (done <= 0) when pipelining is not advertised, do another sync check in case the ACL delayed and the client started sending in the meantime. */ + GET_OPTION("acl_smtp_mail"); if (acl_smtp_mail) { rc = acl_check(ACL_WHERE_MAIL, NULL, acl_smtp_mail, &user_msg, &log_msg); @@ -4897,7 +4981,8 @@ while (done <= 0) /* Check maximum allowed */ - if (rcpt_count+1 < 0 || rcpt_count > recipients_max && recipients_max > 0) + if ( rcpt_count+1 < 0 + || rcpt_count > recipients_max_expanded && recipients_max_expanded > 0) { if (recipients_max_reject) { @@ -4943,10 +5028,13 @@ while (done <= 0) if (f.recipients_discarded) rc = DISCARD; else + { + GET_OPTION("acl_smtp_rcpt"); if ( (rc = acl_check(ACL_WHERE_RCPT, recipient, acl_smtp_rcpt, &user_msg, &log_msg)) == OK && !f.smtp_in_pipelining_advertised && !check_sync()) goto SYNC_FAILURE; + } /* The ACL was happy */ @@ -5102,13 +5190,14 @@ while (done <= 0) } if (chunking_state > CHUNKING_OFFERED) - rc = OK; /* No predata ACL or go-ahead output for BDAT */ + rc = OK; /* There is no predata ACL or go-ahead output for BDAT */ else { - /* If there is an ACL, re-check the synchronization afterwards, since the - ACL may have delayed. To handle cutthrough delivery enforce a dummy call - to get the DATA command sent. */ + /* If there is a predata-ACL, re-check the synchronization afterwards, + since the ACL may have delayed. To handle cutthrough delivery enforce a + dummy call to get the DATA command sent. */ + GET_OPTION("acl_smtp_predata"); if (!acl_smtp_predata && cutthrough.cctx.sock < 0) rc = OK; else @@ -5167,6 +5256,7 @@ while (done <= 0) US"verify"))) break; + GET_OPTION("acl_smtp_vrfy"); if ((rc = acl_check(ACL_WHERE_VRFY, address, acl_smtp_vrfy, &user_msg, &log_msg)) != OK) done = smtp_handle_acl_fail(ACL_WHERE_VRFY, rc, user_msg, log_msg); @@ -5205,6 +5295,7 @@ while (done <= 0) case EXPN_CMD: HAD(SCH_EXPN); + GET_OPTION("acl_smtp_expn"); rc = acl_check(ACL_WHERE_EXPN, NULL, acl_smtp_expn, &user_msg, &log_msg); if (rc != OK) done = smtp_handle_acl_fail(ACL_WHERE_EXPN, rc, user_msg, log_msg); @@ -5234,6 +5325,7 @@ while (done <= 0) /* Apply an ACL check if one is defined */ + GET_OPTION("acl_smtp_starttls"); if ( acl_smtp_starttls && (rc = acl_check(ACL_WHERE_STARTTLS, NULL, acl_smtp_starttls, &user_msg, &log_msg)) != OK @@ -5352,6 +5444,7 @@ while (done <= 0) case QUIT_CMD: f.smtp_in_quit = TRUE; user_msg = NULL; + GET_OPTION("acl_smtp_quit"); if ( acl_smtp_quit && ((rc = acl_check(ACL_WHERE_QUIT, NULL, acl_smtp_quit, &user_msg, &log_msg)) == ERROR)) @@ -5417,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); @@ -5471,6 +5568,7 @@ while (done <= 0) log_write(L_etrn, LOG_MAIN, "ETRN %s received from %s", smtp_cmd_argument, host_and_ident(FALSE)); + GET_OPTION("acl_smtp_etrn"); if ((rc = acl_check(ACL_WHERE_ETRN, NULL, acl_smtp_etrn, &user_msg, &log_msg)) != OK) { @@ -5487,6 +5585,7 @@ while (done <= 0) since that is strictly the only kind of ETRN that can be implemented according to the RFC. */ + GET_OPTION("smtp_etrn_command"); if (smtp_etrn_command) { uschar *error; @@ -5658,7 +5757,7 @@ while (done <= 0) case TOO_MANY_NONMAIL_CMD: s = smtp_cmd_buffer; - while (*s && !isspace(*s)) s++; + Uskip_nonwhite(&s); incomplete_transaction_log(US"too many non-mail commands"); log_write(0, LOG_MAIN|LOG_REJECT, "SMTP call from %s dropped: too many " "nonmail commands (last was \"%.*s\")", host_and_ident(FALSE), diff --git a/src/src/smtp_out.c b/src/src/smtp_out.c index 7f477ed76..cfc96c13c 100644 --- a/src/src/smtp_out.c +++ b/src/src/smtp_out.c @@ -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 */ @@ -278,6 +278,7 @@ if (setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, US &on, sizeof(on))) /* Set DSCP value, if we can. For now, if we fail to set the value, we don't bomb out, just log it and continue in default traffic class. */ +GET_OPTION("dscp"); if (dscp && dscp_lookup(dscp, sc->host_af, &dscp_level, &dscp_option, &dscp_value)) { HDEBUG(D_transport|D_acl|D_v) @@ -364,6 +365,7 @@ if (!save_errno) { #ifdef TCP_FASTOPEN /* See if TCP Fast Open usable. Default is a traditional 3WHS connect */ + expand_level++; if (verify_check_given_host(CUSS &ob->hosts_try_fastopen, sc->host) == OK) { if (!early_data) @@ -379,6 +381,7 @@ if (!save_errno) } # endif } + expand_level--; #endif if (ip_connect(sock, sc->host_af, sc->host->address, sc->host->port, timeout, fastopen_blob) < 0) @@ -411,7 +414,7 @@ if (!save_errno) /* Both bind() and connect() succeeded, and any early-data */ - HDEBUG(D_transport|D_acl|D_v) debug_printf_indent(" connected\n"); + HDEBUG(D_transport|D_acl|D_v) debug_printf_indent("connected\n"); if (getsockname(sock, (struct sockaddr *)(&interface_sock), &size) == 0) sending_ip_address = host_ntoa(-1, &interface_sock, NULL, &sending_port); else @@ -495,7 +498,7 @@ HDEBUG(D_transport|D_acl|D_v) #ifdef SUPPORT_SOCKS if (ob->socks_proxy) s = string_sprintf("%svia proxy ", s); #endif - debug_printf_indent("Connecting to %s %s%s... ", sc->host->name, callout_address, s); + debug_printf_indent("Connecting to %s %s%s...\n", sc->host->name, callout_address, s); } /* Create and connect the socket */ @@ -649,7 +652,7 @@ Arguments: sx SMTP connection, contains buffer for pipelining, and socket mode buffer, write-with-more-likely, write format a format, starting with one of - of HELO, MAIL FROM, RCPT TO, DATA, ".", or QUIT. + of HELO, MAIL FROM, RCPT TO, DATA, BDAT, ".", or QUIT. If NULL, flush pipeline buffer only. ... data for the format @@ -703,13 +706,13 @@ if (format) if (outblock->authenticating) { - uschar *p = big_buffer; + uschar * p = big_buffer; if (Ustrncmp(big_buffer, "AUTH ", 5) == 0) { p += 5; - while (isspace(*p)) p++; - while (!isspace(*p)) p++; - while (isspace(*p)) p++; + Uskip_whitespace(&p); + Uskip_nonwhite(&p); + Uskip_whitespace(&p); } while (*p) *p++ = '*'; } diff --git a/src/src/spf.c b/src/src/spf.c index 3d83f07ba..9abe18fc3 100644 --- a/src/src/spf.c +++ b/src/src/spf.c @@ -3,7 +3,7 @@ *************************************************/ /* SPF support. - Copyright (c) The Exim Maintainers 2015 - 2022 + Copyright (c) The Exim Maintainers 2015 - 2024 Copyright (c) Tom Kistner 2004 - 2014 License: GPL SPDX-License-Identifier: GPL-2.0-or-later @@ -71,7 +71,6 @@ SPF_dns_rr_t srr = { .hook = NULL, /* misc information */ .source = spf_dns_server }; -int dns_rc; DEBUG(D_receive) debug_printf("SPF_dns_exim_lookup '%s'\n", domain); @@ -87,20 +86,22 @@ if (rr_type == T_SPF) return spfrr; } -switch (dns_rc = dns_lookup(dnsa, US domain, rr_type, NULL)) +switch (dns_lookup(dnsa, US domain, rr_type, NULL)) { - case DNS_SUCCEED: srr.herrno = NETDB_SUCCESS; break; case DNS_AGAIN: srr.herrno = TRY_AGAIN; break; case DNS_NOMATCH: srr.herrno = HOST_NOT_FOUND; break; case DNS_NODATA: srr.herrno = NO_DATA; break; case DNS_FAIL: default: srr.herrno = NO_RECOVERY; break; + case DNS_SUCCEED: + srr.herrno = NETDB_SUCCESS; + for (dns_record * rr = dns_next_rr(dnsa, &dnss, RESET_ANSWERS); rr; + rr = dns_next_rr(dnsa, &dnss, RESET_NEXT)) + /* Need to alloc space for all records, so no early-out */ + if (rr->type == rr_type) found++; + break; } -for (dns_record * rr = dns_next_rr(dnsa, &dnss, RESET_ANSWERS); rr; - rr = dns_next_rr(dnsa, &dnss, RESET_NEXT)) - if (rr->type == rr_type) found++; - if (found == 0) { SPF_dns_rr_dup(&spfrr, &srr); @@ -121,6 +122,7 @@ for (dns_record * rr = dns_next_rr(dnsa, &dnss, RESET_ANSWERS); rr; switch(rr_type) { case T_MX: + if (rr->size < 2) continue; s += 2; /* skip the MX precedence field */ case T_PTR: { @@ -136,6 +138,7 @@ for (dns_record * rr = dns_next_rr(dnsa, &dnss, RESET_ANSWERS); rr; gstring * g = NULL; uschar chunk_len; + if (rr->size < 1+6) continue; /* min for version str */ if (strncmpic(rr->data+1, US SPF_VER_STR, 6) != 0) { HDEBUG(D_host_lookup) debug_printf("not an spf record: %.*s\n", @@ -143,9 +146,12 @@ for (dns_record * rr = dns_next_rr(dnsa, &dnss, RESET_ANSWERS); rr; continue; } - for (int off = 0; off < rr->size; off += chunk_len) + /* require 1 byte for the chunk_len */ + for (int off = 0; off < rr->size - 1; off += chunk_len) { - if (!(chunk_len = s[off++])) break; + if ( !(chunk_len = s[off++]) + || rr->size < off + chunk_len /* ignore bogus size chunks */ + ) break; g = string_catn(g, s+off, chunk_len); } if (!g) @@ -247,10 +253,13 @@ if (!(spf_server = SPF_server_new_dns(dc, debug))) DEBUG(D_receive) debug_printf("spf: SPF_server_new() failed.\n"); return FALSE; } - /* Override the outdated explanation URL. - See https://www.mail-archive.com/mailop@mailop.org/msg08019.html - Used to work as "Please%_see%_http://www.open-spf.org/Why?id=%{S}&ip=%{C}&receiver=%{R}", - but is broken now (May 18th, 2020) */ + +/* Override the outdated explanation URL. +See https://www.mail-archive.com/mailop@mailop.org/msg08019.html +Used to work as "Please%_see%_http://www.open-spf.org/Why?id=%{S}&ip=%{C}&receiver=%{R}", +but is broken now (May 18th, 2020) */ + +GET_OPTION("spf_smtp_comment_template"); if (!(s = expand_string(spf_smtp_comment_template))) log_write(0, LOG_MAIN|LOG_PANIC_DIE, "expansion of spf_smtp_comment_template failed"); @@ -335,7 +344,8 @@ else for (int i = 0; i < SPF_response_messages(spf_response); i++) Return: OK/FAIL */ int -spf_process(const uschar **listptr, uschar *spf_envelope_sender, int action) +spf_process(const uschar ** listptr, const uschar * spf_envelope_sender, + int action) { int sep = 0; const uschar *list = *listptr; diff --git a/src/src/spf.h b/src/src/spf.h index 76c7522bd..7e9a6ca2a 100644 --- a/src/src/spf.h +++ b/src/src/spf.h @@ -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 2004 License: GPL SPDX-License-Identifier: GPL-2.0-or-later @@ -29,7 +29,7 @@ typedef struct spf_result_id { gstring * spf_lib_version_report(gstring *); BOOL spf_init(void); BOOL spf_conn_init(uschar *, uschar *); -int spf_process(const uschar **, uschar *, int); +int spf_process(const uschar **, const uschar *, int); void spf_response_debug(SPF_response_t *); #define SPF_PROCESS_NORMAL 0 diff --git a/src/src/spool_in.c b/src/src/spool_in.c index 1fcff954f..c788fd8f8 100644 --- a/src/src/spool_in.c +++ b/src/src/spool_in.c @@ -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 */ @@ -36,7 +36,7 @@ Side effect: message_subdir is set for the (possibly split) spool directory */ int -spool_open_datafile(uschar * id) +spool_open_datafile(const uschar * id) { struct stat statbuf; flock_t lock_data; @@ -456,9 +456,12 @@ n = Ustrlen(big_buffer); if (n < 3 || big_buffer[0] != '<' || big_buffer[n-2] != '>') goto SPOOL_FORMAT_ERROR; -sender_address = store_get(n-2, GET_TAINTED); -Ustrncpy(sender_address, big_buffer+1, n-3); -sender_address[n-3] = 0; + { + uschar * s = store_get(n-2, GET_TAINTED); + Ustrncpy(s, big_buffer+1, n-3); + s[n-3] = '\0'; + sender_address = s; + } where = US"time"; if (Ufgets(big_buffer, big_buffer_size, fp) == NULL) goto SPOOL_READ_ERROR; diff --git a/src/src/spool_mbox.c b/src/src/spool_mbox.c index 0a2a1d27d..fbd01c30e 100644 --- a/src/src/spool_mbox.c +++ b/src/src/spool_mbox.c @@ -2,9 +2,10 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) Tom Kistner 2003 - 2015 +/* + * Copyright (c) The Exim Maintainers 2016 - 2023 + * Copyright (c) Tom Kistner 2003 - 2015 * License: GPL - * Copyright (c) The Exim Maintainers 2016 - 2021 * SPDX-License-Identifier: GPL-2.0-or-later */ diff --git a/src/src/spool_out.c b/src/src/spool_out.c index e0650bb36..574aa167f 100644 --- a/src/src/spool_out.c +++ b/src/src/spool_out.c @@ -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 */ @@ -152,7 +152,7 @@ Returns: the size of the header texts on success; */ int -spool_write_header(uschar * id, int where, uschar ** errmsg) +spool_write_header(const uschar * id, int where, uschar ** errmsg) { int fd, size_correction; FILE * fp; @@ -444,7 +444,7 @@ start-up time. Arguments: dir base directory name - dq destiinationqueue name + dq destination queue name subdir subdirectory name id message id suffix suffix to add to id @@ -457,8 +457,8 @@ Returns: TRUE if all went well */ static BOOL -make_link(uschar * dir, uschar * dq, uschar * subdir, uschar * id, uschar * suffix, - uschar * from, uschar * to, BOOL noentok) +make_link(const uschar * dir, const uschar * dq, const uschar * subdir, const uschar * id, + const uschar * suffix, const uschar * from, const uschar * to, BOOL noentok) { uschar * fname = spool_fname(string_sprintf("%s%s", from, dir), subdir, id, suffix); uschar * tname = spool_q_fname(string_sprintf("%s%s", to, dir), dq, subdir, id, suffix); @@ -494,8 +494,8 @@ Returns: TRUE if all went well */ static BOOL -break_link(uschar * dir, uschar * subdir, uschar * id, uschar * suffix, uschar * from, - BOOL noentok) +break_link(const uschar * dir, const uschar * subdir, const uschar * id, + const uschar * suffix, const uschar * from, BOOL noentok) { uschar * fname = spool_fname(string_sprintf("%s%s", from, dir), subdir, id, suffix); if (Uunlink(fname) < 0 && (!noentok || errno != ENOENT)) @@ -528,7 +528,8 @@ Returns: TRUE if all is well */ BOOL -spool_move_message(uschar * id, uschar * subdir, uschar * from, uschar * to) +spool_move_message(const uschar * id, const uschar * subdir, + const uschar * from, const uschar * to) { uschar * dest_qname = queue_name_dest ? queue_name_dest : queue_name; diff --git a/src/src/store.c b/src/src/store.c index 9e4536eae..181e7fd67 100644 --- a/src/src/store.c +++ b/src/src/store.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) The Exim maintainers 2019 - 2022 */ +/* 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 */ @@ -1145,11 +1145,11 @@ Returns: pointer to gotten store (panic on failure) */ static void * -internal_store_malloc(size_t size, const char *func, int line) +internal_store_malloc(size_t size, const char * func, int line) { void * yield; -/* Check specifically for a possibly result of conversion from +/* Check specifically for a possible result of conversion from a negative int, to the (unsigned, wider) size_t */ if (size >= INT_MAX/2) diff --git a/src/src/string.c b/src/src/string.c index 52b1d2fb5..113c05754 100644 --- a/src/src/string.c +++ b/src/src/string.c @@ -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 */ @@ -30,123 +30,141 @@ Arguments: maskptr NULL if no mask is permitted to follow otherwise, points to an int where the offset of '/' is placed if there is no / followed by trailing digits, *maskptr is set 0 + errp NULL if no diagnostic information is required, and if the netmask + length should not be checked. Otherwise it is set pointing to a short + descriptive text. Returns: 0 if the string is not a textual representation of an IP address 4 if it is an IPv4 address 6 if it is an IPv6 address + +The legacy string_is_ip_address() function follows below. */ int -string_is_ip_address(const uschar *s, int *maskptr) +string_is_ip_addressX(const uschar * ip_addr, int * maskptr, const uschar ** errp) { -int yield = 4; +uschar * slash, * percent, * endp = NULL; +long int mask = 0; +const uschar * addr = NULL; +int af; +union { /* we do not need this, but inet_pton() needs a place for storage */ + struct in_addr sa4; + struct in6_addr sa6; +} sa; + +/* If there is a slash, but we didn't request a (optional) netmask, +we return failure, as we do if the mask isn't a pure numerical value, +or if it is negative. The actual length is checked later, once we know +the address family. */ + +if (slash = Ustrchr(ip_addr, '/')) + { + uschar * rest; -/* If an optional mask is permitted, check for it. If found, pass back the -offset. */ + if (!maskptr) + { + if (errp) *errp = US"netmask found, but not requested"; + return 0; + } -if (maskptr) - { - const uschar *ss = s + Ustrlen(s); - *maskptr = 0; - if (s != ss && isdigit(*(--ss))) + mask = Ustrtol(slash+1, &rest, 10); + if (*rest || mask < 0) { - while (ss > s && isdigit(ss[-1])) ss--; - if (ss > s && *(--ss) == '/') *maskptr = ss - s; + if (errp) *errp = US"netmask not numeric or <0"; + return 0; } + + *maskptr = slash - ip_addr; /* offset of the slash */ + endp = slash; } +else if (maskptr) + *maskptr = 0; /* no slash found */ -/* A colon anywhere in the string => IPv6 address */ +/* The interface-ID suffix (%) is optional (for IPv6). If it +exists, we check it syntactically. Later, if we know the address +family is IPv4, we might reject it. +The interface-ID is mutually exclusive with the netmask, to the +best of my knowledge. */ -if (Ustrchr(s, ':') != NULL) +if (percent = Ustrchr(ip_addr, '%')) { - BOOL had_double_colon = FALSE; - BOOL v4end = FALSE; - - yield = 6; - - /* An IPv6 address must start with hex digit or double colon. A single - colon is invalid. */ - - if (*s == ':' && *(++s) != ':') return 0; - - /* Now read up to 8 components consisting of up to 4 hex digits each. There - may be one and only one appearance of double colon, which implies any number - of binary zero bits. The number of preceding components is held in count. */ - - for (int count = 0; count < 8; count++) + if (slash) { - /* If the end of the string is reached before reading 8 components, the - address is valid provided a double colon has been read. This also applies - if we hit the / that introduces a mask or the % that introduces the - interface specifier (scope id) of a link-local address. */ - - if (*s == 0 || *s == '%' || *s == '/') return had_double_colon ? yield : 0; - - /* If a component starts with an additional colon, we have hit a double - colon. This is permitted to appear once only, and counts as at least - one component. The final component may be of this form. */ - - if (*s == ':') - { - if (had_double_colon) return 0; - had_double_colon = TRUE; - s++; - continue; - } - - /* If the remainder of the string contains a dot but no colons, we - can expect a trailing IPv4 address. This is valid if either there has - been no double-colon and this is the 7th component (with the IPv4 address - being the 7th & 8th components), OR if there has been a double-colon - and fewer than 6 components. */ - - if (Ustrchr(s, ':') == NULL && Ustrchr(s, '.') != NULL) + if (errp) *errp = US"interface-ID and netmask are mutually exclusive"; + return 0; + } + for (uschar *p = percent+1; *p; p++) + if (!isalnum(*p) && !ispunct(*p)) { - if ((!had_double_colon && count != 6) || - (had_double_colon && count > 6)) return 0; - v4end = TRUE; - yield = 6; - break; + if (errp) *errp = US"interface-ID must match [[:alnum:][:punct:]]"; + return 0; } + endp = percent; + } - /* Check for at least one and not more than 4 hex digits for this - component. */ - - if (!isxdigit(*s++)) return 0; - if (isxdigit(*s) && isxdigit(*(++s)) && isxdigit(*(++s))) s++; - - /* If the component is terminated by colon and there is more to - follow, skip over the colon. If there is no more to follow the address is - invalid. */ +/* inet_pton() can't parse netmasks and interface IDs, so work on a shortened copy +allocated on the current stack */ - if (*s == ':' && *(++s) == 0) return 0; +if (endp) + { + ptrdiff_t l = endp - ip_addr; + if (l > 255) + { + if (errp) *errp = US"rudiculous long ip address string"; + return 0; } + addr = string_copyn(ip_addr, l); + } +else + addr = ip_addr; - /* If about to handle a trailing IPv4 address, drop through. Otherwise - all is well if we are at the end of the string or at the mask or at a percent - sign, which introduces the interface specifier (scope id) of a link local - address. */ - - if (!v4end) - return (*s == 0 || *s == '%' || - (*s == '/' && maskptr != NULL && *maskptr != 0))? yield : 0; +af = Ustrchr(addr, ':') ? AF_INET6 : AF_INET; +if (!inet_pton(af, CCS addr, &sa)) + { + if (errp) *errp = af == AF_INET6 ? US"IP address string not parsable as IPv6" + : US"IP address string not parsable IPv4"; + return 0; } -/* Test for IPv4 address, which may be the tail-end of an IPv6 address. */ +/* we do not check the values of the mask here, as +this is done on the callers side (but I don't understand why), so +actually I'd like to do it here, but it breaks at least testcase 0002 */ -for (int i = 0; i < 4; i++) +switch (af) { - long n; - uschar * end; - - if (i != 0 && *s++ != '.') return 0; - n = strtol(CCS s, CSS &end, 10); - if (n > 255 || n < 0 || end <= s || end > s+3) return 0; - s = end; + case AF_INET6: + if (errp && mask > 128) + { + *errp = US"IPv6 netmask value must not be >128"; + return 0; + } + return 6; + case AF_INET: + if (percent) + { + if (errp) *errp = US"IPv4 address string must not have an interface-ID"; + return 0; + } + if (errp && mask > 32) + { + *errp = US"IPv4 netmask value must not be >32"; + return 0; + } + return 4; + default: + if (errp) *errp = US"unknown address family (should not happen)"; + return 0; } +} -return !*s || (*s == '/' && maskptr && *maskptr != 0) ? yield : 0; + +int +string_is_ip_address(const uschar * ip_addr, int * maskptr) +{ +return string_is_ip_addressX(ip_addr, maskptr, NULL); } + #endif /* COMPILE_UTILITY */ @@ -631,7 +649,7 @@ uschar * t, * yield; /* First find the end of the string */ if (*s != '\"') - while (*s && !isspace(*s)) s++; + Uskip_nonwhite(&s); else { s++; @@ -1216,13 +1234,6 @@ return g; } -gstring * -string_cat(gstring * g, const uschar * s) -{ -return string_catn(g, s, Ustrlen(s)); -} - - /************************************************* * Append strings to another string * @@ -1315,7 +1326,7 @@ Arguments: ap variable-args pointer Flags: - SVFMT_EXTEND buffer can be created or exteded as needed + SVFMT_EXTEND buffer can be created or extended as needed SVFMT_REBUFFER buffer can be recopied to tainted mem as needed SVFMT_TAINT_NOCHK do not check inputs for taint @@ -1330,7 +1341,7 @@ The return value can be NULL to signify overflow. Field width: decimal digits, or * Precision: dot, followed by decimal digits or * Length modifiers: h L l ll z -Conversion specifiers: n d o u x X p f e E g G % c s S T Y D M +Conversion specifiers: n d o u x X p f e E g G % c s S T W V Y D M Returns the possibly-new (if copy for growth or taint-handling was needed) string, not nul-terminated. @@ -1579,11 +1590,85 @@ while (*fp) case 'Y': /* gstring pointer */ { gstring * zg = va_arg(ap, gstring *); - if (zg) { s = CS zg->s; slen = zg->ptr; } + if (zg) { s = CS zg->s; slen = gstring_length(zg); } else { s = null; slen = Ustrlen(s); } goto INSERT_GSTRING; } +#ifndef COMPILE_UTILITY + case 'V': /* Maybe convert ascii-art to UTF-8 chars */ + { + gstring * zg = NULL; + s = va_arg(ap, char *); + if (IS_DEBUG(D_noutf8)) + for ( ; *s; s++) + zg = string_catn(zg, CUS (*s == 'K' ? "|" : s), 1); + else + for ( ; *s; s++) switch (*s) + { + case '\\': zg = string_catn(zg, US UTF8_UP_RIGHT, 3); break; + case '/': zg = string_catn(zg, US UTF8_DOWN_RIGHT, 3); break; + case '-': + case '_': zg = string_catn(zg, US UTF8_HORIZ, 3); break; + case '|': zg = string_catn(zg, US UTF8_VERT, 3); break; + case 'K': zg = string_catn(zg, US UTF8_VERT_RIGHT, 3); break; + case '<': zg = string_catn(zg, US UTF8_LEFT_TRIANGLE, 3); break; + case '>': zg = string_catn(zg, US UTF8_RIGHT_TRIANGLE, 3); break; + default: zg = string_catn(zg, CUS s, 1); break; + } + + if (!zg) + break; + s = CS zg->s; + slen = gstring_length(zg); + goto INSERT_GSTRING; + } + + case 'W': /* Maybe mark up ctrls, spaces & newlines */ + s = va_arg(ap, char *); + if (Ustrpbrk(s, " \n") && !IS_DEBUG(D_noutf8)) + { + gstring * zg = NULL; + int p = precision; + for ( ; *s; s++) + { + /* Take a given precision as applying to the input; expand + it for the transformed result */ + + if (p >= 0 && --p < 0) break; + switch (*s) + { + case ' ': + zg = string_catn(zg, CUS UTF8_LIGHT_SHADE, 3); + if (precision >= 0) precision += 2; + break; + case '\n': + zg = string_catn(zg, CUS UTF8_L_ARROW_HOOK "\n", 4); + if (precision >= 0) precision += 3; + break; + default: + if (*s <= ' ') + { /* base of UTF8 symbols for ASCII control chars */ + uschar ctrl_symbol[3] = {[0]=0xe2, [1]=0x90, [2]=0x80}; + ctrl_symbol[2] |= *s; + zg = string_catn(zg, ctrl_symbol, 3); + if (precision >= 0) precision += 2; + } + else + zg = string_catn(zg, CUS s, 1); + break; + } + } + if (zg) { s = CS zg->s; slen = gstring_length(zg); } + else { s = null; slen = Ustrlen(s); } + } + else + { + if (!s) s = null; + slen = Ustrlen(s); + } + goto INSERT_GSTRING; +#endif case 's': case 'S': /* Forces *lower* case */ case 'T': /* Forces *upper* case */ @@ -1592,7 +1677,7 @@ while (*fp) if (!s) s = null; slen = Ustrlen(s); - INSERT_GSTRING: /* Coome to from %Y above */ + INSERT_GSTRING: /* Come to from %Y above */ if (!(flags & SVFMT_TAINT_NOCHK) && is_incompatible(g->s, s)) if (flags & SVFMT_REBUFFER) @@ -1621,7 +1706,7 @@ while (*fp) } /* If a width is not specified and the precision is specified, set - the width to the precision, or the string length if shorted. */ + the width to the precision, or the string length if shorter. */ else if (precision >= 0) width = precision < slen ? precision : slen; @@ -1891,3 +1976,5 @@ return 0; #endif /* End of string.c */ +/* vi: aw ai sw=2 +*/ diff --git a/src/src/structs.h b/src/src/structs.h index 9d2a76ef2..3c85f6ae5 100644 --- a/src/src/structs.h +++ b/src/src/structs.h @@ -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 */ @@ -480,7 +480,7 @@ can be tried. */ typedef struct retry_item { struct retry_item *next; /* for chaining */ - uschar *key; /* string identifying host/address/message */ + const uschar *key; /* string identifying host/address/message */ int basic_errno; /* error code for this destination */ int more_errno; /* additional error information */ uschar *message; /* local error message */ @@ -526,7 +526,7 @@ typedef struct address_item_propagated { uschar *address_data; /* arbitrary data to keep with the address */ uschar *domain_data; /* from "domains" lookup */ uschar *localpart_data; /* from "local_parts" lookup */ - uschar *errors_address; /* where to send errors (NULL => sender) */ + const uschar *errors_address; /* where to send errors (NULL => sender) */ header_line *extra_headers; /* additional headers */ uschar *remove_headers; /* list of those to remove */ void *variables; /* router-vasriables */ @@ -561,15 +561,15 @@ typedef struct address_item { reply_item *reply; /* data for autoreply */ retry_item *retries; /* chain of retry information */ - uschar *address; /* address being delivered or routed */ + const uschar *address; /* address being delivered or routed */ uschar *unique; /* used for disambiguating */ - uschar *cc_local_part; /* caseful local part */ - uschar *lc_local_part; /* lowercased local part */ - uschar *local_part; /* points to cc or lc version */ - uschar *prefix; /* stripped prefix of local part */ - uschar *prefix_v; /* variable part of above */ - uschar *suffix; /* stripped suffix of local part */ - uschar *suffix_v; /* variable part of above */ + const uschar *cc_local_part; /* caseful local part */ + const uschar *lc_local_part; /* lowercased local part */ + const uschar *local_part; /* points to cc or lc version */ + const uschar *prefix; /* stripped prefix of local part */ + const uschar *prefix_v; /* variable part of above */ + const uschar *suffix; /* stripped suffix of local part */ + const uschar *suffix_v; /* variable part of above */ const uschar *domain; /* working domain (lower cased) */ uschar *address_retry_key; /* retry key including full address */ @@ -580,12 +580,15 @@ typedef struct address_item { uschar *message; /* error message */ uschar *user_message; /* error message that can be sent over SMTP or quoted in bounce message */ - uschar *onetime_parent; /* saved original parent for onetime */ + const uschar *onetime_parent; /* saved original parent for onetime */ uschar **pipe_expandn; /* numeric expansions for pipe from filter */ uschar *return_filename; /* name of return file */ uschar *self_hostname; /* after self=pass */ uschar *shadow_message; /* info about shadow transporting */ + uid_t uid; /* uid for transporting */ + gid_t gid; /* gid for transporting */ + #ifndef DISABLE_TLS const uschar *tlsver; /* version used for transport */ uschar *cipher; /* Cipher used for transport */ @@ -608,9 +611,9 @@ typedef struct address_item { int dsn_flags; /* DSN flags */ int dsn_aware; /* DSN aware flag */ - uid_t uid; /* uid for transporting */ - gid_t gid; /* gid for transporting */ - +#ifndef DISABLE_DKIM + const uschar * dkim_used; /* DKIM info, or NULL */ +#endif /* flags */ struct { BOOL af_allow_file:1; /* allow file in generated address */ @@ -964,7 +967,7 @@ typedef struct qrunner { struct qrunner * next; /* list sorted by next tick */ uschar * name; /* NULL for the default queue */ - unsigned interval; /* tick rate, seconds */ + unsigned interval; /* tick rate, seconds. Zero for a one-time run */ time_t next_tick; /* next run should, or should have, start(ed) */ unsigned run_max; /* concurrent queue runner limit */ unsigned run_count; /* current runners */ diff --git a/src/src/tls-gnu.c b/src/src/tls-gnu.c index afb59c33f..f443a6e27 100644 --- a/src/src/tls-gnu.c +++ b/src/src/tls-gnu.c @@ -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 */ /* Copyright (c) Phil Pennock 2012 */ /* See the file NOTICE for conditions of use and distribution. */ @@ -1185,6 +1185,8 @@ tls_server_servercerts_cb(gnutls_session_t session, unsigned int htype, # ifdef notdef_crashes /*XXX crashes */ return gnutls_ext_raw_parse(NULL, tls_server_servercerts_ext, msg, 0); +# else +return GNUTLS_E_SUCCESS; # endif } #endif /*SUPPORT_GNUTLS_EXT_RAW_PARSE*/ @@ -1233,7 +1235,7 @@ switch (htype) return tls_server_ticket_cb(sess, htype, when, incoming, msg); # endif default: - return 0; + return GNUTLS_E_SUCCESS; } } #endif @@ -2851,7 +2853,7 @@ static int tls_server_ticket_cb(gnutls_session_t sess, u_int htype, unsigned when, unsigned incoming, const gnutls_datum_t * msg) { -DEBUG(D_tls) debug_printf("newticket cb\n"); +DEBUG(D_tls) debug_printf("newticket cb (on server)\n"); tls_in.resumption |= RESUME_CLIENT_REQUESTED; return 0; } @@ -2888,9 +2890,12 @@ tls_server_resume_posthandshake(exim_gnutls_state_st * state) { if (gnutls_session_resumption_requested(state->session)) { - /* This tells us the client sent a full ticket. We use a + /* This tells us the client sent a full (?) ticket. We use a callback on session-ticket request, elsewhere, to tell - if a client asked for a ticket. */ + if a client asked for a ticket. + XXX As of GnuTLS 3.0.1 it seems to be returning true even for + a pure ticket-req (a zero-length Session Ticket extension + in the Client Hello, for 1.2) which mucks up our logic. */ tls_in.resumption |= RESUME_CLIENT_SUGGESTED; DEBUG(D_tls) debug_printf("client requested resumption\n"); @@ -3319,7 +3324,8 @@ tls_retrieve_session(tls_support * tlsp, gnutls_session_t session, tlsp->resumption = RESUME_SUPPORTED; if (!conn_args->have_lbserver) - { DEBUG(D_tls) debug_printf("resumption not supported on continued-connection\n"); } + { DEBUG(D_tls) debug_printf( + "resumption not supported: no LB detection done (continued-conn?)\n"); } else if (verify_check_given_host(CUSS &ob->tls_resumption_hosts, conn_args->host) == OK) { dbdata_tls_session * dt; @@ -3347,6 +3353,7 @@ else if (verify_check_given_host(CUSS &ob->tls_resumption_hosts, conn_args->host dbfn_close(dbm_file); } } +else DEBUG(D_tls) debug_printf("no resumption for this host\n"); } @@ -3374,7 +3381,7 @@ if (gnutls_session_get_flags(session) & GNUTLS_SFLAGS_SESSION_TICKET) int dlen = sizeof(dbdata_tls_session) + tkt.size; dbdata_tls_session * dt = store_get(dlen, GET_TAINTED); - DEBUG(D_tls) debug_printf("session data size %u\n", (unsigned)tkt.size); + DEBUG(D_tls) debug_printf(" session data size %u\n", (unsigned)tkt.size); memcpy(dt->session, tkt.data, tkt.size); gnutls_free(tkt.data); @@ -3385,11 +3392,15 @@ if (gnutls_session_get_flags(session) & GNUTLS_SFLAGS_SESSION_TICKET) dbfn_close(dbm_file); DEBUG(D_tls) - debug_printf("wrote session db (len %u)\n", (unsigned)dlen); + debug_printf(" wrote session db (len %u)\n", (unsigned)dlen); } } - else DEBUG(D_tls) - debug_printf("extract session data: %s\n", US gnutls_strerror(rc)); + else + { DEBUG(D_tls) + debug_printf(" extract session data: %s\n", US gnutls_strerror(rc)); + } + else DEBUG(D_tls) + debug_printf(" host not resmable; not saving ticket\n"); } } @@ -3406,7 +3417,7 @@ tls_client_ticket_cb(gnutls_session_t sess, u_int htype, unsigned when, exim_gnutls_state_st * state = gnutls_session_get_ptr(sess); tls_support * tlsp = state->tlsp; -DEBUG(D_tls) debug_printf("newticket cb\n"); +DEBUG(D_tls) debug_printf("newticket cb (on client)\n"); if (!tlsp->ticket_received) tls_save_session(tlsp, sess, state->host); diff --git a/src/src/tls-openssl.c b/src/src/tls-openssl.c index a5e782ef7..c97106fe0 100644 --- a/src/src/tls-openssl.c +++ b/src/src/tls-openssl.c @@ -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 - 2019 */ /* See the file NOTICE for conditions of use and distribution. */ /* SPDX-License-Identifier: GPL-2.0-or-later */ @@ -77,9 +77,9 @@ change this guard and punt the issue for a while longer. */ # define EXIM_HAVE_OPENSSL_KEYLOG # define EXIM_HAVE_OPENSSL_CIPHER_GET_ID # define EXIM_HAVE_SESSION_TICKET -# define EXIM_HAVE_OPESSL_TRACE -# define EXIM_HAVE_OPESSL_GET0_SERIAL -# define EXIM_HAVE_OPESSL_OCSP_RESP_GET0_CERTS +# define EXIM_HAVE_OPENSSL_TRACE +# define EXIM_HAVE_OPENSSL_GET0_SERIAL +# define EXIM_HAVE_OPENSSL_OCSP_RESP_GET0_CERTS # define EXIM_HAVE_SSL_GET0_VERIFIED_CHAIN # ifndef DISABLE_OCSP # define EXIM_HAVE_OCSP @@ -97,6 +97,9 @@ change this guard and punt the issue for a while longer. */ #if LIBRESSL_VERSION_NUMBER >= 0x3040000fL # define EXIM_HAVE_OPENSSL_CIPHER_GET_ID #endif +#if LIBRESSL_VERSION_NUMBER >= 0x3050000fL +# define EXIM_HAVE_OPENSSL_OCSP_RESP_GET0_CERTS +#endif #if !defined(LIBRESSL_VERSION_NUMBER) && (OPENSSL_VERSION_NUMBER >= 0x030000000L) # define EXIM_HAVE_EXPORT_CHNL_BNGNG @@ -1438,7 +1441,7 @@ SNI handling. Separately we might try to replace using OCSP_basic_verify() - which seems to not be a public interface into the OpenSSL library (there's no manual entry) - -(in 3.0.0 + is is public) +(in 3.0.0 + it is public) But what with? We also use OCSP_basic_verify in the client stapling callback. And there we NEED it; we must verify that status... unless the library does it for us anyway? */ @@ -1756,7 +1759,7 @@ level. */ DEBUG(D_tls) { SSL_CTX_set_info_callback(ctx, info_callback); -#if defined(EXIM_HAVE_OPESSL_TRACE) && !defined(OPENSSL_NO_SSL_TRACE) +#if defined(EXIM_HAVE_OPENSSL_TRACE) && !defined(OPENSSL_NO_SSL_TRACE) /* this needs a debug build of OpenSSL */ SSL_CTX_set_msg_callback(ctx, SSL_trace); #endif @@ -1996,16 +1999,6 @@ SSL_CTX_free(ob->tls_preload.lib_ctx); ob->tls_preload = null_tls_preload; } -#else - -static void -tls_server_creds_invalidate(void) -{ return; } - -static void -tls_client_creds_invalidate(transport_instance * t) -{ return; } - #endif /*EXIM_HAVE_INOTIFY*/ @@ -2442,7 +2435,7 @@ tls_in.ocsp = OCSP_NOT_RESP; if (!olist) return SSL_TLSEXT_ERR_NOACK; -#ifdef EXIM_HAVE_OPESSL_GET0_SERIAL +#ifdef EXIM_HAVE_OPENSSL_GET0_SERIAL { const X509 * cert_sent = SSL_get_certificate(s); const ASN1_INTEGER * cert_serial = X509_get0_serialNumber(cert_sent); @@ -2605,7 +2598,7 @@ if (!(bs = OCSP_response_get1_basic(rsp))) asking for certificate-status under DANE, so this callback won't run for that combination. It still will for non-DANE. */ -#ifdef EXIM_HAVE_OPENSSL_OCSP_RESP_GET0_SIGNER +#if defined(EXIM_HAVE_OPENSSL_OCSP_RESP_GET0_SIGNER) && defined(SUPPORT_DANE) X509 * signer; if ( tls_out.dane_verified @@ -2646,7 +2639,7 @@ if (!(bs = OCSP_response_get1_basic(rsp))) debug_printf("certs contained in basicresp:\n"); x509_stack_dump_cert_s_names( -#ifdef EXIM_HAVE_OPESSL_OCSP_RESP_GET0_CERTS +#ifdef EXIM_HAVE_OPENSSL_OCSP_RESP_GET0_CERTS OCSP_resp_get0_certs(bs) #else bs->certs @@ -5167,8 +5160,7 @@ if (!expand_check(option_spec, US"openssl_options", &exp, &end)) for (uschar * s = exp; *s; /**/) { - while (isspace(*s)) ++s; - if (*s == '\0') + if (!Uskip_whitespace(&s)) break; if (*s != '+' && *s != '-') { @@ -5177,7 +5169,8 @@ for (uschar * s = exp; *s; /**/) return FALSE; } adding = *s++ == '+'; - for (end = s; *end && !isspace(*end); ) end++; + end = s; + Uskip_nonwhite(&end); item_parsed = tls_openssl_one_option_parse(string_copyn(s, end-s), &item); if (!item_parsed) { diff --git a/src/src/tls.c b/src/src/tls.c index 8f4344c6c..a1ae1abd1 100644 --- a/src/src/tls.c +++ b/src/src/tls.c @@ -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 */ @@ -40,13 +40,16 @@ functions from the OpenSSL or GNU TLS libraries. */ static void tls_per_lib_daemon_init(void); static void tls_per_lib_daemon_tick(void); static unsigned tls_server_creds_init(void); -static void tls_server_creds_invalidate(void); static void tls_client_creds_init(transport_instance *, BOOL); -static void tls_client_creds_invalidate(transport_instance *); static void tls_daemon_creds_reload(void); static BOOL opt_set_and_noexpand(const uschar *); static BOOL opt_unset_or_noexpand(const uschar *); +#if defined(EXIM_HAVE_INOTIFY) || defined(EXIM_HAVE_KEVENT) +static void tls_server_creds_invalidate(void); +static void tls_client_creds_invalidate(transport_instance *); +#endif + /* This module is compiled only when it is specifically requested in the @@ -105,7 +108,10 @@ expand_check(const uschar * s, const uschar * name, uschar ** result, uschar ** errstr) { if (!s) + { + f.expand_string_forcedfail = FALSE; *result = NULL; + } else if ( !(*result = expand_string(US s)) /* need to clean up const more */ && !f.expand_string_forcedfail ) @@ -321,7 +327,9 @@ tls_client_creds_reload(BOOL watch) for(transport_instance * t = transports; t; t = t->next) if (Ustrcmp(t->driver_name, "smtp") == 0) { +#if defined(EXIM_HAVE_INOTIFY) || defined(EXIM_HAVE_KEVENT) tls_client_creds_invalidate(t); +#endif tls_client_creds_init(t, watch); } } @@ -357,7 +365,9 @@ unsigned lifetime; tls_watch_invalidate(); #endif +#if defined(EXIM_HAVE_INOTIFY) || defined(EXIM_HAVE_KEVENT) tls_server_creds_invalidate(); +#endif /* _expire is for a time-limited selfsign server cert */ tls_creds_expire = (lifetime = tls_server_creds_init()) diff --git a/src/src/tlscert-openssl.c b/src/src/tlscert-openssl.c index 32177ea81..343f3d3fc 100644 --- a/src/src/tlscert-openssl.c +++ b/src/src/tlscert-openssl.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) The Exim Maintainers 2022 */ +/* Copyright (c) The Exim Maintainers 2022 - 2023 */ /* Copyright (c) Jeremy Harris 2014 - 2019 */ /* SPDX-License-Identifier: GPL-2.0-or-later */ diff --git a/src/src/transport-filter.src b/src/src/transport-filter.src index ba86d8f46..1343f89d4 100644 --- a/src/src/transport-filter.src +++ b/src/src/transport-filter.src @@ -1,5 +1,10 @@ #! PERL_COMMAND +# Copyright (c) The Exim Maintainers 2023 +# See the file NOTICE for conditions of use and distribution. +# SPDX-License-Identifier: GPL-2.0-or-later + + # This is a Perl script to demonstrate the possibilities of on-the-fly # delivery filtering in Exim. It is presented with a message on its standard # input, and must copy it to the standard output, transforming it as it diff --git a/src/src/transport.c b/src/src/transport.c index 1e8bb4aa7..3245b2cae 100644 --- a/src/src/transport.c +++ b/src/src/transport.c @@ -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 */ @@ -434,10 +434,10 @@ Returns: TRUE on success, FALSE on failure (with errno preserved) */ BOOL -write_chunk(transport_ctx * tctx, uschar *chunk, int len) +write_chunk(transport_ctx * tctx, const uschar * chunk, int len) { -uschar *start = chunk; -uschar *end = chunk + len; +const uschar * start = chunk; +const uschar * end = chunk + len; int mlen = DELIVER_OUT_BUFFER_SIZE - nl_escape_length - 2; /* The assumption is made that the check string will never stretch over move @@ -474,7 +474,7 @@ if (nl_partial_match >= 0) for possible escaping. The code for the non-NL route should be as fast as possible. */ -for (uschar * ptr = start; ptr < end; ptr++) +for (const uschar * ptr = start; ptr < end; ptr++) { int ch, len; @@ -580,7 +580,7 @@ Arguments: Returns: a string */ -uschar * +const uschar * transport_rcpt_address(address_item *addr, BOOL include_affixes) { uschar *at; @@ -704,7 +704,7 @@ Returns: TRUE on success; FALSE on failure. */ BOOL transport_headers_send(transport_ctx * tctx, - BOOL (*sendfn)(transport_ctx * tctx, uschar * s, int len)) + BOOL (*sendfn)(transport_ctx * tctx, const uschar * s, int len)) { const uschar * list; transport_instance * tblock = tctx ? tctx->tblock : NULL; @@ -1499,14 +1499,13 @@ Returns: nothing void transport_update_waiting(host_item * hostlist, uschar * tpname) { -const uschar *prevname = US""; -open_db dbblock; -open_db *dbm_file; +const uschar * prevname = US""; +open_db dbblock, * dbp; if (!is_new_message_id(message_id)) { DEBUG(D_transport) debug_printf("message_id %s is not new format; " - "skipping wait-%s database update\n", tpname); + "skipping wait-%s database update\n", message_id, tpname); return; } @@ -1514,7 +1513,7 @@ DEBUG(D_transport) debug_printf("updating wait-%s database\n", tpname); /* Open the database for this transport */ -if (!(dbm_file = dbfn_open(string_sprintf("wait-%.200s", tpname), +if (!(dbp = dbfn_open(string_sprintf("wait-%.200s", tpname), O_RDWR, &dbblock, TRUE, TRUE))) return; @@ -1536,7 +1535,7 @@ for (host_item * host = hostlist; host; host = host->next) /* Look up the host record; if there isn't one, make an empty one. */ - if (!(host_record = dbfn_read(dbm_file, host->name))) + if (!(host_record = dbfn_read(dbp, host->name))) { host_record = store_get(sizeof(dbdata_wait) + MESSAGE_ID_LENGTH, GET_UNTAINTED); host_record->count = host_record->sequence = 0; @@ -1560,9 +1559,9 @@ for (host_item * host = hostlist; host; host = host->next) debug_printf_indent("NOTE: old or corrupt message-id found in wait=%.200s" " hints DB; deleting records for %s\n", tpname, host->name); - (void) dbfn_delete(dbm_file, host->name); + (void) dbfn_delete(dbp, host->name); for (int i = host_record->sequence - 1; i >= 0; i--) - (void) dbfn_delete(dbm_file, + (void) dbfn_delete(dbp, (sprintf(CS buffer, "%.200s:%d", host->name, i), buffer)); host_record->count = host_record->sequence = 0; @@ -1579,7 +1578,7 @@ for (host_item * host = hostlist; host; host = host->next) { dbdata_wait *cont; sprintf(CS buffer, "%.200s:%d", host->name, i); - if ((cont = dbfn_read(dbm_file, buffer))) + if ((cont = dbfn_read(dbp, buffer))) { int clen = cont->count * MESSAGE_ID_LENGTH; for (uschar * s = cont->text; s < cont->text + clen; s += MESSAGE_ID_LENGTH) @@ -1605,7 +1604,7 @@ for (host_item * host = hostlist; host; host = host->next) if (host_record->count >= WAIT_NAME_MAX) { sprintf(CS buffer, "%.200s:%d", host->name, host_record->sequence); - dbfn_write(dbm_file, buffer, host_record, sizeof(dbdata_wait) + host_length); + dbfn_write(dbp, buffer, host_record, sizeof(dbdata_wait) + host_length); #ifndef DISABLE_QUEUE_RAMP if (f.queue_2stage && queue_fast_ramp && !queue_run_in_order) queue_notify_daemon(message_id); @@ -1634,14 +1633,14 @@ for (host_item * host = hostlist; host; host = host->next) /* Update the database */ - dbfn_write(dbm_file, host->name, host_record, sizeof(dbdata_wait) + host_length); + dbfn_write(dbp, host->name, host_record, sizeof(dbdata_wait) + host_length); DEBUG(D_transport) debug_printf("added %.*s to queue for %s\n", MESSAGE_ID_LENGTH, message_id, host->name); } /* All now done */ -dbfn_close(dbm_file); +dbfn_close(dbp); } @@ -1658,6 +1657,10 @@ another message waiting for the same host. However, it doesn't do this if the current continue sequence is greater than the maximum supplied as an argument, or greater than the global connection_max_messages, which, if set, overrides. +It is also called if conditions are otherwise right for pipelining a QUIT after +the message data, since if there is another message waiting we do not want to +send that QUIT. + Arguments: transport_name name of the transport hostname name of the host @@ -1684,8 +1687,7 @@ transport_check_waiting(const uschar * transport_name, const uschar * hostname, { dbdata_wait * host_record; int host_length; -open_db dbblock; -open_db * dbm_file; +open_db dbblock, * dbp; int i; struct stat statbuf; @@ -1698,7 +1700,7 @@ DEBUG(D_transport) acl_level++; } -/* Do nothing if we have hit the maximum number that can be send down one +/* Do nothing if we have hit the maximum number that can be sent down one connection. */ if (connection_max_messages >= 0) local_message_max = connection_max_messages; @@ -1711,17 +1713,16 @@ if (local_message_max > 0 && continue_sequence >= local_message_max) /* Open the waiting information database. */ -if (!(dbm_file = dbfn_open(string_sprintf("wait-%.200s", transport_name), +if (!(dbp = dbfn_open(string_sprintf("wait-%.200s", transport_name), O_RDWR, &dbblock, TRUE, TRUE))) goto retfalse; /* See if there is a record for this host; if not, there's nothing to do. */ -if (!(host_record = dbfn_read(dbm_file, hostname))) +if (!(host_record = dbfn_read(dbp, hostname))) { - dbfn_close(dbm_file); DEBUG(D_transport) debug_printf_indent("no messages waiting for %s\n", hostname); - goto retfalse; + goto dbclose_false; } /* If the data in the record looks corrupt, just log something and @@ -1729,13 +1730,12 @@ don't try to use it. */ if (host_record->count > WAIT_NAME_MAX) { - dbfn_close(dbm_file); log_write(0, LOG_MAIN|LOG_PANIC, "smtp-wait database entry for %s has bad " "count=%d (max=%d)", hostname, host_record->count, WAIT_NAME_MAX); - goto retfalse; + goto dbclose_false; } -/* Scan the message ids in the record from the end towards the beginning, +/* Scan the message ids in the record in order until one is found for which a spool file actually exists. If the record gets emptied, delete it and continue with any continuation records that may exist. */ @@ -1748,17 +1748,14 @@ host_length = host_record->count * MESSAGE_ID_LENGTH; while (1) { - msgq_t *msgq; - int msgq_count = 0; - int msgq_actual = 0; - BOOL bFound = FALSE; - BOOL bContinuation = FALSE; + msgq_t * msgq; + int msgq_count = 0, msgq_actual = 0; + BOOL bFound = FALSE, bContinuation = FALSE; /* create an array to read entire message queue into memory for processing */ msgq = store_get(sizeof(msgq_t) * host_record->count, GET_UNTAINTED); - msgq_count = host_record->count; - msgq_actual = msgq_count; + msgq_actual = msgq_count = host_record->count; for (i = 0; i < host_record->count; ++i) { @@ -1771,12 +1768,11 @@ while (1) DEBUG(D_hints_lookup) debug_printf_indent("NOTE: old or corrupt message-id found in wait=%.200s" " hints DB; deleting records for %s\n", transport_name, hostname); - (void) dbfn_delete(dbm_file, hostname); - for (int i = host_record->sequence - 1; i >= 0; i--) - (void) dbfn_delete(dbm_file, - (sprintf(CS buffer, "%.200s:%d", hostname, i), buffer)); - dbfn_close(dbm_file); - goto retfalse; + (void) dbfn_delete(dbp, hostname); + for (int j = host_record->sequence - 1; j >= 0; j--) + (void) dbfn_delete(dbp, + (sprintf(CS buffer, "%.200s:%d", hostname, j), buffer)); + goto dbclose_false; } msgq[i].bKeep = TRUE; @@ -1797,7 +1793,7 @@ while (1) /* now find the next acceptable message_id */ - for (i = msgq_count - 1; i >= 0; --i) if (msgq[i].bKeep) + for (i = 0; i < msgq_count; i++) if (msgq[i].bKeep) { uschar subdir[2]; uschar * mid = msgq[i].message_id; @@ -1856,20 +1852,20 @@ while (1) for (int i = host_record->sequence - 1; i >= 0 && !newr; i--) { sprintf(CS buffer, "%.200s:%d", hostname, i); - newr = dbfn_read(dbm_file, buffer); + newr = dbfn_read(dbp, buffer); } /* If no continuation, delete the current and break the loop */ if (!newr) { - dbfn_delete(dbm_file, hostname); + dbfn_delete(dbp, hostname); break; } /* Else replace the current with the continuation */ - dbfn_delete(dbm_file, buffer); + dbfn_delete(dbp, buffer); host_record = newr; host_length = host_record->count * MESSAGE_ID_LENGTH; @@ -1885,20 +1881,18 @@ while (1) if (host_length <= 0) { - dbfn_close(dbm_file); DEBUG(D_transport) debug_printf_indent("waiting messages already delivered\n"); - goto retfalse; + goto dbclose_false; } /* we were not able to find an acceptable message, nor was there a - * continuation record. So bug out, outer logic will clean this up. - */ + continuation record. So bug out, outer logic will clean this up. + */ if (!bContinuation) { Ustrcpy(new_message_id, message_id); - dbfn_close(dbm_file); - goto retfalse; + goto dbclose_false; } } /* we need to process a continuation record */ @@ -1910,16 +1904,25 @@ record if required, close the database, and return TRUE. */ if (host_length > 0) { host_record->count = host_length/MESSAGE_ID_LENGTH; - dbfn_write(dbm_file, hostname, host_record, (int)sizeof(dbdata_wait) + host_length); + dbfn_write(dbp, hostname, host_record, (int)sizeof(dbdata_wait) + host_length); } -dbfn_close(dbm_file); -DEBUG(D_transport) {acl_level--; debug_printf("transport_check_waiting: TRUE\n"); } +dbfn_close(dbp); + +DEBUG(D_transport) + { + acl_level--; + debug_printf("transport_check_waiting: TRUE (found %s)\n", new_message_id); + } return TRUE; +dbclose_false: + dbfn_close(dbp); + retfalse: -DEBUG(D_transport) {acl_level--; debug_printf("transport_check_waiting: FALSE\n"); } -return FALSE; + DEBUG(D_transport) + {acl_level--; debug_printf("transport_check_waiting: FALSE\n"); } + return FALSE; } /************************************************* @@ -1937,7 +1940,7 @@ const uschar **argv; #ifndef DISABLE_TLS if (smtp_peer_options & OPTION_TLS) i += 6; #endif -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS if (continue_limit_mail || continue_limit_rcpt || continue_limit_rcptdom) i += 4; #endif @@ -1979,8 +1982,8 @@ if (smtp_peer_options & OPTION_TLS) argv[i++] = US"-MCT"; #endif -#ifdef EXPERIMENTAL_ESMTP_LIMITS -if (continue_limit_rcpt || continue_limit_rcptdom) +#ifndef DISABLE_ESMTP_LIMITS +if (continue_limit_mail || continue_limit_rcpt || continue_limit_rcptdom) { argv[i++] = US"-MCL"; argv[i++] = string_sprintf("%u", continue_limit_mail); @@ -2051,7 +2054,7 @@ Returns: FALSE if fork fails; TRUE otherwise BOOL transport_pass_socket(const uschar *transport_name, const uschar *hostname, const uschar *hostaddress, uschar *id, int socket_fd -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS , unsigned peer_limit_mail, unsigned peer_limit_rcpt, unsigned peer_limit_rcptdom #endif ) @@ -2061,43 +2064,30 @@ int status; DEBUG(D_transport) debug_printf("transport_pass_socket entered\n"); -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS continue_limit_mail = peer_limit_mail; continue_limit_rcpt = peer_limit_rcpt; continue_limit_rcptdom = peer_limit_rcptdom; #endif -if ((pid = exim_fork(US"continued-transport-interproc")) == 0) +if ((pid = exim_fork(US"continued-transport")) == 0) { - /* Disconnect entirely from the parent process. If we are running in the - test harness, wait for a bit to allow the previous process time to finish, - write the log, etc., so that the output is always in the same order for - automatic comparison. */ - - if ((pid = exim_fork(US"continued-transport")) != 0) - _exit(EXIT_SUCCESS); - testharness_pause_ms(1000); + /* If we are running in the test harness, wait for a bit to allow the + previous process time to finish, write the log, etc., so that the output is + always in the same order for automatic comparison. */ + testharness_pause_ms(500); transport_do_pass_socket(transport_name, hostname, hostaddress, id, socket_fd); + /*NOTREACHED*/ } -/* If the process creation succeeded, wait for the first-level child, which -immediately exits, leaving the second level process entirely disconnected from -this one. */ - if (pid > 0) - { - int rc; - while ((rc = wait(&status)) != pid && (rc >= 0 || errno != ECHILD)); return TRUE; - } -else - { - DEBUG(D_transport) debug_printf("transport_pass_socket failed to fork: %s\n", + +DEBUG(D_transport) debug_printf("transport_pass_socket failed to fork: %s\n", strerror(errno)); - return FALSE; - } +return FALSE; } @@ -2302,7 +2292,7 @@ if (flags & TSUC_EXPAND_ARGS) address_pipe_argv = store_get((address_pipe_max_args+1)*sizeof(uschar *), GET_UNTAINTED); /* +1 because addr->local_part[0] == '|' since af_force_command is set */ - s = expand_string(addr->local_part + 1); + s = expand_cstring(addr->local_part + 1); if (!s || !*s) { diff --git a/src/src/transports/appendfile.c b/src/src/transports/appendfile.c index e49f46be4..eeb726ae1 100644 --- a/src/src/transports/appendfile.c +++ b/src/src/transports/appendfile.c @@ -2,13 +2,15 @@ * 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 - 2020 */ /* See the file NOTICE for conditions of use and distribution. */ /* SPDX-License-Identifier: GPL-2.0-or-later */ #include "../exim.h" + +#ifdef TRANSPORT_APPENDFILE /* Remainder of file */ #include "appendfile.h" #ifdef SUPPORT_MAILDIR @@ -153,7 +155,6 @@ static const char *mailbox_formats[] = { (!ob->quota_warn_threshold_is_percent || ob->quota_value > 0)) - /************************************************* * Setup entry point * *************************************************/ @@ -179,18 +180,24 @@ static int appendfile_transport_setup(transport_instance *tblock, address_item *addrlist, transport_feedback *dummy, uid_t uid, gid_t gid, uschar **errmsg) { -appendfile_transport_options_block *ob = +appendfile_transport_options_block * ob = (appendfile_transport_options_block *)(tblock->options_block); -uschar *q = ob->quota; +uschar * q; double default_value = 0.0; if (ob->expand_maildir_use_size_file) - ob->maildir_use_size_file = expand_check_condition(ob->expand_maildir_use_size_file, + { + GET_OPTION("maildir_use_size_file"); + ob->maildir_use_size_file = + expand_check_condition(ob->expand_maildir_use_size_file, US"`maildir_use_size_file` in transport", tblock->name); + } /* Loop for quota, quota_filecount, quota_warn_threshold, mailbox_size, mailbox_filecount */ +GET_OPTION("quota"); +q = ob->quota; for (int i = 0; i < 5; i++) { double d = default_value; @@ -259,6 +266,7 @@ for (int i = 0; i < 5; i++) which = US"quota"; ob->quota_value = (off_t)d; ob->quota_no_check = no_check; + GET_OPTION("quota_filecount"); q = ob->quota_filecount; break; @@ -267,6 +275,7 @@ for (int i = 0; i < 5; i++) which = US"quota_filecount"; ob->quota_filecount_value = (int)d; ob->quota_filecount_no_check = no_check; + GET_OPTION("quota_warn_threshold"); q = ob->quota_warn_threshold; break; @@ -274,6 +283,7 @@ for (int i = 0; i < 5; i++) if (d >= 2.0*1024.0*1024.0*1024.0 && sizeof(off_t) <= 4) which = US"quota_warn_threshold"; ob->quota_warn_threshold_value = (off_t)d; + GET_OPTION("mailbox_size"); q = ob->mailbox_size_string; default_value = -1.0; break; @@ -282,6 +292,7 @@ for (int i = 0; i < 5; i++) if (d >= 2.0*1024.0*1024.0*1024.0 && sizeof(off_t) <= 4) which = US"mailbox_size";; ob->mailbox_size_value = (off_t)d; + GET_OPTION("mailbox_filecount"); q = ob->mailbox_filecount_string; break; @@ -400,10 +411,10 @@ if (ob->dirname) if (ob->maildir_format && ob->mailstore_format) log_write(0, LOG_PANIC_DIE|LOG_CONFIG_FOR, "%s transport:\n " "only one of maildir and mailstore may be specified", tblock->name); - if (ob->quota_filecount != NULL && ob->quota == NULL) + if (ob->quota_filecount != NULL && !ob->quota) log_write(0, LOG_PANIC_DIE|LOG_CONFIG_FOR, "%s transport:\n " "quota must be set if quota_filecount is set", tblock->name); - if (ob->quota_directory != NULL && ob->quota == NULL) + if (ob->quota_directory != NULL && !ob->quota) log_write(0, LOG_PANIC_DIE|LOG_CONFIG_FOR, "%s transport:\n " "quota must be set if quota_directory is set", tblock->name); } @@ -502,7 +513,7 @@ Returns: nothing */ static void -notify_comsat(uschar *user, off_t offset) +notify_comsat(const uschar * user, off_t offset) { struct servent *sp; host_item host; @@ -661,13 +672,14 @@ Returns: the sum of the sizes of the stattable files off_t check_dir_size(const uschar * dirname, int * countptr, const pcre2_code * re) { -DIR *dir; +DIR * dir; off_t sum = 0; -int count = *countptr; +int count = *countptr, lcount = REGEX_LOOPCOUNT_STORE_RESET; +rmark reset_point = store_mark(); if (!(dir = exim_opendir(dirname))) return 0; -for (struct dirent *ent; ent = readdir(dir); ) +for (struct dirent * ent; ent = readdir(dir); ) { uschar * path, * name = US ent->d_name; struct stat statbuf; @@ -675,6 +687,11 @@ for (struct dirent *ent; ent = readdir(dir); ) if (Ustrcmp(name, ".") == 0 || Ustrcmp(name, "..") == 0) continue; count++; + if (--lcount == 0) + { + store_reset(reset_point); reset_point = store_mark(); + lcount = REGEX_LOOPCOUNT_STORE_RESET; + } /* If there's a regex, try to find the size using it */ @@ -726,6 +743,7 @@ DEBUG(D_transport) debug_printf("check_dir_size: dir=%s sum=" OFF_T_FMT " count=%d\n", dirname, sum, count); +store_reset(reset_point); *countptr = count; return sum; } @@ -1215,6 +1233,7 @@ if (!fdname) { if (!(fdname = ob->filename)) { + GET_OPTION("directory"); fdname = ob->dirname; isdirectory = TRUE; } @@ -1349,7 +1368,7 @@ if (!isdirectory) && ob->create_file == create_belowhome) if (is_tainted(path)) { - DEBUG(D_transport) debug_printf("de-tainting path '%s'\n", path); + DEBUG(D_transport) debug_printf("below-home: de-tainting path '%s'\n", path); path = string_copy_taint(path, GET_UNTAINTED); } @@ -2188,7 +2207,7 @@ else if (is_tainted(path)) if (ob->create_file == create_belowhome) { - DEBUG(D_transport) debug_printf("de-tainting path '%s'\n", path); + DEBUG(D_transport) debug_printf("below-home: de-tainting path '%s'\n", path); path = string_copy_taint(path, GET_UNTAINTED); } else @@ -2228,6 +2247,7 @@ else /* Use an explicitly configured directory if set */ + GET_OPTION("quota_directory"); if (ob->quota_directory) { if (!(check_path = expand_string(ob->quota_directory))) @@ -2425,6 +2445,7 @@ else DEBUG(D_transport) debug_printf("delivering in maildir format in %s\n", path); + GET_OPTION("maildir_tag"); nametag = ob->maildir_tag; /* Check that nametag expands successfully; a hard failure causes a panic @@ -2561,9 +2582,10 @@ else /* Write the envelope file, then close it. */ + GET_OPTION("mailstore_prefix"); if (ob->mailstore_prefix) { - uschar *s = expand_string(ob->mailstore_prefix); + uschar * s = expand_string(ob->mailstore_prefix); if (!s) { if (!f.expand_string_forcedfail) @@ -2589,9 +2611,10 @@ else for (address_item * taddr = addr; taddr; taddr = taddr->next) fprintf(env_file, "%s@%s\n", taddr->local_part, taddr->domain); + GET_OPTION("mailstore_suffix"); if (ob->mailstore_suffix) { - uschar *s = expand_string(ob->mailstore_suffix); + uschar * s = expand_string(ob->mailstore_suffix); if (!s) { if (!f.expand_string_forcedfail) @@ -2751,18 +2774,21 @@ transport_newlines = 0; /* Write any configured prefix text first */ -if (yield == OK && ob->message_prefix && *ob->message_prefix) +if (yield == OK) { - uschar *prefix = expand_string(ob->message_prefix); - if (!prefix) - { - errno = ERRNO_EXPANDFAIL; - addr->transport_return = PANIC; - addr->message = string_sprintf("Expansion of \"%s\" (prefix for %s " - "transport) failed", ob->message_prefix, tblock->name); - yield = DEFER; - } - else if (!transport_write_string(fd, "%s", prefix)) yield = DEFER; + uschar * prefix = ob->message_prefix; + GET_OPTION("message_prefix"); + if (prefix && *prefix) + if (!(prefix = expand_string(prefix))) + { + errno = ERRNO_EXPANDFAIL; + addr->transport_return = PANIC; + addr->message = string_sprintf("Expansion of \"%s\" (prefix for %s " + "transport) failed", ob->message_prefix, tblock->name); + yield = DEFER; + } + else if (!transport_write_string(fd, "%s", prefix)) + yield = DEFER; } /* If the use_bsmtp option is on, we need to write SMTP prefix information. The @@ -2814,18 +2840,21 @@ if (yield == OK) /* Now a configured suffix. */ -if (yield == OK && ob->message_suffix && *ob->message_suffix) +if (yield == OK) { - uschar *suffix = expand_string(ob->message_suffix); - if (!suffix) - { - errno = ERRNO_EXPANDFAIL; - addr->transport_return = PANIC; - addr->message = string_sprintf("Expansion of \"%s\" (suffix for %s " - "transport) failed", ob->message_suffix, tblock->name); - yield = DEFER; - } - else if (!transport_write_string(fd, "%s", suffix)) yield = DEFER; + uschar * suffix = ob->message_suffix; + GET_OPTION("message_suffix"); + if (suffix && *suffix) + if (!(suffix = expand_string(suffix))) + { + errno = ERRNO_EXPANDFAIL; + addr->transport_return = PANIC; + addr->message = string_sprintf("Expansion of \"%s\" (suffix for %s " + "transport) failed", ob->message_suffix, tblock->name); + yield = DEFER; + } + else if (!transport_write_string(fd, "%s", suffix)) + yield = DEFER; } /* If batch smtp, write the terminating dot. */ @@ -3299,4 +3328,5 @@ ret_panic: } #endif /*!MACRO_PREDEF*/ +#endif /*TRANSPORT_APPENDFILE*/ /* End of transport/appendfile.c */ diff --git a/src/src/transports/autoreply.c b/src/src/transports/autoreply.c index fa884cec4..5ffc07215 100644 --- a/src/src/transports/autoreply.c +++ b/src/src/transports/autoreply.c @@ -2,13 +2,15 @@ * 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 */ #include "../exim.h" + +#ifdef TRANSPORT_AUTOREPLY /* Remainder of file */ #include "autoreply.h" @@ -233,13 +235,12 @@ that needs to be removed */ s = newlist + Ustrlen(newlist); while (s > newlist && (isspace(s[-1]) || s[-1] == ',')) s--; -*s = 0; +*s = '\0'; /* Check to see if there any addresses left; if not, return NULL */ s = newlist; -while (s && isspace(*s)) s++; -if (*s) +if (Uskip_whitespace(&s)) return newlist; store_reset(reset_point); @@ -314,20 +315,21 @@ if (addr->reply) } else { - uschar *oncerepeat = ob->once_repeat; + uschar * oncerepeat; DEBUG(D_transport) debug_printf("taking data from transport\n"); - from = ob->from; - reply_to = ob->reply_to; - to = ob->to; - cc = ob->cc; - bcc = ob->bcc; - subject = ob->subject; - headers = ob->headers; - text = ob->text; - file = ob->file; - logfile = ob->logfile; - oncelog = ob->oncelog; + GET_OPTION("once_repeat"); oncerepeat = ob->once_repeat; + GET_OPTION("from"); from = ob->from; + GET_OPTION("reply_to"); reply_to = ob->reply_to; + GET_OPTION("to"); to = ob->to; + GET_OPTION("cc"); cc = ob->cc; + GET_OPTION("bcc"); bcc = ob->bcc; + GET_OPTION("subject"); subject = ob->subject; + GET_OPTION("headers"); headers = ob->headers; + GET_OPTION("text"); text = ob->text; + GET_OPTION("file"); file = ob->file; + GET_OPTION("log"); logfile = ob->logfile; + GET_OPTION("once"); oncelog = ob->oncelog; file_expand = ob->file_expand; return_message = ob->return_message; @@ -473,10 +475,9 @@ if (oncelog && *oncelog && to) else { EXIM_DATUM key_datum, result_datum; - uschar * dirname, * s; + uschar * s = Ustrrchr(oncelog, '/'); + uschar * dirname = s ? string_copyn(oncelog, s - oncelog) : NULL; - dirname = (s = Ustrrchr(oncelog, '/')) - ? string_copyn(oncelog, s - oncelog) : NULL; if (!(dbm_file = exim_dbopen(oncelog, dirname, O_RDWR|O_CREAT, ob->mode))) { addr->transport_return = DEFER; @@ -493,19 +494,7 @@ if (oncelog && *oncelog && to) exim_datum_size_set(&key_datum, Ustrlen(to) + 1); if (exim_dbget(dbm_file, &key_datum, &result_datum)) - { - /* If the datum size is that of a binary time, we are in the new world - where messages are sent periodically. Otherwise the file is an old one, - where the datum was filled with a tod_log time, which is assumed to be - different in size. For that, only one message is ever sent. This change - introduced at Exim 3.00. In a couple of years' time the test on the size - can be abolished. */ - - if (exim_datum_size_get(&result_datum) == sizeof(time_t)) - memcpy(&then, exim_datum_data_get(&result_datum), sizeof(time_t)); - else - then = now; - } + memcpy(&then, exim_datum_data_get(&result_datum), sizeof(time_t)); } /* Either "then" is set zero, if no message has yet been sent, or it @@ -601,7 +590,7 @@ for (h = header_list; h; h = h->next) if (h) { message_id = Ustrchr(h->text, ':') + 1; - while (isspace(*message_id)) message_id++; + Uskip_whitespace(&message_id); fprintf(fp, "In-Reply-To: %s", message_id); } @@ -819,4 +808,7 @@ return FALSE; } #endif /*!MACRO_PREDEF*/ +#endif /*TRANSPORT_AUTOREPOL*/ /* End of transport/autoreply.c */ +/* vi: aw ai sw=2 +*/ diff --git a/src/src/transports/lmtp.c b/src/src/transports/lmtp.c index 2dd0f328b..7f82ef708 100644 --- a/src/src/transports/lmtp.c +++ b/src/src/transports/lmtp.c @@ -2,13 +2,15 @@ * 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 */ #include "../exim.h" +#ifdef TRANSPORT_LMTP /* Remainder of file */ + #include "lmtp.h" #define PENDING_OK 256 @@ -807,4 +809,5 @@ MINUS_N: } #endif /*!MACRO_PREDEF*/ +#endif /*TRANSPORT_LMTP*/ /* End of transport/lmtp.c */ diff --git a/src/src/transports/pipe.c b/src/src/transports/pipe.c index 18f9fd84e..faed1d00f 100644 --- a/src/src/transports/pipe.c +++ b/src/src/transports/pipe.c @@ -2,13 +2,15 @@ * 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 */ #include "../exim.h" + +#ifdef TRANSPORT_PIPE /* Remainder of file */ #include "pipe.h" #ifdef HAVE_SETCLASSRESOURCES @@ -292,7 +294,7 @@ Returns: TRUE if all went well; otherwise an error will be */ static BOOL -set_up_direct_command(const uschar *** argvptr, uschar * cmd, +set_up_direct_command(const uschar *** argvptr, const uschar * cmd, BOOL expand_arguments, int expand_fail, address_item * addr, uschar * tname, pipe_transport_options_block * ob) { @@ -315,6 +317,7 @@ argv = *argvptr; /* If allow_commands is set, see if the command is in the permitted list. */ +GET_OPTION("allow_commands"); if (ob->allow_commands) { int sep = 0; @@ -368,10 +371,11 @@ for it. */ if (argv[0][0] != '/') { int sep = 0; - uschar *p; - const uschar *listptr = expand_string(ob->path); + uschar * p; - while ((p = string_nextinlist(&listptr, &sep, NULL, 0))) + GET_OPTION("path"); + for (const uschar * listptr = expand_string(ob->path); + p = string_nextinlist(&listptr, &sep, NULL, 0); ) { struct stat statbuf; sprintf(CS big_buffer, "%.256s/%.256s", p, argv[0]); @@ -414,8 +418,8 @@ Returns: TRUE if all went well; otherwise an error will be */ static BOOL -set_up_shell_command(const uschar ***argvptr, uschar *cmd, - BOOL expand_arguments, int expand_fail, address_item *addr, uschar *tname) +set_up_shell_command(const uschar *** argvptr, const uschar * cmd, + BOOL expand_arguments, int expand_fail, address_item * addr, uschar * tname) { const uschar **argv; @@ -462,10 +466,10 @@ if (expand_arguments) } g = string_cat(g, q); - argv[2] = (cmd = string_from_gstring(g)) ? expand_string(cmd) : NULL; + argv[2] = (cmd = string_from_gstring(g)) ? expand_cstring(cmd) : NULL; } else - argv[2] = expand_string(cmd); + argv[2] = expand_cstring(cmd); f.enable_dollar_recipients = FALSE; @@ -518,11 +522,12 @@ pipe_transport_options_block *ob = int timeout = ob->timeout; BOOL written_ok = FALSE; BOOL expand_arguments; -const uschar **argv; -uschar *envp[50]; -const uschar *envlist = ob->environment; -uschar *cmd, *ss; -uschar *eol = ob->use_crlf ? US"\r\n" : US"\n"; +const uschar ** argv; +uschar * envp[50]; +const uschar * envlist = ob->environment; +const uschar * cmd; +uschar * ss; +uschar * eol = ob->use_crlf ? US"\r\n" : US"\n"; transport_ctx tctx = { .tblock = tblock, .addr = addr, @@ -549,6 +554,7 @@ if (testflag(addr, af_pfr) && addr->local_part[0] == '|') { /* Enables expansion of $address_pipe into separate arguments */ setflag(addr, af_force_command); + GET_OPTION("commsnd"); cmd = ob->cmd; expand_arguments = TRUE; expand_fail = PANIC; @@ -556,12 +562,13 @@ if (testflag(addr, af_pfr) && addr->local_part[0] == '|') else { cmd = addr->local_part + 1; - while (isspace(*cmd)) cmd++; + Uskip_whitespace(&cmd); expand_arguments = testflag(addr, af_expand_pipe); expand_fail = FAIL; } else { + GET_OPTION("commsnd"); cmd = ob->cmd; expand_arguments = TRUE; expand_fail = PANIC; @@ -649,6 +656,7 @@ else if (timezone_string && timezone_string[0]) /* Add any requested items */ +GET_OPTION("environment"); if (envlist) if (!(envlist = expand_cstring(envlist))) { @@ -795,9 +803,10 @@ transport_count = 0; /* First write any configured prefix information */ +GET_OPTION("message_prefix"); if (ob->message_prefix) { - uschar *prefix = expand_string(ob->message_prefix); + uschar * prefix = expand_string(ob->message_prefix); if (!prefix) { addr->transport_return = f.search_find_defer? DEFER : PANIC; @@ -837,9 +846,10 @@ if (!transport_write_message(&tctx, 0)) /* Now any configured suffix */ +GET_OPTION("message_suffix"); if (ob->message_suffix) { - uschar *suffix = expand_string(ob->message_suffix); + uschar * suffix = expand_string(ob->message_suffix); if (!suffix) { addr->transport_return = f.search_find_defer? DEFER : PANIC; @@ -1123,4 +1133,5 @@ return FALSE; } #endif /*!MACRO_PREDEF*/ +#endif /*TRASPORT_PIPE*/ /* End of transport/pipe.c */ diff --git a/src/src/transports/queuefile.c b/src/src/transports/queuefile.c index b6511133c..79020217b 100644 --- a/src/src/transports/queuefile.c +++ b/src/src/transports/queuefile.c @@ -2,9 +2,9 @@ * Exim - an Internet mail transport agent * *************************************************/ +/* Copyright (c) The Exim Maintainers 1995 - 2024 */ /* Copyright (c) Andrew Colin Kissa 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 */ @@ -195,6 +195,7 @@ DEBUG(D_transport) # define O_NOFOLLOW 0 #endif +GET_OPTION("directory"); if (!(dstdir = expand_string(ob->dirname))) { addr->message = string_sprintf("%s transport: failed to expand dirname option", diff --git a/src/src/transports/smtp.c b/src/src/transports/smtp.c index df94eebde..30983984a 100644 --- a/src/src/transports/smtp.c +++ b/src/src/transports/smtp.c @@ -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 */ @@ -203,9 +203,6 @@ smtp_transport_options_block smtp_transport_option_defaults = { .tls_tempfail_tryclear = TRUE, .tls_try_verify_hosts = US"*", .tls_verify_cert_hostnames = US"*", -# ifndef DISABLE_TLS_RESUME - .host_name_extract = US"${if and {{match{$host}{.outlook.com\\$}} {match{$item}{\\N^250-([\\w.]+)\\s\\N}}} {$1}}", -# endif #endif #ifdef SUPPORT_I18N .utf8_downconvert = US"-1", @@ -238,6 +235,17 @@ static BOOL pipelining_active; /* current transaction is in pipe mode */ static unsigned ehlo_response(uschar * buf, unsigned checks); +/* sync_responses() return codes */ + +#define RESP_BIT_HAD_5XX BIT(1) +#define RESP_BIT_HAD_2XX BIT(0) +#define RESP_HAD_2_AND_5 (RESP_BIT_HAD_2XX | RESP_BIT_HAD_5XX) +#define RESP_NOERROR 0 +#define RESP_RCPT_TIMEO -1 +#define RESP_RCPT_ERROR -2 +#define RESP_MAIL_OR_DATA_ERROR -3 +#define RESP_EPIPE_EHLO_ERR -4 +#define RESP_EHLO_ERR_TLS -5 /******************************************************************************/ @@ -269,7 +277,7 @@ struct list #ifndef DISABLE_PIPE_CONNECT { ®ex_EARLY_PIPE, US"\\n250[\\s\\-]" EARLY_PIPE_FEATURE_NAME "(\\s|\\n|$)" }, #endif -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS { ®ex_LIMITS, US"\\n250[\\s\\-]LIMITS\\s" }, #endif }; @@ -352,7 +360,7 @@ Returns: nothing void smtp_transport_init(transport_instance *tblock) { -smtp_transport_options_block *ob = SOB tblock->options_block; +smtp_transport_options_block * ob = SOB tblock->options_block; int old_pool = store_pool; /* Retry_use_local_part defaults FALSE if unset */ @@ -525,7 +533,7 @@ switch(*errno_value) case ERRNO_SMTPFORMAT: /* Handle malformed SMTP response */ s = string_printing(buffer); - while (isspace(*s)) s++; + Uskip_whitespace(&s); *message = *s == 0 ? string_sprintf("Malformed SMTP reply (an empty line) " "in response to %s%s", pl, smtp_command) @@ -659,14 +667,16 @@ static void deferred_event_raise(address_item * addr, host_item * host, uschar * evstr) { uschar * action = addr->transport->event_action; -const uschar * save_domain; -uschar * save_local; +const uschar * save_domain, * save_local; +uschar * save_rn, * save_tn; if (!action) return; save_domain = deliver_domain; save_local = deliver_localpart; +save_rn = router_name; +save_tn = transport_name; /*XXX would ip & port already be set up? */ deliver_host_address = string_copy(host->address); @@ -690,7 +700,8 @@ deliver_localpart = addr->local_part; deliver_localpart = save_local; deliver_domain = save_domain; -router_name = transport_name = NULL; +router_name = save_rn; +router_name = save_tn; } #endif @@ -765,31 +776,32 @@ return TRUE; } +#if !defined(DISABLE_TLS) && !defined(DISABLE_TLS_RESUME) + /* Grab a string differentiating server behind a loadbalancer, for TLS resumption when such servers do not share a session-cache */ static void -ehlo_response_lbserver(smtp_context * sx, smtp_transport_options_block * ob) +ehlo_response_lbserver(smtp_context * sx, const uschar * name_extract) { -#if !defined(DISABLE_TLS) && !defined(DISABLE_TLS_RESUME) const uschar * s; uschar * save_item = iterate_item; if (sx->conn_args.have_lbserver) return; iterate_item = sx->buffer; -s = expand_cstring(ob->host_name_extract); +s = expand_cstring(name_extract); iterate_item = save_item; sx->conn_args.host_lbserver = s && !*s ? NULL : s; sx->conn_args.have_lbserver = TRUE; -#endif } +#endif /******************************************************************************/ -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS /* If TLS, or TLS not offered, called with the EHLO response in the buffer. Check it for a LIMITS keyword and parse values into the smtp context structure. @@ -807,8 +819,7 @@ uschar * match; if (regex_match(regex_LIMITS, sx->buffer, -1, &match)) for (const uschar * s = sx->buffer + Ustrlen(match); *s; ) { - while (isspace(*s)) s++; - if (*s == '\n') break; + if (Uskip_whitespace(&s) == '\n') break; if (strncmpic(s, US"MAILMAX=", 8) == 0) { @@ -892,7 +903,7 @@ write_ehlo_cache_entry(smtp_context * sx) { open_db dbblock, * dbm_file; -# ifdef EXPERIMENTAL_ESMTP_LIMITS +# ifndef DISABLE_ESMTP_LIMITS sx->ehlo_resp.limit_mail = sx->peer_limit_mail; sx->ehlo_resp.limit_rcpt = sx->peer_limit_rcpt; sx->ehlo_resp.limit_rcptdom = sx->peer_limit_rcptdom; @@ -904,7 +915,7 @@ if ((dbm_file = dbfn_open(US"misc", O_RDWR, &dbblock, TRUE, TRUE))) dbdata_ehlo_resp er = { .data = sx->ehlo_resp }; HDEBUG(D_transport) -# ifdef EXPERIMENTAL_ESMTP_LIMITS +# ifndef DISABLE_ESMTP_LIMITS if (sx->ehlo_resp.limit_mail || sx->ehlo_resp.limit_rcpt || sx->ehlo_resp.limit_rcptdom) debug_printf("writing clr %04x/%04x cry %04x/%04x lim %05d/%05d/%05d\n", sx->ehlo_resp.cleartext_features, sx->ehlo_resp.cleartext_auths, @@ -938,7 +949,8 @@ if ( sx->early_pipe_active if (!(er = dbfn_read_enforce_length(dbm_file, ehlo_resp_key, sizeof(dbdata_ehlo_resp)))) debug_printf("no ehlo-resp record!\n"); else - debug_printf("ehlo-resp record is %d seconds old\n", time(NULL) - er->time_stamp); + debug_printf("ehlo-resp record is %.0f seconds old\n", + difftime(time(NULL), er->time_stamp)); } dbfn_delete(dbm_file, ehlo_resp_key); @@ -971,7 +983,7 @@ else else { DEBUG(D_transport) -# ifdef EXPERIMENTAL_ESMTP_LIMITS +# ifndef DISABLE_ESMTP_LIMITS if (er->data.limit_mail || er->data.limit_rcpt || er->data.limit_rcptdom) debug_printf("EHLO response bits from cache:" " cleartext 0x%04x/0x%04x crypted 0x%04x/0x%04x lim %05d/%05d/%05d\n", @@ -986,7 +998,7 @@ else er->data.crypted_features, er->data.crypted_auths); sx->ehlo_resp = er->data; -# ifdef EXPERIMENTAL_ESMTP_LIMITS +# ifndef DISABLE_ESMTP_LIMITS ehlo_cache_limits_apply(sx); # endif dbfn_close(dbm_file); @@ -1067,6 +1079,8 @@ sx->pending_EHLO = FALSE; if (pending_BANNER) { + const uschar * s; + DEBUG(D_transport) debug_printf("%s expect banner\n", __FUNCTION__); (*countp)--; if (!smtp_reap_banner(sx)) @@ -1076,7 +1090,13 @@ if (pending_BANNER) goto fail; } /*XXX EXPERIMENTAL_ESMTP_LIMITS ? */ - ehlo_response_lbserver(sx, sx->conn_args.ob); + +# 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; + ehlo_response_lbserver(sx, s); +# endif } if (pending_EHLO) @@ -1105,7 +1125,7 @@ if (pending_EHLO) | OPTION_CHUNKING | OPTION_PRDR | OPTION_DSN | OPTION_PIPE | OPTION_SIZE | OPTION_UTF8 | OPTION_EARLY_PIPE ); -# ifdef EXPERIMENTAL_ESMTP_LIMITS +# ifndef DISABLE_ESMTP_LIMITS if (tls_out.active.sock >= 0 || !(peer_offered & OPTION_TLS)) ehlo_response_limits_read(sx); # endif @@ -1132,7 +1152,7 @@ if (pending_EHLO) return OK; /* just carry on */ } -# ifdef EXPERIMENTAL_ESMTP_LIMITS +# ifndef DISABLE_ESMTP_LIMITS /* If we are handling LIMITS, compare the actual EHLO LIMITS values with the cached values and invalidate cache if different. OK to carry on with connect since values are advisory. */ @@ -1221,7 +1241,7 @@ int yield = 0; #ifndef DISABLE_PIPE_CONNECT int rc; if ((rc = smtp_reap_early_pipe(sx, &count)) != OK) - return rc == FAIL ? -4 : -5; + return rc == FAIL ? RESP_EPIPE_EHLO_ERR : RESP_EHLO_ERR_TLS; #endif /* Handle the response for a MAIL command. On error, reinstate the original @@ -1239,7 +1259,7 @@ if (sx->pending_MAIL) DEBUG(D_transport) debug_printf("bad response for MAIL\n"); Ustrcpy(big_buffer, mail_command); /* Fits, because it came from there! */ if (errno == ERRNO_TLSFAILURE) - return -5; + return RESP_EHLO_ERR_TLS; if (errno == 0 && sx->buffer[0] != 0) { int save_errno = 0; @@ -1259,7 +1279,7 @@ if (sx->pending_MAIL) addr->host_used = sx->conn_args.host; addr = addr->next; } - return -3; + return RESP_MAIL_OR_DATA_ERROR; } } @@ -1273,7 +1293,7 @@ while (count-- > 0) { while (addr->transport_return != PENDING_DEFER) if (!(addr = addr->next)) - return -2; + return RESP_RCPT_ERROR; /* The address was accepted */ addr->host_used = sx->conn_args.host; @@ -1282,7 +1302,7 @@ while (count-- > 0) if (smtp_read_response(sx, sx->buffer, sizeof(sx->buffer), '2', ob->command_timeout)) { - yield |= 1; + yield |= RESP_BIT_HAD_2XX; addr->transport_return = PENDING_OK; /* If af_dr_retry_exists is set, there was a routing delay on this address; @@ -1291,7 +1311,7 @@ while (count-- > 0) if (testflag(addr, af_dr_retry_exists)) { - uschar *altkey = string_sprintf("%s:<%s>", addr->address_retry_key, + uschar * altkey = string_sprintf("%s:<%s>", addr->address_retry_key, sender_address); retry_add_item(addr, altkey, rf_delete); retry_add_item(addr, addr->address_retry_key, rf_delete); @@ -1301,18 +1321,18 @@ while (count-- > 0) /* Error on first TLS read */ else if (errno == ERRNO_TLSFAILURE) - return -5; + return RESP_EHLO_ERR_TLS; /* Timeout while reading the response */ else if (errno == ETIMEDOUT) { - uschar *message = string_sprintf("SMTP timeout after RCPT TO:<%s>", + uschar * message = string_sprintf("SMTP timeout after RCPT TO:<%s>", transport_rcpt_address(addr, sx->conn_args.tblock->rcpt_include_affixes)); set_errno_nohost(sx->first_addr, ETIMEDOUT, message, DEFER, FALSE, &sx->delivery_start); retry_add_item(addr, addr->address_retry_key, 0); update_waiting = FALSE; - return -1; + return RESP_RCPT_TIMEO; } /* Handle other errors in obtaining an SMTP response by returning -1. This @@ -1330,7 +1350,7 @@ while (count-- > 0) g = string_fmt_append_f(g, SVFMT_TAINT_NOCHK, "RCPT TO:<%s>", transport_rcpt_address(addr, sx->conn_args.tblock->rcpt_include_affixes)); string_from_gstring(g); - return -2; + return RESP_RCPT_ERROR; } /* Handle SMTP permanent and temporary response codes. */ @@ -1350,7 +1370,7 @@ while (count-- > 0) if (sx->buffer[0] == '5') { addr->transport_return = FAIL; - yield |= 2; + yield |= RESP_BIT_HAD_5XX; } /* The response was 4xx */ @@ -1370,7 +1390,7 @@ while (count-- > 0) /* If a 452 and we've had at least one 2xx or 5xx, set next_addr to the start point for another MAIL command. */ - if (addr->more_errno >> 8 == 52 && yield & 3) + if (addr->more_errno >> 8 == 52 && yield > 0) { if (!sx->RCPT_452) /* initialised at MAIL-ack above */ { @@ -1420,7 +1440,7 @@ while (count-- > 0) } } if (count && !(addr = addr->next)) - return -2; + return RESP_RCPT_ERROR; } /* Loop for next RCPT response */ /* Update where to start at for the next block of responses, unless we @@ -1442,16 +1462,16 @@ if (pending_DATA != 0) BOOL pass_message; if (errno == ERRNO_TLSFAILURE) /* Error on first TLS read */ - return -5; + return RESP_EHLO_ERR_TLS; - if (pending_DATA > 0 || (yield & 1) != 0) + if (pending_DATA > 0 || yield & RESP_BIT_HAD_2XX) { if (errno == 0 && sx->buffer[0] == '4') { errno = ERRNO_DATA4XX; sx->first_addr->more_errno |= ((sx->buffer[1] - '0')*10 + sx->buffer[2] - '0') << 8; } - return -3; + return RESP_MAIL_OR_DATA_ERROR; } (void)check_response(sx->conn_args.host, &errno, 0, sx->buffer, &code, &msg, &pass_message); DEBUG(D_transport) debug_printf("%s\nerror for DATA ignored: pipelining " @@ -1678,8 +1698,8 @@ if ( sx->esmtp { DEBUG(D_transport) debug_printf("skipping %s authenticator: %s\n", au->name, - (au->client)? "client_condition is false" : - "not configured as a client"); + au->client ? "client_condition is false" + : "not configured as a client"); continue; } @@ -1687,15 +1707,14 @@ if ( sx->esmtp while (*p) { - int len = Ustrlen(au->public_name); - int rc; + int len = Ustrlen(au->public_name), rc; - while (isspace(*p)) p++; + Uskip_whitespace(&p); if (strncmpic(au->public_name, p, len) != 0 || - (p[len] != 0 && !isspace(p[len]))) + (p[len] && !isspace(p[len]))) { - while (*p != 0 && !isspace(*p)) p++; + while (*p && !isspace(*p)) p++; continue; } @@ -1754,6 +1773,7 @@ uschar * local_authenticated_sender = authenticated_sender; authenticated_sender, ob->authenticated_sender, f.smtp_authenticated?"Y":"N"); #endif +GET_OPTION("authenticated_sender"); if (ob->authenticated_sender) { uschar * new = expand_string(ob->authenticated_sender); @@ -1791,7 +1811,7 @@ return FALSE; typedef struct smtp_compare_s { - uschar * current_sender_address; + const uschar * current_sender_address; struct transport_instance * tblock; } smtp_compare_t; @@ -1801,7 +1821,7 @@ sender_address, helo_data and tls_certificate if enabled. */ static uschar * -smtp_local_identity(uschar * sender, struct transport_instance * tblock) +smtp_local_identity(const uschar * sender, struct transport_instance * tblock) { address_item * addr1; uschar * if1 = US""; @@ -1809,7 +1829,7 @@ uschar * helo1 = US""; #ifndef DISABLE_TLS uschar * tlsc1 = US""; #endif -uschar * save_sender_address = sender_address; +const uschar * save_sender_address = sender_address; uschar * local_identity = NULL; smtp_transport_options_block * ob = SOB tblock->options_block; @@ -2004,18 +2024,18 @@ if (flags & tc_reap_prev && prev_cmd_count > 0) switch(sync_responses(sx, prev_cmd_count, 0)) { - case 1: /* 2xx (only) => OK */ - case 3: sx->good_RCPT = TRUE; /* 2xx & 5xx => OK & progress made */ - case 2: sx->completed_addr = TRUE; /* 5xx (only) => progress made */ - case 0: break; /* No 2xx or 5xx, but no probs */ + case RESP_BIT_HAD_2XX: /* OK */ + case RESP_HAD_2_AND_5: sx->good_RCPT = TRUE; /* OK & progress made */ + case RESP_BIT_HAD_5XX: sx->completed_addr = TRUE; /* progress made */ + case RESP_NOERROR: break; /* No 2xx or 5xx, but no probs */ - case -5: errno = ERRNO_TLSFAILURE; - return DEFER; + case RESP_EHLO_ERR_TLS:errno = ERRNO_TLSFAILURE; + return DEFER; #ifndef DISABLE_PIPE_CONNECT - case -4: /* non-2xx for pipelined banner or EHLO */ + case RESP_EPIPE_EHLO_ERR: /* non-2xx for pipelined banner or EHLO */ #endif - case -1: /* Timeout on RCPT */ - default: return ERROR; /* I/O error, or any MAIL/DATA error */ + case RESP_RCPT_TIMEO: /* Timeout on RCPT */ + default: return ERROR;/* I/O error, or any MAIL/DATA error */ } cmd_count = 1; if (!sx->pending_BDAT) @@ -2290,7 +2310,7 @@ if (!continue_hostname) sx->cctx.tls_ctx = NULL; sx->inblock.cctx = sx->outblock.cctx = &sx->cctx; -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS sx->peer_limit_mail = sx->peer_limit_rcpt = sx->peer_limit_rcptdom = #endif sx->avoid_option = sx->peer_offered = smtp_peer_options = 0; @@ -2359,6 +2379,7 @@ PIPE_CONNECT_RETRY: For early-pipe, we are ok if binding to a local interface; otherwise (if $sending_ip_address is seen in helo_data) we disabled early-pipe above. */ + GET_OPTION("helo_data"); if (sx->helo_data) if (!(sx->helo_data = expand_string(sx->helo_data))) if (sx->verify) @@ -2474,10 +2495,22 @@ goto SEND_QUIT; #ifndef DISABLE_TLS if (sx->smtps) { + const uschar * s; + smtp_peer_options |= OPTION_TLS; suppress_tls = FALSE; ob->tls_tempfail_tryclear = FALSE; smtp_command = US"SSL-on-connect"; + +# ifndef DISABLE_TLS_RESUME + /* Having no EHLO response yet, cannot peek there for a servername to detect + an LB. Call this anyway, so that a dummy host_name_extract option value can + force resumption attempts. */ + + GET_OPTION("host_name_extract"); + if (!(s = ob->host_name_extract)) s = US"never-LB"; + ehlo_response_lbserver(sx, s); +# endif goto TLS_NEGOTIATE; } #endif @@ -2508,7 +2541,7 @@ goto SEND_QUIT; DEBUG(D_transport) debug_printf("may need to auth, so pipeline no further\n"); if (smtp_write_command(sx, SCMD_FLUSH, NULL) < 0) goto SEND_FAILED; - if (sync_responses(sx, 2, 0) != 0) + if (sync_responses(sx, 2, 0) != RESP_NOERROR) { HDEBUG(D_transport) debug_printf("failed reaping pipelined cmd responses\n"); @@ -2565,6 +2598,8 @@ goto SEND_QUIT; if (!sx->early_pipe_active) #endif { + const uschar * s; + sx->peer_offered = ehlo_response(sx->buffer, OPTION_TLS /* others checked later */ #ifndef DISABLE_PIPE_CONNECT @@ -2579,7 +2614,7 @@ goto SEND_QUIT; ) #endif ); -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS if (tls_out.active.sock >= 0 || !(sx->peer_offered & OPTION_TLS)) { ehlo_response_limits_read(sx); @@ -2600,7 +2635,11 @@ goto SEND_QUIT; } } #endif - ehlo_response_lbserver(sx, ob); +#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); +#endif } /* Set tls_offered if the response to EHLO specifies support for STARTTLS. */ @@ -2641,7 +2680,7 @@ else sx->inblock.cctx = sx->outblock.cctx = &sx->cctx; smtp_command = big_buffer; sx->peer_offered = smtp_peer_options; -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS /* Limits passed by cmdline over exec. */ ehlo_limits_apply(sx, sx->peer_limit_mail = continue_limit_mail, @@ -2694,7 +2733,7 @@ if ( smtp_peer_options & OPTION_TLS if (sx->early_pipe_active) { - if (sync_responses(sx, 2, 0) != 0) + if (sync_responses(sx, 2, 0) != RESP_NOERROR) { HDEBUG(D_transport) debug_printf("failed reaping pipelined cmd responses\n"); @@ -2806,13 +2845,17 @@ if (tls_out.active.sock >= 0) { uschar * greeting_cmd; - if (!sx->helo_data && !(sx->helo_data = expand_string(ob->helo_data))) + if (!sx->helo_data) { - uschar *message = string_sprintf("failed to expand helo_data: %s", - expand_string_message); - set_errno_nohost(sx->addrlist, ERRNO_EXPANDFAIL, message, DEFER, FALSE, &sx->delivery_start); - yield = DEFER; - goto SEND_QUIT; + GET_OPTION("helo_data"); + if (!(sx->helo_data = expand_string(ob->helo_data))) + { + uschar *message = string_sprintf("failed to expand helo_data: %s", + expand_string_message); + set_errno_nohost(sx->addrlist, ERRNO_EXPANDFAIL, message, DEFER, FALSE, &sx->delivery_start); + yield = DEFER; + goto SEND_QUIT; + } } #ifndef DISABLE_PIPE_CONNECT @@ -2969,7 +3012,7 @@ if ( !continue_hostname sx->ehlo_resp.crypted_features = sx->peer_offered; #endif -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS if (tls_out.active.sock >= 0 || !(sx->peer_offered & OPTION_TLS)) { ehlo_response_limits_read(sx); @@ -3063,6 +3106,7 @@ if (sx->addrlist->prop.utf8_msg) /* If the transport sets a downconversion mode it overrides any set by ACL for the message. */ + GET_OPTION("utf8_downconvert"); if ((s = ob->utf8_downconvert)) { if (!(s = expand_string(s))) @@ -3384,21 +3428,15 @@ if (sx->peer_offered & OPTION_DSN && !(addr->dsn_flags & rf_dsnlasthop)) -/* -Return: - 0 good, rcpt results in addr->transport_return (PENDING_OK, DEFER, FAIL) - -1 MAIL response error - -2 any non-MAIL read i/o error - -3 non-MAIL response timeout - -4 internal error; channel still usable - -5 transmit failed - */ +/* Send MAIL FROM and RCPT TO commands. +See sw_mrc_t definition for return codes. +*/ -int +sw_mrc_t smtp_write_mail_and_rcpt_cmds(smtp_context * sx, int * yield) { address_item * addr; -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS address_item * restart_addr = NULL; #endif int address_count, pipe_limit; @@ -3407,7 +3445,7 @@ int rc; if (build_mailcmd_options(sx, sx->first_addr) != OK) { *yield = ERROR; - return -4; + return sw_mrc_bad_internal; } /* From here until we send the DATA command, we can make use of PIPELINING @@ -3419,7 +3457,7 @@ buffer. */ sx->pending_MAIL = TRUE; /* The block starts with MAIL */ { - uschar * s = sx->from_addr; + const uschar * s = sx->from_addr; #ifdef SUPPORT_I18N uschar * errstr = NULL; @@ -3435,7 +3473,7 @@ sx->pending_MAIL = TRUE; /* The block starts with MAIL */ { set_errno_nohost(sx->addrlist, ERRNO_EXPANDFAIL, errstr, DEFER, FALSE, &sx->delivery_start); *yield = ERROR; - return -4; + return sw_mrc_bad_internal; } setflag(sx->addrlist, af_utf8_downcvt); } @@ -3450,7 +3488,7 @@ mail_command = string_copy(big_buffer); /* Save for later error message */ switch(rc) { case -1: /* Transmission error */ - return -5; + return sw_mrc_bad_mail; case +1: /* Cmd was sent */ if (!smtp_read_response(sx, sx->buffer, sizeof(sx->buffer), '2', @@ -3461,7 +3499,7 @@ switch(rc) errno = ERRNO_MAIL4XX; sx->addrlist->more_errno |= ((sx->buffer[1] - '0')*10 + sx->buffer[2] - '0') << 8; } - return -1; + return sw_mrc_bad_mail; } sx->pending_MAIL = FALSE; break; @@ -3490,9 +3528,9 @@ for (addr = sx->first_addr, address_count = 0, pipe_limit = 100; { int cmds_sent; BOOL no_flush; - uschar * rcpt_addr; + const uschar * rcpt_addr; -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS if ( sx->single_rcpt_domain /* restriction on domains */ && address_count > 0 /* not first being sent */ && Ustrcmp(addr->domain, sx->first_addr->domain) != 0 /* dom diff from first */ @@ -3536,26 +3574,26 @@ for (addr = sx->first_addr, address_count = 0, pipe_limit = 100; { /*XXX could we use a per-address errstr here? Not fail the whole send? */ errno = ERRNO_EXPANDFAIL; - return -5; /*XXX too harsh? */ + return sw_mrc_tx_fail; /*XXX too harsh? */ } #endif cmds_sent = smtp_write_command(sx, no_flush ? SCMD_BUFFER : SCMD_FLUSH, "RCPT TO:<%s>%s%s\r\n", rcpt_addr, sx->igquotstr, sx->buffer); - if (cmds_sent < 0) return -5; + if (cmds_sent < 0) return sw_mrc_tx_fail; if (cmds_sent > 0) { switch(sync_responses(sx, cmds_sent, 0)) { - case 3: sx->ok = TRUE; /* 2xx & 5xx => OK & progress made */ - case 2: sx->completed_addr = TRUE; /* 5xx (only) => progress made */ + case RESP_HAD_2_AND_5: sx->ok = TRUE; /* OK & progress made */ + case RESP_BIT_HAD_5XX: sx->completed_addr = TRUE; /* progress made */ break; - case 1: sx->ok = TRUE; /* 2xx (only) => OK, but if LMTP, */ + case RESP_BIT_HAD_2XX: sx->ok = TRUE; /* OK, but if LMTP, */ if (!sx->lmtp) /* can't tell about progress yet */ sx->completed_addr = TRUE; - case 0: /* No 2xx or 5xx, but no probs */ + case RESP_NOERROR: /* No 2xx or 5xx, but no probs */ /* If any RCPT got a 452 response then next_addr has been updated for restarting with a new MAIL on the same connection. Send no more RCPTs for this MAIL. */ @@ -3565,28 +3603,28 @@ for (addr = sx->first_addr, address_count = 0, pipe_limit = 100; DEBUG(D_transport) debug_printf("seen 452 too-many-rcpts\n"); sx->RCPT_452 = FALSE; /* sx->next_addr has been reset for fast_retry */ - return 0; + return sw_mrc_ok; } break; - case -1: return -3; /* Timeout on RCPT */ - case -2: return -2; /* non-MAIL read i/o error */ - default: return -1; /* any MAIL error */ + case RESP_RCPT_TIMEO: return sw_mrc_nonmail_read_timeo; + case RESP_RCPT_ERROR: return sw_mrc_bad_read; + default: return sw_mrc_bad_mail; /* any MAIL error */ #ifndef DISABLE_PIPE_CONNECT - case -4: return -1; /* non-2xx for pipelined banner or EHLO */ - case -5: return -1; /* TLS first-read error */ + case RESP_EPIPE_EHLO_ERR: return sw_mrc_bad_mail; /* non-2xx for pipelined banner or EHLO */ + case RESP_EHLO_ERR_TLS: return sw_mrc_bad_mail; /* TLS first-read error */ #endif } } } /* Loop for next address */ -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS sx->next_addr = restart_addr ? restart_addr : addr; #else sx->next_addr = addr; #endif -return 0; +return sw_mrc_ok; } @@ -3762,18 +3800,18 @@ int save_errno; int rc; uschar *message = NULL; -uschar new_message_id[MESSAGE_ID_LENGTH + 1]; smtp_context * sx = store_get(sizeof(*sx), GET_TAINTED); /* tainted, for the data buffers */ BOOL pass_message = FALSE; -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS BOOL mail_limit = FALSE; #endif #ifdef SUPPORT_DANE BOOL dane_held; #endif -BOOL tcw_done = FALSE, tcw = FALSE; +BOOL tcw_done = FALSE, tcw = FALSE, passback_tcw = FALSE; *message_defer = FALSE; +continue_next_id[0] = '\0'; memset(sx, 0, sizeof(*sx)); sx->addrlist = addrlist; @@ -3894,11 +3932,12 @@ else switch(smtp_write_mail_and_rcpt_cmds(sx, &yield)) { - case 0: break; - case -1: case -2: goto RESPONSE_FAILED; - case -3: goto END_OFF; - case -4: goto SEND_QUIT; - default: goto SEND_FAILED; + case sw_mrc_ok: break; + case sw_mrc_bad_mail: goto RESPONSE_FAILED; + case sw_mrc_bad_read: goto RESPONSE_FAILED; + case sw_mrc_nonmail_read_timeo: goto END_OFF; + case sw_mrc_bad_internal: goto SEND_QUIT; + default: goto SEND_FAILED; } /* If we are an MUA wrapper, abort if any RCPTs were rejected, either @@ -3936,17 +3975,19 @@ if ( !(smtp_peer_options & OPTION_CHUNKING) int count = smtp_write_command(sx, SCMD_FLUSH, "DATA\r\n"); if (count < 0) goto SEND_FAILED; + switch(sync_responses(sx, count, sx->ok ? +1 : -1)) { - case 3: sx->ok = TRUE; /* 2xx & 5xx => OK & progress made */ - case 2: sx->completed_addr = TRUE; /* 5xx (only) => progress made */ - break; + case RESP_HAD_2_AND_5: sx->ok = TRUE; /* OK & progress made */ + case RESP_BIT_HAD_5XX: sx->completed_addr = TRUE; /* progress made */ + break; - case 1: sx->ok = TRUE; /* 2xx (only) => OK, but if LMTP, */ - if (!sx->lmtp) sx->completed_addr = TRUE; /* can't tell about progress yet */ - case 0: break; /* No 2xx or 5xx, but no probs */ + case RESP_BIT_HAD_2XX: sx->ok = TRUE; /* OK, but if LMTP, */ + if (!sx->lmtp) /* can't tell about progress yet */ + sx->completed_addr = TRUE; + case RESP_NOERROR: break; /* No 2xx or 5xx, but no probs */ - case -1: goto END_OFF; /* Timeout on RCPT */ + case RESP_RCPT_TIMEO: goto END_OFF; #ifndef DISABLE_PIPE_CONNECT case -5: /* TLS first-read error */ @@ -4091,7 +4132,7 @@ else && #endif transport_check_waiting(tblock->name, host->name, - tblock->connection_max_messages, new_message_id, + tblock->connection_max_messages, continue_next_id, (oicf)smtp_are_same_identities, (void*)&t_compare); if (!tcw) { @@ -4176,22 +4217,23 @@ else /* Reap any outstanding MAIL & RCPT commands, but not a DATA-go-ahead */ switch(sync_responses(sx, sx->cmd_count-1, 0)) { - case 3: sx->ok = TRUE; /* 2xx & 5xx => OK & progress made */ - case 2: sx->completed_addr = TRUE; /* 5xx (only) => progress made */ - break; + case RESP_HAD_2_AND_5: sx->ok = TRUE; /* OK & progress made */ + case RESP_BIT_HAD_5XX: sx->completed_addr = TRUE; /* progress made */ + break; - case 1: sx->ok = TRUE; /* 2xx (only) => OK, but if LMTP, */ - if (!sx->lmtp) sx->completed_addr = TRUE; /* can't tell about progress yet */ - case 0: break; /* No 2xx or 5xx, but no probs */ + case RESP_BIT_HAD_2XX: sx->ok = TRUE; /* OK, but if LMTP, */ + if (!sx->lmtp) /* can't tell about progress yet */ + sx->completed_addr = TRUE; + case RESP_NOERROR: break; /* No 2xx or 5xx, but no probs */ - case -1: goto END_OFF; /* Timeout on RCPT */ + case RESP_RCPT_TIMEO: goto END_OFF; /* Timeout on RCPT */ #ifndef DISABLE_PIPE_CONNECT - case -5: /* TLS first-read error */ - case -4: HDEBUG(D_transport) + case RESP_EHLO_ERR_TLS: /* TLS first-read error */ + case RESP_EPIPE_EHLO_ERR: HDEBUG(D_transport) debug_printf("failed reaping pipelined cmd responses\n"); #endif - default: goto RESPONSE_FAILED; /* I/O error, or any MAIL/DATA error */ + default: goto RESPONSE_FAILED; /* I/O error, or any MAIL/DATA error */ } } @@ -4489,7 +4531,26 @@ if (!sx->ok) break; case ERRNO_SMTPCLOSED: - message_error = Ustrncmp(smtp_command,"end ",4) == 0; + /* If the peer closed the TCP connection after end-of-data, but before + we could send QUIT, do TLS close, etc - call it a message error. + Otherwise, if all the recipients have been dealt with, call a close no + error at all; each address_item should have a suitable result already + (2xx: PENDING_OK, 4xx: DEFER, 5xx: FAIL) */ + + if (!(message_error = Ustrncmp(smtp_command,"end ",4) == 0)) + { + address_item * addr; + for (addr = sx->addrlist; addr; addr = addr->next) + if (addr->transport_return == PENDING_DEFER) + break; + if (!addr) /* all rcpts fates determined */ + { + log_write(0, LOG_MAIN, "peer close after all rcpt responses;" + " converting i/o-error to no-error"); + sx->ok = TRUE; + goto happy; + } + } break; #ifndef DISABLE_DKIM @@ -4513,7 +4574,8 @@ if (!sx->ok) break; } - /* Handle the cases that are treated as message errors. These are: + /* Handle the cases that are treated as message errors (as opposed to + host-errors). These are: (a) negative response or timeout after MAIL (b) negative response after DATA @@ -4617,17 +4679,24 @@ connection to a new process. However, not all servers can handle this (Exim can), so we do not pass such a connection on if the host matches hosts_nopass_tls. */ +happy: + DEBUG(D_transport) debug_printf("ok=%d send_quit=%d send_rset=%d continue_more=%d " "yield=%d first_address is %sNULL\n", sx->ok, sx->send_quit, sx->send_rset, f.continue_more, yield, sx->first_addr ? "not " : ""); if (sx->completed_addr && sx->ok && sx->send_quit) -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS if (mail_limit = continue_sequence >= sx->max_mail) { DEBUG(D_transport) debug_printf("reached limit %u for MAILs per conn\n", sx->max_mail); + /* We will close the smtp session and connection, and clear + continue_hostname. Then if there are further addrs for the message we will + loop to the top of this function and make a fresh connection. Any further + message found in the wait-tpt hintsdb would then do a transport_pass_socket + to get the connection fd back to the delivery process. */ } else #endif @@ -4635,9 +4704,9 @@ if (sx->completed_addr && sx->ok && sx->send_quit) smtp_compare_t t_compare = {.tblock = tblock, .current_sender_address = sender_address}; - if ( sx->first_addr /* more addrs for this message */ - || f.continue_more /* more addrs for continued-host */ - || tcw_done && tcw /* more messages for host */ + if ( sx->first_addr /* more addrs for this message */ + || f.continue_more /* more addrs for continued-host */ + || tcw_done && tcw /* more messages for host */ || ( #ifndef DISABLE_TLS ( tls_out.active.sock < 0 && !continue_proxy_cipher @@ -4646,7 +4715,7 @@ if (sx->completed_addr && sx->ok && sx->send_quit) && #endif transport_check_waiting(tblock->name, host->name, - sx->max_mail, new_message_id, + sx->max_mail, continue_next_id, (oicf)smtp_are_same_identities, (void*)&t_compare) ) ) { @@ -4684,7 +4753,7 @@ if (sx->completed_addr && sx->ok && sx->send_quit) if (sx->first_addr) /* More addresses still to be sent */ { /* for this message */ -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS /* Any that we marked as skipped, reset to do now */ for (address_item * a = sx->first_addr; a; a = a->next) if (a->transport_return == SKIP) @@ -4697,6 +4766,20 @@ if (sx->completed_addr && sx->ok && sx->send_quit) goto SEND_MESSAGE; } + /* If there is a next-message-id from the wait-transport hintsdb, + pretend caller said it has further message for us. Note that we lose + the TLS session (below), and that our caller will pass back the id to + the delivery process. If not, remember to later cancel the + next-message-id so that the transport-caller code (in deliver.c) does + not report it back up the pipe to the delivery process. + XXX It would be feasible to also report the other continue_* with the + _id - taking out the exec for the first continued-transport. But the + actual conn, and it's fd, is a problem. Maybe replace the transport + pipe with a unix-domain socket? */ + + if (!f.continue_more && continue_hostname && *continue_next_id) + f.continue_more = passback_tcw = TRUE; + /* Unless caller said it already has more messages listed for this host, pass the connection on to a new Exim process (below, the call to transport_pass_socket). If the caller has more ready, just return with @@ -4716,17 +4799,17 @@ if (sx->completed_addr && sx->ok && sx->send_quit) been used, which we do under TLSv1.3 for the gsasl SCRAM*PLUS methods. But we were always doing it anyway. */ - tls_close(sx->cctx.tls_ctx, - sx->send_tlsclose ? TLS_SHUTDOWN_WAIT : TLS_SHUTDOWN_WONLY); - sx->send_tlsclose = FALSE; - sx->cctx.tls_ctx = NULL; - tls_out.active.sock = -1; - smtp_peer_options = smtp_peer_options_wrap; - sx->ok = !sx->smtps - && smtp_write_command(sx, SCMD_FLUSH, "EHLO %s\r\n", sx->helo_data) - >= 0 - && smtp_read_response(sx, sx->buffer, sizeof(sx->buffer), - '2', ob->command_timeout); + tls_close(sx->cctx.tls_ctx, + sx->send_tlsclose ? TLS_SHUTDOWN_WAIT : TLS_SHUTDOWN_WONLY); + sx->send_tlsclose = FALSE; + sx->cctx.tls_ctx = NULL; + tls_out.active.sock = -1; + smtp_peer_options = smtp_peer_options_wrap; + sx->ok = !sx->smtps + && smtp_write_command(sx, SCMD_FLUSH, "EHLO %s\r\n", sx->helo_data) + >= 0 + && smtp_read_response(sx, sx->buffer, sizeof(sx->buffer), + '2', ob->command_timeout); if (sx->ok && f.continue_more) goto TIDYUP; /* More addresses for another run */ @@ -4758,8 +4841,8 @@ if (sx->completed_addr && sx->ok && sx->send_quit) propagate it from the initial */ if (sx->ok && transport_pass_socket(tblock->name, host->name, - host->address, new_message_id, socket_fd -#ifdef EXPERIMENTAL_ESMTP_LIMITS + host->address, continue_next_id, socket_fd +#ifndef DISABLE_ESMTP_LIMITS , sx->peer_limit_mail, sx->peer_limit_rcpt, sx->peer_limit_rcptdom #endif )) @@ -4791,8 +4874,7 @@ if (sx->completed_addr && sx->ok && sx->send_quit) sx->cctx.tls_ctx = NULL; (void)close(sx->cctx.sock); sx->cctx.sock = -1; - continue_transport = NULL; - continue_hostname = NULL; + continue_transport = continue_hostname = NULL; goto TIDYUP; } log_write(0, LOG_PANIC_DIE, "fork failed"); @@ -4904,7 +4986,6 @@ if (sx->send_quit || tcw_done && !tcw) HDEBUG(D_transport|D_acl|D_v) debug_printf_indent(" SMTP(close)>>\n"); (void)close(sx->cctx.sock); sx->cctx.sock = -1; -continue_transport = NULL; continue_hostname = NULL; smtp_debug_cmd_report(); @@ -4936,7 +5017,7 @@ if (dane_held) } #endif -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS if (mail_limit && sx->first_addr) { /* Reset the sequence count since we closed the connection. This is flagged @@ -4946,19 +5027,21 @@ if (mail_limit && sx->first_addr) continue_sequence = 1; /* for consistency */ clearflag(sx->first_addr, af_cont_conn); setflag(sx->first_addr, af_new_conn); /* clear * from logging */ - goto REPEAT_CONN; + goto REPEAT_CONN; /* open a fresh connection */ } #endif -return yield; +OUT: + if (!passback_tcw) continue_next_id[0] = '\0'; + return yield; TIDYUP: #ifdef SUPPORT_DANE -if (dane_held) for (address_item * a = sx->addrlist->next; a; a = a->next) - if (a->transport_return == DANE) - a->transport_return = PENDING_DEFER; + if (dane_held) for (address_item * a = sx->addrlist->next; a; a = a->next) + if (a->transport_return == DANE) + a->transport_return = PENDING_DEFER; #endif -return yield; + goto OUT; } @@ -5034,16 +5117,16 @@ Returns: the first address for this delivery */ static address_item * -prepare_addresses(address_item *addrlist, host_item *host) +prepare_addresses(address_item * addrlist, host_item * host) { -address_item *first_addr = NULL; +address_item * first_addr = NULL; for (address_item * addr = addrlist; addr; addr = addr->next) if (addr->transport_return == DEFER) { if (!first_addr) first_addr = addr; addr->transport_return = PENDING_DEFER; addr->basic_errno = 0; - addr->more_errno = (host->mx >= 0)? 'M' : 'A'; + addr->more_errno = host->mx >= 0 ? 'M' : 'A'; addr->message = NULL; #ifndef DISABLE_TLS addr->cipher = NULL; @@ -5075,24 +5158,17 @@ FALSE. */ BOOL smtp_transport_entry( - transport_instance *tblock, /* data for this instantiation */ - address_item *addrlist) /* addresses we are working on */ + transport_instance * tblock, /* data for this instantiation */ + address_item * addrlist) /* addresses we are working on */ { int defport; -int hosts_defer = 0; -int hosts_fail = 0; -int hosts_looked_up = 0; -int hosts_retry = 0; -int hosts_serial = 0; -int hosts_total = 0; -int total_hosts_tried = 0; +int hosts_defer = 0, hosts_fail = 0, hosts_looked_up = 0; +int hosts_retry = 0, hosts_serial = 0, hosts_total = 0, total_hosts_tried = 0; BOOL expired = TRUE; -uschar *expanded_hosts = NULL; -uschar *pistring; -uschar *tid = string_sprintf("%s transport", tblock->name); -smtp_transport_options_block *ob = SOB tblock->options_block; -host_item *hostlist = addrlist->host_list; -host_item *host = NULL; +uschar * expanded_hosts = NULL, * pistring; +uschar * tid = string_sprintf("%s transport", tblock->name); +smtp_transport_options_block * ob = SOB tblock->options_block; +host_item * hostlist = addrlist->host_list, * host = NULL; DEBUG(D_transport) { @@ -5132,7 +5208,7 @@ database if the delivery fails temporarily or if we are running with queue_smtp or a 2-stage queue run. This gets unset for certain kinds of error, typically those that are specific to the message. */ -update_waiting = TRUE; +update_waiting = TRUE; /* If a host list is not defined for the addresses - they must all have the same one in order to be passed to a single transport - or if the transport has @@ -5320,16 +5396,12 @@ retry_non_continued: && total_hosts_tried < ob->hosts_max_try_hardlimit; host = nexthost) { - int rc; - int host_af; - BOOL host_is_expired = FALSE; - BOOL message_defer = FALSE; - BOOL some_deferred = FALSE; - address_item *first_addr = NULL; - uschar *interface = NULL; - uschar *retry_host_key = NULL; - uschar *retry_message_key = NULL; - uschar *serialize_key = NULL; + int rc, host_af; + BOOL host_is_expired = FALSE, message_defer = FALSE, some_deferred = FALSE; + address_item * first_addr = NULL; + uschar * interface = NULL; + const uschar * retry_host_key = NULL, * retry_message_key = NULL; + uschar * serialize_key = NULL; /* Deal slightly better with a possible Linux kernel bug that results in intermittent TFO-conn fails deep into the TCP flow. Bug 2907 tracks. @@ -5525,8 +5597,9 @@ retry_non_continued: host_af = Ustrchr(host->address, ':') ? AF_INET6 : AF_INET; { - uschar * s = ob->interface; - if (s && *s) + uschar * s; + GET_OPTION("interface"); + if ((s = ob->interface) && *s) { if (!smtp_get_interface(s, host_af, addrlist, &interface, tid)) return FALSE; @@ -5636,7 +5709,14 @@ retry_non_continued: out the result of previous attempts, and finding the first address that is still to be delivered. */ - first_addr = prepare_addresses(addrlist, host); + if (!(first_addr = prepare_addresses(addrlist, host))) + { + /* Obscure situation; at least one case (bug 3059, fixed) where + a previous host try returned DEFER, but having moved all + recipients away from DEFER (the waiting-to-be-done state). */ + DEBUG(D_transport) debug_printf("no pending recipients\n"); + goto END_TRANSPORT; + } DEBUG(D_transport) debug_printf("delivering %s to %s [%s] (%s%s)\n", message_id, host->name, host->address, addrlist->address, @@ -5688,7 +5768,7 @@ retry_non_continued: { host_item * thost; /* Make a copy of the host if it is local to this invocation - of the transport. */ + of the transport. */ if (expanded_hosts) { @@ -5817,9 +5897,7 @@ retry_non_continued: ob->expand_retry_include_ip_address, &incl_ip) != OK) incl_ip = TRUE; /* error; use most-specific retry record */ - retry_host_key = incl_ip - ? string_sprintf("T:%S:%s%s", host->name, host->address, pistring) - : string_sprintf("T:%S%s", host->name, pistring); + retry_host_key = retry_host_key_build(host, incl_ip, pistring); } /* If a delivery of another message over an existing SMTP connection @@ -5865,10 +5943,8 @@ retry_non_continued: ob->expand_retry_include_ip_address, &incl_ip) != OK) incl_ip = TRUE; /* error; use most-specific retry record */ - retry_message_key = incl_ip - ? string_sprintf("T:%S:%s%s:%s", host->name, host->address, pistring, - message_id) - : string_sprintf("T:%S%s:%s", host->name, pistring, message_id); + retry_message_key = string_sprintf("%s:%s", + retry_host_key_build(host, incl_ip, pistring), message_id); } retry_add_item(addrlist, retry_message_key, rf_message | rf_host | delete_flag); @@ -5882,20 +5958,14 @@ retry_non_continued: if (rc == OK) for (address_item * addr = addrlist; addr; addr = addr->next) if (addr->transport_return == DEFER) - { - some_deferred = TRUE; - break; - } + { some_deferred = TRUE; break; } /* If no addresses deferred or the result was ERROR, return. We do this for ERROR because a failing filter set-up or add_headers expansion is likely to fail for any host we try. */ if (rc == ERROR || (rc == OK && !some_deferred)) - { - DEBUG(D_transport) debug_printf("Leaving %s transport\n", tblock->name); - return TRUE; /* Each address has its status */ - } + goto END_TRANSPORT; /* If the result was DEFER or some individual addresses deferred, let the loop run to try other hosts with the deferred addresses, except for the @@ -5915,7 +5985,7 @@ retry_non_continued: if ((rc == DEFER || some_deferred) && nexthost) { BOOL timedout; - retry_config *retry = retry_find_config(host->name, NULL, 0, 0); + retry_config * retry = retry_find_config(host->name, NULL, 0, 0); if (retry && retry->rules) { diff --git a/src/src/transports/smtp.h b/src/src/transports/smtp.h index cb1d72625..1d892d567 100644 --- a/src/src/transports/smtp.h +++ b/src/src/transports/smtp.h @@ -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 */ @@ -109,6 +109,7 @@ typedef struct { uschar *tls_privatekey; uschar *tls_require_ciphers; # ifndef DISABLE_TLS_RESUME +# define HNE_DEFAULT US"${if and {{match{$host}{.outlook.com\\$}} {match{$item}{\\N^250-([\\w.]+)\\s\\N}}} {$1}}" uschar *host_name_extract; uschar *tls_resumption_hosts; # endif @@ -139,7 +140,7 @@ typedef struct { /* smtp connect context */ typedef struct { - uschar * from_addr; + const uschar * from_addr; address_item * addrlist; smtp_connect_args conn_args; @@ -175,7 +176,7 @@ typedef struct { BOOL pending_BDAT:1; BOOL RCPT_452:1; BOOL good_RCPT:1; -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS BOOL single_rcpt_domain:1; #endif BOOL completed_addr:1; @@ -184,7 +185,7 @@ typedef struct { BOOL send_tlsclose:1; unsigned peer_offered; -#ifdef EXPERIMENTAL_ESMTP_LIMITS +#ifndef DISABLE_ESMTP_LIMITS unsigned peer_limit_mail; unsigned peer_limit_rcpt; unsigned peer_limit_rcptdom; @@ -224,7 +225,7 @@ typedef struct { } smtp_context; extern int smtp_setup_conn(smtp_context *, BOOL); -extern int smtp_write_mail_and_rcpt_cmds(smtp_context *, int *); +extern sw_mrc_t smtp_write_mail_and_rcpt_cmds(smtp_context *, int *); extern int smtp_reap_early_pipe(smtp_context *, int *); diff --git a/src/src/transports/smtp_socks.c b/src/src/transports/smtp_socks.c index 22ee74bd8..8848dd7a5 100644 --- a/src/src/transports/smtp_socks.c +++ b/src/src/transports/smtp_socks.c @@ -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 */ @@ -229,6 +229,7 @@ blob early_data; if (!timeout) timeout = 24*60*60; /* use 1 day for "indefinite" */ tmo = time(NULL) + timeout; +GET_OPTION("socks_proxy"); if (!(proxy_list = expand_string(ob->socks_proxy))) { log_write(0, LOG_MAIN|LOG_PANIC, "Bad expansion for socks_proxy in %s", diff --git a/src/src/transports/tf_maildir.c b/src/src/transports/tf_maildir.c index df932b13e..21d7273a2 100644 --- a/src/src/transports/tf_maildir.c +++ b/src/src/transports/tf_maildir.c @@ -2,8 +2,8 @@ * Exim - an Internet mail transport agent * *************************************************/ +/* Copyright (c) The Exim Maintainers 2020 - 2023 */ /* 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 */ diff --git a/src/src/tree.c b/src/src/tree.c index 13fc28cc2..8f73a46aa 100644 --- a/src/src/tree.c +++ b/src/src/tree.c @@ -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 - 2015 */ /* See the file NOTICE for conditions of use and distribution. */ /* SPDX-License-Identifier: GPL-2.0-or-later */ @@ -48,7 +48,7 @@ if (!tree_insertnode(&tree_nonrecipients, node)) store_reset(rpoint); Argument: s string to add - addr the address is is a duplicate of + addr the address it is a duplicate of Returns: nothing */ @@ -65,6 +65,7 @@ if (!tree_insertnode(&tree_duplicates, node)) store_reset(rpoint); +#ifndef COMPILE_UTILITY /************************************************* * Add entry to unusable addresses tree * *************************************************/ @@ -76,12 +77,11 @@ Returns: nothing */ void -tree_add_unusable(const host_item *h) +tree_add_unusable(const host_item * h) { rmark rpoint = store_mark(); -tree_node *node; -uschar s[256]; -sprintf(CS s, "T:%.200s:%s", h->name, h->address); +tree_node * node; +const uschar * s = retry_host_key_build(h, TRUE, NULL); node = store_get(sizeof(tree_node) + Ustrlen(s), is_tainted(h->name) || is_tainted(h->address) ? GET_TAINTED : GET_UNTAINTED); Ustrcpy(node->name, s); @@ -89,7 +89,7 @@ node->data.val = h->why; if (h->status == hstatus_unusable_expired) node->data.val += 256; if (!tree_insertnode(&tree_unusable, node)) store_reset(rpoint); } - +#endif /************************************************* diff --git a/src/src/verify.c b/src/src/verify.c index c420fcac1..b1e5d6802 100644 --- a/src/src/verify.c +++ b/src/src/verify.c @@ -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 - 2023 */ /* See the file NOTICE for conditions of use and distribution. */ /* SPDX-License-Identifier: GPL-2.0-or-later */ @@ -105,8 +105,8 @@ Return: TRUE if result found */ static BOOL -cached_callout_lookup(address_item * addr, uschar * address_key, - uschar * from_address, int * opt_ptr, uschar ** pm_ptr, +cached_callout_lookup(address_item * addr, const uschar * address_key, + const uschar * from_address, int * opt_ptr, uschar ** pm_ptr, int * yield, uschar ** failure_ptr, dbdata_callout_cache * new_domain_record, int * old_domain_res) { @@ -278,10 +278,10 @@ return FALSE; */ static void cache_callout_write(dbdata_callout_cache * dom_rec, const uschar * domain, - int done, dbdata_callout_cache_address * addr_rec, uschar * address_key) + int done, dbdata_callout_cache_address * addr_rec, const uschar * address_key) { open_db dbblock; -open_db *dbm_file = NULL; +open_db * dbm_file = NULL; /* If we get here with done == TRUE, a successful callout happened, and yield will be set OK or FAIL according to the response to the RCPT command. @@ -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"); @@ -368,6 +368,7 @@ if (addr->transport == cutthrough.addr.transport) host_af = Ustrchr(host->address, ':') ? AF_INET6 : AF_INET; + GET_OPTION("interface"); if ( !smtp_get_interface(tf->interface, host_af, addr, &interface, US"callout") || !smtp_get_port(tf->port, addr, &port, US"callout") @@ -502,11 +503,11 @@ do_callout(address_item *addr, host_item *host_list, transport_feedback *tf, int yield = OK; int old_domain_cache_result = ccache_accept; BOOL done = FALSE; -uschar *address_key; -uschar *from_address; -uschar *random_local_part = NULL; -const uschar *save_deliver_domain = deliver_domain; -uschar **failure_ptr = options & vopt_is_recipient +const uschar * address_key; +const uschar * from_address; +uschar * random_local_part = NULL; +const uschar * save_deliver_domain = deliver_domain; +uschar ** failure_ptr = options & vopt_is_recipient ? &recipient_verify_failure : &sender_verify_failure; dbdata_callout_cache new_domain_record; dbdata_callout_cache_address new_address_record; @@ -579,10 +580,14 @@ else with a random local part, ensure that such a local part is available. If not, log the fact, but carry on without randomising. */ - if (options & vopt_callout_random && callout_random_local_part) - if (!(random_local_part = expand_string(callout_random_local_part))) + if (options & vopt_callout_random) + { + GET_OPTION("callout_random_local_part"); + if ( callout_random_local_part + && !(random_local_part = expand_string(callout_random_local_part))) log_write(0, LOG_MAIN|LOG_PANIC, "failed to expand " "callout_random_local_part: %s", expand_string_message); + } /* Compile regex' used by client-side smtp */ @@ -660,6 +665,7 @@ coding means skipping this whole loop and doing the append separately. */ deliver_domain = addr->domain; transport_name = addr->transport->name; + GET_OPTION("interface"); if ( !smtp_get_interface(tf->interface, host_af, addr, &interface, US"callout") || !smtp_get_port(tf->port, addr, &port, US"callout") @@ -677,7 +683,7 @@ coding means skipping this whole loop and doing the append separately. */ sx->conn_args.interface = interface; sx->helo_data = tf->helo_data; sx->conn_args.tblock = addr->transport; - sx->conn_args.sock = -1; + sx->cctx.sock = sx->conn_args.sock = -1; sx->verify = TRUE; tls_retry_connection: @@ -771,7 +777,7 @@ tls_retry_connection: if (random_local_part) { - uschar * main_address = addr->address; + const uschar * main_address = addr->address; const uschar * rcpt_domain = addr->domain; #ifdef SUPPORT_I18N @@ -823,7 +829,7 @@ tls_retry_connection: /* Remember when we last did a random test */ new_domain_record.random_stamp = time(NULL); - if (smtp_write_mail_and_rcpt_cmds(sx, &yield) == 0) + if (smtp_write_mail_and_rcpt_cmds(sx, &yield) == sw_mrc_ok) switch(addr->transport_return) { case PENDING_OK: /* random was accepted, unfortunately */ @@ -891,33 +897,34 @@ tls_retry_connection: done = FALSE; switch(smtp_write_mail_and_rcpt_cmds(sx, &yield)) { - case 0: switch(addr->transport_return) /* ok so far */ - { - case PENDING_OK: done = TRUE; - new_address_record.result = ccache_accept; - break; - case FAIL: done = TRUE; - yield = FAIL; - *failure_ptr = US"recipient"; - new_address_record.result = ccache_reject; - break; - default: break; - } - break; + case sw_mrc_ok: + switch(addr->transport_return) /* ok so far */ + { + case PENDING_OK: done = TRUE; + new_address_record.result = ccache_accept; + break; + case FAIL: done = TRUE; + yield = FAIL; + *failure_ptr = US"recipient"; + new_address_record.result = ccache_reject; + break; + default: break; + } + break; - case -1: /* MAIL response error */ - *failure_ptr = US"mail"; - if (errno == 0 && sx->buffer[0] == '5') - { - setflag(addr, af_verify_nsfail); - if (from_address[0] == 0) - new_domain_record.result = ccache_reject_mfnull; - } - break; - /* non-MAIL read i/o error */ - /* non-MAIL response timeout */ - /* internal error; channel still usable */ - default: break; /* transmit failed */ + case sw_mrc_bad_mail: /* MAIL response error */ + *failure_ptr = US"mail"; + if (errno == 0 && sx->buffer[0] == '5') + { + setflag(addr, af_verify_nsfail); + if (from_address[0] == 0) + new_domain_record.result = ccache_reject_mfnull; + } + break; + /* non-MAIL read i/o error */ + /* non-MAIL response timeout */ + /* internal error; channel still usable */ + default: break; /* transmit failed */ } } @@ -942,7 +949,7 @@ tls_retry_connection: if (done) { - uschar * main_address = addr->address; + const uschar * main_address = addr->address; /*XXX oops, affixes */ addr->address = string_sprintf("postmaster@%.1000s", addr->domain); @@ -955,7 +962,7 @@ tls_retry_connection: sx->completed_addr = FALSE; sx->avoid_option = OPTION_SIZE; - if( smtp_write_mail_and_rcpt_cmds(sx, &yield) == 0 + if( smtp_write_mail_and_rcpt_cmds(sx, &yield) == sw_mrc_ok && addr->transport_return == PENDING_OK ) done = TRUE; @@ -1152,7 +1159,7 @@ no_conn: /* Ensure no cutthrough on multiple verifies that were incompatible */ if (options & vopt_callout_recipsender) cancel_cutthrough_connection(TRUE, US"not usable for cutthrough"); - if (sx->send_quit) + if (sx->send_quit && sx->cctx.sock >= 0) if (smtp_write_command(sx, SCMD_FLUSH, "QUIT\r\n") != -1) /* Wait a short time for response, and discard it */ smtp_read_response(sx, sx->buffer, sizeof(sx->buffer), '2', 1); @@ -1286,7 +1293,7 @@ return FALSE; static BOOL -_cutthrough_puts(uschar * cp, int n) +_cutthrough_puts(const uschar * cp, int n) { while(n--) { @@ -1301,7 +1308,7 @@ return TRUE; /* Buffered output of counted data block. Return boolean success */ static BOOL -cutthrough_puts(uschar * cp, int n) +cutthrough_puts(const uschar * cp, int n) { if (cutthrough.cctx.sock < 0) return TRUE; if (_cutthrough_puts(cp, n)) return TRUE; @@ -1407,9 +1414,9 @@ return cutthrough_response(&cutthrough.cctx, '3', NULL, CUTTHROUGH_DATA_TIMEOUT) /* tctx arg only to match write_chunk() */ static BOOL -cutthrough_write_chunk(transport_ctx * tctx, uschar * s, int len) +cutthrough_write_chunk(transport_ctx * tctx, const uschar * s, int len) { -uschar * s2; +const uschar * s2; while(s && (s2 = Ustrchr(s, '\n'))) { if(!cutthrough_puts(s, s2-s) || !cutthrough_put_nl()) @@ -1697,16 +1704,16 @@ int yield = OK; int verify_type = expn ? v_expn : f.address_test_mode ? v_none : options & vopt_is_recipient ? v_recipient : v_sender; -address_item *addr_list; -address_item *addr_new = NULL; -address_item *addr_remote = NULL; -address_item *addr_local = NULL; -address_item *addr_succeed = NULL; -uschar **failure_ptr = options & vopt_is_recipient +address_item * addr_list; +address_item * addr_new = NULL; +address_item * addr_remote = NULL; +address_item * addr_local = NULL; +address_item * addr_succeed = NULL; +uschar ** failure_ptr = options & vopt_is_recipient ? &recipient_verify_failure : &sender_verify_failure; -uschar *ko_prefix, *cr; -uschar *address = vaddr->address; -uschar *save_sender; +uschar * ko_prefix, * cr; +const uschar * address = vaddr->address; +const uschar * save_sender; uschar null_sender[] = { 0 }; /* Ensure writeable memory */ /* Clear, just in case */ @@ -1751,9 +1758,8 @@ may have been set by domains and local part tests during an ACL. */ if (global_rewrite_rules) { - uschar *old = address; - /* deconst ok as address was not const */ - address = US rewrite_address(address, options & vopt_is_recipient, FALSE, + const uschar * old = address; + address = rewrite_address(address, options & vopt_is_recipient, FALSE, global_rewrite_rules, rewrite_existflags); if (address != old) { @@ -1919,8 +1925,8 @@ while (addr_new) if (tf.hosts && (!host_list || tf.hosts_override)) { uschar *s; - const uschar *save_deliver_domain = deliver_domain; - uschar *save_deliver_localpart = deliver_localpart; + const uschar * save_deliver_domain = deliver_domain; + const uschar * save_deliver_localpart = deliver_localpart; host_list = NULL; /* Ignore the router's hosts */ @@ -2455,11 +2461,11 @@ verify_check_notblind(BOOL case_sensitive) for (int i = 0; i < recipients_count; i++) { BOOL found = FALSE; - uschar *address = recipients_list[i].address; + const uschar * address = recipients_list[i].address; for (header_line * h = header_list; !found && h; h = h->next) { - uschar *colon, *s; + uschar * colon, * s; if (h->type != htype_to && h->type != htype_cc) continue; @@ -2533,7 +2539,7 @@ Returns: pointer to an address item, or NULL */ address_item * -verify_checked_sender(uschar *sender) +verify_checked_sender(const uschar * sender) { for (address_item * addr = sender_verified_list; addr; addr = addr->next) if (Ustrcmp(sender, addr->address) == 0) return addr; @@ -2606,12 +2612,12 @@ for (int i = 0; i < 3 && !done; i++) f.parse_allow_group = TRUE; - while (*s != 0) + while (*s) { - address_item *vaddr; + address_item * vaddr; while (isspace(*s) || *s == ',') s++; - if (*s == 0) break; /* End of header */ + if (!*s) break; /* End of header */ ss = parse_find_address_end(s, FALSE); @@ -2622,7 +2628,7 @@ for (int i = 0; i < 3 && !done; i++) while (isspace(ss[-1])) ss--; terminator = *ss; - *ss = 0; + *ss = '\0'; HDEBUG(D_verify) debug_printf("verifying %.*s header address %s\n", (int)(endname - h->text), h->text, s); @@ -2867,17 +2873,17 @@ if (sscanf(CS buffer + qlen, "%d , %d%n", &received_sender_port, goto END_OFF; p = buffer + qlen + n; -while(isspace(*p)) p++; +Uskip_whitespace(&p); if (*p++ != ':') goto END_OFF; -while(isspace(*p)) p++; +Uskip_whitespace(&p); if (Ustrncmp(p, "USERID", 6) != 0) goto END_OFF; p += 6; -while(isspace(*p)) p++; +Uskip_whitespace(&p); if (*p++ != ':') goto END_OFF; -while (*p != 0 && *p != ':') p++; -if (*p++ == 0) goto END_OFF; -while(isspace(*p)) p++; -if (*p == 0) goto END_OFF; +while (*p && *p != ':') p++; +if (!*p++) goto END_OFF; +Uskip_whitespace(&p); +if (!*p) goto END_OFF; /* The rest of the line is the data we want. We turn it into printing characters when we save it, so that it cannot mess up the format of any logging @@ -2972,7 +2978,7 @@ if (*ss == '@') a (possibly masked) comparison with the current IP address. */ if (string_is_ip_address(ss, &maskoffset) != 0) - return (host_is_in_net(cb->host_address, ss, maskoffset)? OK : FAIL); + return host_is_in_net(cb->host_address, ss, maskoffset) ? OK : FAIL; /* The pattern is not an IP address. A common error that people make is to omit one component of an IPv4 address, either by accident, or believing that, for @@ -2983,13 +2989,25 @@ ancient specification.) To aid in debugging these cases, we give a specific error if the pattern contains only digits and dots or contains a slash preceded only by digits and dots (a slash at the start indicates a file name and of course slashes may be present in lookups, but not preceded only by digits and -dots). */ +dots). Then the equivalent for IPv6 (roughly). */ -for (t = ss; isdigit(*t) || *t == '.'; ) t++; -if (!*t || (*t == '/' && t != ss)) +if (Ustrchr(ss, ':')) { - *error = string_sprintf("malformed IPv4 address or address mask: %.*s", (int)(t - ss), ss); - return ERROR; + for (t = ss; isxdigit(*t) || *t == ':' || *t == '.'; ) t++; + if (!*t || (*t == '/' || *t == '%') && t != ss) + { + *error = string_sprintf("malformed IPv6 address or address mask: %.*s", (int)(t - ss), ss); + return ERROR; + } + } +else + { + for (t = ss; isdigit(*t) || *t == '.'; ) t++; + if (!*t || (*t == '/' && t != ss)) + { + *error = string_sprintf("malformed IPv4 address or address mask: %.*s", (int)(t - ss), ss); + return ERROR; + } } /* See if there is a semicolon in the pattern, separating a searchtype @@ -3006,6 +3024,8 @@ if ((semicolon = Ustrchr(ss, ';'))) endname = semicolon; opts = NULL; } +else + opts = NULL; /* If we are doing an IP address only match, then all lookups must be IP address lookups, even if there is no "net-". */ @@ -3061,9 +3081,9 @@ if (iplookup) { filename = semicolon + 1; key = filename; - while (*key != 0 && !isspace(*key)) key++; + Uskip_nonwhite(&key); filename = string_copyn(filename, key - filename); - while (isspace(*key)) key++; + Uskip_whitespace(&key); } else if (mac_islookup(search_type, lookup_querystyle)) { @@ -3503,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; diff --git a/src/src/xclient.c b/src/src/xclient.c index 2a8be9b0e..cca5dd887 100644 --- a/src/src/xclient.c +++ b/src/src/xclient.c @@ -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 */ @@ -172,7 +172,7 @@ for (state = XCLIENT_SKIP_SPACES; *s; ) uschar * val; word = ++s; /* skip the = */ - while (*s && !isspace(*s)) s++; + Uskip_nonwhite(&s); len = s - word; DEBUG(D_transport) debug_printf(" XCLIENT: \tvalue %.*s\n", len, word); @@ -248,7 +248,7 @@ for (state = XCLIENT_SKIP_SPACES; *s; ) } case XCLIENT_SKIP_SPACES: - while (*s && isspace (*s)) s++; + Uskip_whitespace(&s); state = XCLIENT_READ_COMMAND; break; diff --git a/src/util/mailtest b/src/util/mailtest new file mode 100755 index 000000000..0c50d93f5 --- /dev/null +++ b/src/util/mailtest @@ -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 + +Specifies the host to connect to. Must be specified and must be IP-resolvable. + +=item B<-m, --ehlo>=I + +Specified the machine name to use as the B value. Defaults to the fully-qualified name of the host running the command. + +=item B<-r, --rcptto>=I + +Specifies the recipient of message. This is used as the B value. + +=item B<-v, --vrfy> + +Uses the I parameter for the value in a B request. This disables the sending of an email. + +=item B<-e, --expn> + +Uses the I parameter for the value in an B request. This disables the sending of an email. + +=item B<-f, --mailfrom>=I + +Specified the value to use in the B 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 + +Specified the value to use in the message headers. Defaults to the B<-f> I value unless the B<-B> option is used. + +=item B<-B, --bounce> + +Replace the B<--mailfrom> I with B<\<\>> and the B<--from833> I with B where the host is the value of B<--ehlo> I + +=item B<-p, --port>=I + +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. + +=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 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 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 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 + +Provides the path value for a B command. + +=item B<-W, --output>=I + +Provides the output file where the B data should be stored. + +=back + +=head1 DESCRIPTION + +B 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 only requires modules that should be in all normal distributions. + +=head1 AUTHOR + +Bernard Quatermass + +=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/README b/test/README index c0bfa04f1..67df47453 100644 --- a/test/README +++ b/test/README @@ -1155,7 +1155,7 @@ are of the following kinds: before proceeding. (3) A line containing "*data" and a number specifies that the client is - expected to send that many byte; the server discards them + expected to send that many bytes; the server discards them (4) A line containing "*eof" specifies that the client is expected to close the connection at this point. diff --git a/test/aux-fixed/2302.emptydbmnzlookup b/test/aux-fixed/2302.emptydbmnzlookup new file mode 100644 index 000000000..9f64dc3fd Binary files /dev/null and b/test/aux-fixed/2302.emptydbmnzlookup differ diff --git a/test/aux-fixed/2500.dir/..subdir/regfile b/test/aux-fixed/2500.dir/..subdir/regfile new file mode 100644 index 000000000..e69de29bb diff --git a/test/aux-fixed/4040/acme-response b/test/aux-fixed/4040/acme-response new file mode 100644 index 000000000..d3f618d8c --- /dev/null +++ b/test/aux-fixed/4040/acme-response @@ -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 index 000000000..d3f618d8c --- /dev/null +++ b/test/aux-fixed/4040/sub/acme-response @@ -0,0 +1,3 @@ +line 1 +line 2 +last line diff --git a/test/confs/0249 b/test/confs/0249 index 1d7491be6..aecf90d81 100644 --- a/test/confs/0249 +++ b/test/confs/0249 @@ -6,6 +6,7 @@ primary_hostname = myhost.test.ex # ----- Main settings ----- +acl_smtp_rcpt = accept # ----- Rewrite ----- @@ -14,5 +15,6 @@ begin rewrite *@a.domain $1@b.domain *@c.domain $local_part@d.domain +a@b y@z T # End diff --git a/test/confs/0289 b/test/confs/0289 index 44e40a528..a96799690 100644 --- a/test/confs/0289 +++ b/test/confs/0289 @@ -8,7 +8,11 @@ primary_hostname = myhost.test.ex # ----- Main settings ----- acl_smtp_rcpt = accept +.ifdef DYNAMIC_OPTION +recipients_max = ${if def:sender_host_address {1}{2}} +.else recipients_max = 1 +.endif # ------ Routers ------ diff --git a/test/confs/0475 b/test/confs/0475 index dfca55c78..58eb42052 100644 --- a/test/confs/0475 +++ b/test/confs/0475 @@ -7,6 +7,7 @@ acl_smtp_rcpt = $local_part +log_selector = +unknown_in_list # ----- ACL ----- @@ -18,4 +19,10 @@ a1: a2: deny hosts = 1.2.3/24 +a3: + deny hosts = <; fe80::1 + +a4: + deny hosts = <; fe80:1 + # End diff --git a/test/confs/0606 b/test/confs/0606 index 6388962db..63aa94897 100644 --- a/test/confs/0606 +++ b/test/confs/0606 @@ -19,10 +19,21 @@ not_smtp: begin routers +dump_bounce: + driver = redirect + senders = : + data = :blackhole: + hide_verifies: driver = accept verify_only +bad: + driver = accept + local_parts = bad + set = r_srs_domain = ${lookup mysql{wrong things + transport = local_delivery + alias: driver = redirect debug_print = DEBUG: $r_r1 $r_r2 @@ -66,4 +77,8 @@ local_delivery: headers_add = X-r1: <$r_r1>\nX-r2: <$r_r2>\nX-r3: <$r_r3> +# ----- Retry ----- +begin retry +* * F,5d,10s + # End diff --git a/test/confs/0612 b/test/confs/0612 index 786b2e58e..f4f427246 100644 --- a/test/confs/0612 +++ b/test/confs/0612 @@ -24,14 +24,18 @@ queue_only queue_run_in_order +.ifdef _HAVE_EVENT event_action = ${acl {ev_log}} +.endif # begin acl +.ifdef _HAVE_EVENT ev_log: accept logwrite = event $event_name +.endif rcpt: accept hosts = HOSTIPV4 @@ -76,20 +80,26 @@ begin transports smtp: driver = smtp +.ifdef _HAVE_EVENT event_action = ${acl {ev_log}} +.endif hosts_try_fastopen = : bad_tpt: driver = smtp connect_timeout = 1s +.ifdef _HAVE_EVENT event_action = ${acl {ev_log}} +.endif tofile: driver = appendfile file = DIR/test-mail/$local_part create_file = DIR/test-mail user = CALLER +.ifdef _HAVE_EVENT event_action = ${acl {ev_log}} +.endif begin retry diff --git a/test/confs/0615 b/test/confs/0615 index a1aae2acd..902e097ac 100644 --- a/test/confs/0615 +++ b/test/confs/0615 @@ -43,7 +43,7 @@ send_to_server: hosts = 127.0.0.1 port = PORT_D hosts_try_fastopen = : - # assumes that HOSTIPV4 can sent to 127.0.0.1 + # assumes that HOSTIPV4 can send to 127.0.0.1 interface = ${if eq {$sender_address_domain}{dustybelt.tld} {127.0.0.1}{HOSTIPV4}} # ----- Retry ----- diff --git a/test/confs/0633 b/test/confs/0633 index e56abaf80..04fe61aa1 100644 --- a/test/confs/0633 +++ b/test/confs/0633 @@ -7,6 +7,8 @@ acl_smtp_rcpt = accept acl_smtp_data = check_data +log_selector = +received_recipients + # ----- ACL ----- begin acl diff --git a/test/confs/0637 b/test/confs/0637 new file mode 100644 index 000000000..a47d7d128 --- /dev/null +++ b/test/confs/0637 @@ -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/0900 b/test/confs/0900 index 2d53eff1a..80c0211a9 100644 --- a/test/confs/0900 +++ b/test/confs/0900 @@ -32,7 +32,9 @@ primary_hostname = testhost.test.ex domainlist local_domains = @ : test.ex acl_smtp_rcpt = check_recipient +.ifdef _HAVE_PRDR acl_smtp_data_prdr = check_prdr +.endif acl_smtp_data = check_data trusted_users = CALLER queue_only @@ -55,6 +57,10 @@ ALLOW begin acl check_recipient: +.ifdef RETRY2 + drop condition = ${if eq {SERVER}{server}} + message = 550 we really do not like you +.endif accept hosts = : accept domains = +local_domains deny message = relay not permitted @@ -106,7 +112,11 @@ local_delivery: remote_smtp: driver = smtp +.ifdef RETRY2 + hosts = 127.0.0.1 : HOSTIPV4 +.else hosts = 127.0.0.1 +.endif port = PORT_S hosts_try_fastopen = : .ifdef _HAVE_TLS diff --git a/test/confs/0901 b/test/confs/0901 index 361a9bf6c..36a2fddac 100644 --- a/test/confs/0901 +++ b/test/confs/0901 @@ -29,7 +29,9 @@ primary_hostname = testhost.test.ex domainlist local_domains = @ : test.ex acl_smtp_rcpt = check_recipient +.ifdef _HAVE_PRDR acl_smtp_data_prdr = check_prdr +.endif acl_smtp_data = check_data trusted_users = CALLER queue_only diff --git a/test/confs/0906 b/test/confs/0906 deleted file mode 100644 index 57f359ff0..000000000 --- a/test/confs/0906 +++ /dev/null @@ -1,115 +0,0 @@ -# Exim test configuration 0906 -SERVER= - -exim_path = EXIM_PATH -keep_environment = -host_lookup_order = bydns -spool_directory = DIR/spool -log_file_path = DIR/spool/log/SERVER%slog -gecos_pattern = "" -gecos_name = CALLER_NAME -chunking_advertise_hosts = * -tls_advertise_hosts = ${if eq {SRV}{tls} {*}} -.ifdef _HAVE_PIPE_CONNECT -pipelining_connect_advertise_hosts = -.endif -.ifdef _HAVE_DMARC -dmarc_tld_file = -.endif -.ifdef _EXP_LIMITS -limits_advertise_hosts = !* -.endif - -# ----- Main settings ----- - -spool_wireformat = true - -primary_hostname = testhost.test.ex -domainlist local_domains = @ : test.ex - -acl_smtp_rcpt = acl_r - -.ifdef _HAVE_DKIM -log_selector = +received_recipients +dkim_verbose -.else -log_selector = +received_recipients -.endif - - -.ifdef _OPT_MAIN_TLS_CERTIFICATE -tls_certificate = DIR/aux-fixed/cert1 -tls_privatekey = DIR/aux-fixed/cert1 -.endif - -queue_run_in_order = true - -# ----- ACL ----- - -begin acl -acl_r: - accept condition = ${if != {$received_port}{PORT_S}} - control = queue_only - accept - -# ----- Routers ----- - -begin routers - -to_server: - driver = accept - condition = ${if = {$received_port}{PORT_S}} - transport = remote_smtp${if eq {OPT}{dkim} {_dkim}} - errors_to = "" - -fail_remote_domains: - driver = redirect - domains = ! +local_domains - data = :fail: unrouteable mail domain "$domain" - -localuser: - driver = accept - transport = local_delivery - - -# ----- Transports ----- - -begin transports - -local_delivery: - driver = appendfile - file = DIR/test-mail/$local_part - create_file = DIR/test-mail - headers_add = "X-body-linecount: $body_linecount\n\ - X-message-linecount: $message_linecount\n\ - X-received-count: $received_count" - return_path_add - user = CALLER - -remote_smtp: - driver = smtp - hosts = 127.0.0.1 - port = PORT_D - hosts_try_fastopen = : - allow_localhost - -remote_smtp_dkim: - driver = smtp - hosts = 127.0.0.1 - port = PORT_D - hosts_try_fastopen = : - allow_localhost - -.ifdef OPT - dkim_domain = test.ex - dkim_selector = sel - dkim_private_key = DIR/aux-fixed/dkim/dkim.private -.ifndef HEADERS_MAXSIZE - dkim_sign_headers = LIST -.endif -.endif - -# ----- Retry ----- - -begin retry -* * F,30m,5m; -# End diff --git a/test/confs/0906 b/test/confs/0906 new file mode 120000 index 000000000..1bb987150 --- /dev/null +++ b/test/confs/0906 @@ -0,0 +1 @@ +0900 \ No newline at end of file diff --git a/test/confs/0907 b/test/confs/0907 deleted file mode 100644 index f813322d2..000000000 --- a/test/confs/0907 +++ /dev/null @@ -1,4 +0,0 @@ -# This file contains a BOM at the very beginning -.include DIR/aux-var/std_conf_prefix -tls_advertise_hosts = -keep_environment = diff --git a/test/confs/0908 b/test/confs/0908 index 27af1d5f2..57f359ff0 100644 --- a/test/confs/0908 +++ b/test/confs/0908 @@ -1 +1,115 @@ -.include DIR/confs/0907 +# Exim test configuration 0906 +SERVER= + +exim_path = EXIM_PATH +keep_environment = +host_lookup_order = bydns +spool_directory = DIR/spool +log_file_path = DIR/spool/log/SERVER%slog +gecos_pattern = "" +gecos_name = CALLER_NAME +chunking_advertise_hosts = * +tls_advertise_hosts = ${if eq {SRV}{tls} {*}} +.ifdef _HAVE_PIPE_CONNECT +pipelining_connect_advertise_hosts = +.endif +.ifdef _HAVE_DMARC +dmarc_tld_file = +.endif +.ifdef _EXP_LIMITS +limits_advertise_hosts = !* +.endif + +# ----- Main settings ----- + +spool_wireformat = true + +primary_hostname = testhost.test.ex +domainlist local_domains = @ : test.ex + +acl_smtp_rcpt = acl_r + +.ifdef _HAVE_DKIM +log_selector = +received_recipients +dkim_verbose +.else +log_selector = +received_recipients +.endif + + +.ifdef _OPT_MAIN_TLS_CERTIFICATE +tls_certificate = DIR/aux-fixed/cert1 +tls_privatekey = DIR/aux-fixed/cert1 +.endif + +queue_run_in_order = true + +# ----- ACL ----- + +begin acl +acl_r: + accept condition = ${if != {$received_port}{PORT_S}} + control = queue_only + accept + +# ----- Routers ----- + +begin routers + +to_server: + driver = accept + condition = ${if = {$received_port}{PORT_S}} + transport = remote_smtp${if eq {OPT}{dkim} {_dkim}} + errors_to = "" + +fail_remote_domains: + driver = redirect + domains = ! +local_domains + data = :fail: unrouteable mail domain "$domain" + +localuser: + driver = accept + transport = local_delivery + + +# ----- Transports ----- + +begin transports + +local_delivery: + driver = appendfile + file = DIR/test-mail/$local_part + create_file = DIR/test-mail + headers_add = "X-body-linecount: $body_linecount\n\ + X-message-linecount: $message_linecount\n\ + X-received-count: $received_count" + return_path_add + user = CALLER + +remote_smtp: + driver = smtp + hosts = 127.0.0.1 + port = PORT_D + hosts_try_fastopen = : + allow_localhost + +remote_smtp_dkim: + driver = smtp + hosts = 127.0.0.1 + port = PORT_D + hosts_try_fastopen = : + allow_localhost + +.ifdef OPT + dkim_domain = test.ex + dkim_selector = sel + dkim_private_key = DIR/aux-fixed/dkim/dkim.private +.ifndef HEADERS_MAXSIZE + dkim_sign_headers = LIST +.endif +.endif + +# ----- Retry ----- + +begin retry +* * F,30m,5m; +# End diff --git a/test/confs/0909 b/test/confs/0909 new file mode 100644 index 000000000..4c9444c14 --- /dev/null +++ b/test/confs/0909 @@ -0,0 +1,43 @@ +# Exim test configuration 0623 + +SERVER= + +.include DIR/aux-var/std_conf_prefix + +primary_hostname = myhost.test.ex +log_selector = +pipelining +received_recipients +smtp_connection +millisec + + +# ----- Main settings ----- + +acl_smtp_rcpt = accept + +# ----- Routers ----- + +begin routers + +client: + driver = accept + transport = send_to_server + errors_to = "" + + +# ----- Transports ----- + +begin transports + +send_to_server: + driver = smtp + allow_localhost + hosts = 127.0.0.1 + port = PORT_D + +# ----- Retry ----- + + +begin retry + +* * F,5d,10s + + +# End diff --git a/test/confs/0911 b/test/confs/0911 deleted file mode 100644 index 4c9444c14..000000000 --- a/test/confs/0911 +++ /dev/null @@ -1,43 +0,0 @@ -# Exim test configuration 0623 - -SERVER= - -.include DIR/aux-var/std_conf_prefix - -primary_hostname = myhost.test.ex -log_selector = +pipelining +received_recipients +smtp_connection +millisec - - -# ----- Main settings ----- - -acl_smtp_rcpt = accept - -# ----- Routers ----- - -begin routers - -client: - driver = accept - transport = send_to_server - errors_to = "" - - -# ----- Transports ----- - -begin transports - -send_to_server: - driver = smtp - allow_localhost - hosts = 127.0.0.1 - port = PORT_D - -# ----- Retry ----- - - -begin retry - -* * F,5d,10s - - -# End diff --git a/test/confs/0951 b/test/confs/0951 new file mode 100644 index 000000000..f813322d2 --- /dev/null +++ b/test/confs/0951 @@ -0,0 +1,4 @@ +# This file contains a BOM at the very beginning +.include DIR/aux-var/std_conf_prefix +tls_advertise_hosts = +keep_environment = diff --git a/test/confs/0952 b/test/confs/0952 new file mode 100644 index 000000000..26e97c487 --- /dev/null +++ b/test/confs/0952 @@ -0,0 +1 @@ +.include DIR/confs/0951 diff --git a/test/confs/1115 b/test/confs/1115 new file mode 100644 index 000000000..c6247a4e0 --- /dev/null +++ b/test/confs/1115 @@ -0,0 +1,24 @@ +# Exim test configuration 1115 + +SERVER= + +.include DIR/aux-var/std_conf_prefix + +primary_hostname = myhost.test.ex + +# ----- Main settings ----- + +tls_on_connect_ports = PORT_D2 + +acl_smtp_connect = check_conn + +log_selector = +connection_reject + +# ----- ACLs ----- + +begin acl + +check_conn: + deny log_reject_target = + +# End diff --git a/test/confs/2302 b/test/confs/2302 new file mode 100644 index 000000000..de484356c --- /dev/null +++ b/test/confs/2302 @@ -0,0 +1,3 @@ +# Exim test configuration 2302 +.include DIR/aux-var/std_conf_prefix +# End diff --git a/test/confs/2610 b/test/confs/2610 index 3f75d44a2..94be1b91f 100644 --- a/test/confs/2610 +++ b/test/confs/2610 @@ -14,7 +14,7 @@ acl_not_smtp = check_notsmtp PARTIAL = 127.0.0.1::PORT_N SSPEC = PARTIAL/test/root/pass -mysql_servers = SSPEC +hide mysql_servers = SSPEC # ----- ACL ----- @@ -25,27 +25,29 @@ check_recipient: # Tainted-data checks warn # taint only in lookup string, properly quoted - set acl_m0 = ok: ${lookup mysql {select name from them where id = '${quote_mysql:$local_part}'}} + set acl_m0 = ok: ${lookup mysql {select name from them where id = '${quote_mysql:$local_part}'}} # taint only in lookup string, but not quoted - set acl_m0 = FAIL: ${lookup mysql,no_rd {select name from them where id = '$local_part'}} + set acl_m0 = FAIL1: ${lookup mysql,no_rd {select name from them where id = '$local_part'}} warn # option on lookup type unaffected - set acl_m0 = ok: ${lookup mysql,servers=SSPEC {select name from them where id = '${quote_mysql:$local_part}'}} + set acl_m0 = ok: ${lookup mysql,servers=SSPEC {select name from them where id = '${quote_mysql:$local_part}'}} # partial server-spec, indexing main-option, works - set acl_m0 = ok: ${lookup mysql,servers=PARTIAL {select name from them where id = '${quote_mysql:$local_part}'}} + set acl_m0 = ok: ${lookup mysql,servers=PARTIAL {select name from them where id = '${quote_mysql:$local_part}'}} # oldstyle server spec, prepended to lookup string, fails with taint - set acl_m0 = FAIL: ${lookup mysql {servers=SSPEC; select name from them where id = '${quote_mysql:$local_part}'}} + set acl_m0 = FAIL2: ${lookup mysql {servers=SSPEC; select name from them where id = '${quote_mysql:$local_part}'}} + # oldstyle partial server spec, prepended to lookup string, indexing main-option, but not quoted + warn set acl_m0 = FAIL3: ${lookup mysql {servers=PARTIAL; select name from them where id = '$local_part'}} # In list-style lookup, tainted lookup string is ok if server spec comes from main-option - warn set acl_m0 = ok: hostlist + warn set acl_m0 = ok: hostlist hosts = net-mysql;select * from them where id='${quote_mysql:$local_part}' # ... but setting a per-query servers spec fails due to the taint - warn set acl_m0 = FAIL: hostlist + warn set acl_m0 = FAIL4: hostlist hosts = <& net-mysql;servers=SSPEC; select * from them where id='${quote_mysql:$local_part}' # The newer server-list-as-option-to-lookup-type is not a solution to tainted data in the lookup, because # string-expansion is done before list-expansion so the taint contaminates the entire list. - warn set acl_m0 = FAIL: hostlist + warn set acl_m0 = FAIL5: hostlist hosts = <& net-mysql,servers=SSPEC; select * from them where id='${quote_mysql:$local_part}' accept domains = +local_domains diff --git a/test/confs/4020 b/test/confs/4020 index dc0db460e..6702dcd68 100644 --- a/test/confs/4020 +++ b/test/confs/4020 @@ -46,7 +46,9 @@ my_smtp: hide socks_proxy = HOSTIPV4 port=PORT_D OPT hosts_try_fastopen = ${if eq {$local_part}{user_tfo} {*}} debug_print = transport_name <$transport_name> +.ifdef _HAVE_EVENT event_action = ${if eq {smtp:connect}{$event_name} {${acl {logger}}} {}} +.endif # End diff --git a/test/confs/4040 b/test/confs/4040 new file mode 100644 index 000000000..c5c6c3c0e --- /dev/null +++ b/test/confs/4040 @@ -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/confs/4519 b/test/confs/4519 deleted file mode 120000 index a8ce02c97..000000000 --- a/test/confs/4519 +++ /dev/null @@ -1 +0,0 @@ -0906 \ No newline at end of file diff --git a/test/confs/4519 b/test/confs/4519 new file mode 100644 index 000000000..57f359ff0 --- /dev/null +++ b/test/confs/4519 @@ -0,0 +1,115 @@ +# Exim test configuration 0906 +SERVER= + +exim_path = EXIM_PATH +keep_environment = +host_lookup_order = bydns +spool_directory = DIR/spool +log_file_path = DIR/spool/log/SERVER%slog +gecos_pattern = "" +gecos_name = CALLER_NAME +chunking_advertise_hosts = * +tls_advertise_hosts = ${if eq {SRV}{tls} {*}} +.ifdef _HAVE_PIPE_CONNECT +pipelining_connect_advertise_hosts = +.endif +.ifdef _HAVE_DMARC +dmarc_tld_file = +.endif +.ifdef _EXP_LIMITS +limits_advertise_hosts = !* +.endif + +# ----- Main settings ----- + +spool_wireformat = true + +primary_hostname = testhost.test.ex +domainlist local_domains = @ : test.ex + +acl_smtp_rcpt = acl_r + +.ifdef _HAVE_DKIM +log_selector = +received_recipients +dkim_verbose +.else +log_selector = +received_recipients +.endif + + +.ifdef _OPT_MAIN_TLS_CERTIFICATE +tls_certificate = DIR/aux-fixed/cert1 +tls_privatekey = DIR/aux-fixed/cert1 +.endif + +queue_run_in_order = true + +# ----- ACL ----- + +begin acl +acl_r: + accept condition = ${if != {$received_port}{PORT_S}} + control = queue_only + accept + +# ----- Routers ----- + +begin routers + +to_server: + driver = accept + condition = ${if = {$received_port}{PORT_S}} + transport = remote_smtp${if eq {OPT}{dkim} {_dkim}} + errors_to = "" + +fail_remote_domains: + driver = redirect + domains = ! +local_domains + data = :fail: unrouteable mail domain "$domain" + +localuser: + driver = accept + transport = local_delivery + + +# ----- Transports ----- + +begin transports + +local_delivery: + driver = appendfile + file = DIR/test-mail/$local_part + create_file = DIR/test-mail + headers_add = "X-body-linecount: $body_linecount\n\ + X-message-linecount: $message_linecount\n\ + X-received-count: $received_count" + return_path_add + user = CALLER + +remote_smtp: + driver = smtp + hosts = 127.0.0.1 + port = PORT_D + hosts_try_fastopen = : + allow_localhost + +remote_smtp_dkim: + driver = smtp + hosts = 127.0.0.1 + port = PORT_D + hosts_try_fastopen = : + allow_localhost + +.ifdef OPT + dkim_domain = test.ex + dkim_selector = sel + dkim_private_key = DIR/aux-fixed/dkim/dkim.private +.ifndef HEADERS_MAXSIZE + dkim_sign_headers = LIST +.endif +.endif + +# ----- Retry ----- + +begin retry +* * F,30m,5m; +# End diff --git a/test/confs/4550 b/test/confs/4550 index 4b596f300..dfced42c8 100644 --- a/test/confs/4550 +++ b/test/confs/4550 @@ -11,7 +11,9 @@ primary_hostname = myhost.test.ex acl_smtp_rcpt = accept acl_smtp_dkim = accept logwrite = signer: $dkim_cur_signer bits: $dkim_key_length h=$dkim_headernames +.ifdef _HAVE_PRDR acl_smtp_data_prdr = accept local_parts = okuser +.endif prdr_enable log_selector = +dkim_verbose diff --git a/test/confs/5708 b/test/confs/5708 new file mode 100644 index 000000000..4fc0e9b27 --- /dev/null +++ b/test/confs/5708 @@ -0,0 +1,32 @@ +# Exim test configuration 5708 +# Check for event on dns lookup fail + +.include DIR/aux-var/std_conf_prefix + +primary_hostname = myhost.test.ex + +# ----- Main settings ----- + +acl_smtp_rcpt = accept verify = helo + +event_action = ${acl {accept logwrite = M <$event_name> <$event_data>}} + +# ----- Routers ----- +begin routers +all: + driver = accept + transport = all + errors_to = "" + +# ----- Transports ----- +begin transports +all: + driver = smtp + hosts = ${if inlist {$domain} {nonexistent.test.ex} {$value}} + event_action = ${acl {accept logwrite = T <$event_name> <$event_data>}} + +# ------ Retries ---- +begin retry +* * F,10m,2d + +# End diff --git a/test/confs/5709 b/test/confs/5709 new file mode 100644 index 000000000..5539cddeb --- /dev/null +++ b/test/confs/5709 @@ -0,0 +1,10 @@ +# Exim test configuration 5709 +# Check for event on dnsdb lookup fail + +.include DIR/aux-var/std_conf_prefix +primary_hostname = myhost.test.ex +event_action = ${acl {accept logwrite = <$event_name> <$event_data>}} + +acl_smtp_helo = accept continue = ${lookup dnsdb{defer_never,a=$sender_helo_name}{$value}} + +# End diff --git a/test/confs/5803 b/test/confs/5803 new file mode 100644 index 000000000..465959775 --- /dev/null +++ b/test/confs/5803 @@ -0,0 +1,71 @@ +# Exim test configuration 5801 +# DANE common + +SERVER= + +.include DIR/aux-var/tls_conf_prefix + +primary_hostname = myhost.test.ex + +# ----- Main settings ----- + +acl_smtp_rcpt = accept verify = recipient/callout + +log_selector = +received_recipients +tls_certificate_verified +tls_sni + +queue_run_in_order + +tls_advertise_hosts = * +.ifdef _HAVE_GNUTLS +# needed to force generation +tls_dhparam = historic +.endif + +CDIR1 = DIR/aux-fixed/exim-ca/example.net/server1.example.net +CDIR2 = DIR/aux-fixed/exim-ca/example.com/server1.example.com + + +tls_certificate = CDIR2/fullchain.pem +tls_privatekey = CDIR2/server1.example.com.unlocked.key + +# ----- Routers ----- + +begin routers + +client: + driver = dnslookup + condition = ${if eq {SERVER}{}} + dnssec_request_domains = * + self = send + transport = send_to_server + errors_to = "" + +server: + driver = redirect + data = :blackhole: + + +# ----- Transports ----- + +begin transports + +send_to_server: + driver = smtp + allow_localhost + port = PORT_D + hosts_try_fastopen = : + + hosts_try_dane = * + tls_verify_certificates = + + + +# ----- Retry ----- + + +begin retry + +* * F,5d,10s + + +# End diff --git a/test/confs/5890 b/test/confs/5890 index 88743cfd0..c81cd92f3 100644 --- a/test/confs/5890 +++ b/test/confs/5890 @@ -13,9 +13,10 @@ domainlist local_domains = test.ex : *.test.ex acl_smtp_helo = check_helo acl_smtp_rcpt = check_recipient -log_selector = +received_recipients +tls_resumption +tls_peerdn +log_selector = +received_recipients +tls_resumption +tls_peerdn +outgoing_port tls_advertise_hosts = * +tls_on_connect_ports = PORT_D2 # Set certificate only if server @@ -33,30 +34,32 @@ tls_resumption_hosts = 127.0.0.1 begin acl check_helo: - accept condition = ${if def:tls_in_cipher} - logwrite = tls_in_resumption\t${listextract {$tls_in_resumption} {_RESUME_DECODE}} - logwrite = our cert subject\t${certextract {subject}{$tls_in_ourcert}} - logwrite = peer cert subject\t${certextract {subject}{$tls_in_peercert}} - logwrite = peer cert verified\t${tls_in_certificate_verified} - logwrite = peer dn\t${tls_in_peerdn} - logwrite = cipher\t${tls_in_cipher} - logwrite = bits\t${tls_in_bits} + accept condition = ${if def:tls_in_cipher} + logwrite = tls_in_ver\t$tls_in_ver + logwrite = tls_in_resumption\t${listextract {$tls_in_resumption} {_RESUME_DECODE}} + logwrite = our cert subject\t${certextract {subject}{$tls_in_ourcert}} + logwrite = peer cert subject\t${certextract {subject}{$tls_in_peercert}} + logwrite = peer cert verified\t${tls_in_certificate_verified} + logwrite = peer dn\t${tls_in_peerdn} + logwrite = cipher\t${tls_in_cipher} + logwrite = bits\t${tls_in_bits} accept check_recipient: - accept domains = +local_domains - deny message = relay not permitted + accept domains = +local_domains + deny message = relay not permitted log_resumption: accept condition = ${if def:tls_out_cipher} condition = ${if eq {$event_name}{tcp:close}} + logwrite = tls_out_ver\t$tls_out_ver logwrite = tls_out_resumption ${listextract {$tls_out_resumption} {_RESUME_DECODE}} - logwrite = our cert subject\t${certextract {subject}{$tls_out_ourcert}} - logwrite = peer cert subject\t${certextract {subject}{$tls_out_peercert}} - logwrite = peer cert verified\t${tls_out_certificate_verified} - logwrite = peer dn\t${tls_out_peerdn} - logwrite = cipher\t${tls_out_cipher} - logwrite = bits\t${tls_out_bits} + logwrite = our cert subject\t${certextract {subject}{$tls_out_ourcert}} + logwrite = peer cert subject\t${certextract {subject}{$tls_out_peercert}} + logwrite = peer cert verified\t${tls_out_certificate_verified} + logwrite = peer dn\t${tls_out_peerdn} + logwrite = cipher\t${tls_out_cipher} + logwrite = bits\t${tls_out_bits} # ----- Routers ----- @@ -66,7 +69,7 @@ begin routers client: driver = accept condition = ${if eq {SERVER}{server}{no}{yes}} - transport = send_to_server${if eq{$local_part}{abcd}{2}{1}} + transport = send_to_server${if eq{$local_part}{hostnotresume}{2}{1}} server: driver = redirect @@ -80,7 +83,14 @@ send_to_server1: driver = smtp allow_localhost hosts = 127.0.0.1 +.ifdef SELECTOR + port = PORT_D2 + protocol = smtps + # Use HELO purely to get a P= different on the server <= line + hosts_avoid_esmtp = * +.else port = PORT_D +.endif helo_data = helo.data.changed .ifdef HELO_MSG host_name_extract = HELO_MSG @@ -93,17 +103,21 @@ send_to_server1: tls_verify_certificates = CDIR/CA/CA.pem tls_verify_cert_hostnames = ${if match {$local_part}{^noverify} {*}{:}} tls_try_verify_hosts = * +.ifdef _HAVE_EVENT event_action = ${acl {log_resumption}} +.endif send_to_server2: - driver = smtp + driver = smtp allow_localhost - hosts = HOSTIPV4 - port = PORT_D - hosts_try_fastopen = : + hosts = HOSTIPV4 + port = PORT_D + hosts_try_fastopen = : tls_verify_certificates = CDIR/CA/CA.pem tls_verify_cert_hostnames = : +.ifdef _HAVE_EVENT event_action = ${acl {log_resumption}} +.endif # ----- Retry ----- diff --git a/test/confs/5891 b/test/confs/5891 index 89ee8fd53..ff50b2b2e 100644 --- a/test/confs/5891 +++ b/test/confs/5891 @@ -93,7 +93,9 @@ send_to_server1: tls_verify_certificates = CDIR/CA/CA.pem tls_verify_cert_hostnames = ${if match {$local_part}{^noverify} {*}{:}} tls_try_verify_hosts = * +.ifdef _HAVE_EVENT event_action = ${acl {log_resumption}} +.endif send_to_server2: driver = smtp @@ -103,7 +105,9 @@ send_to_server2: hosts_try_fastopen = : tls_verify_certificates = CDIR/CA/CA.pem tls_verify_cert_hostnames = : +.ifdef _HAVE_EVENT event_action = ${acl {log_resumption}} +.endif # ----- Retry ----- diff --git a/test/confs/5892 b/test/confs/5892 index 15b09fcff..77b5c9052 100644 --- a/test/confs/5892 +++ b/test/confs/5892 @@ -13,7 +13,7 @@ domainlist local_domains = test.ex : *.test.ex acl_smtp_helo = check_helo acl_smtp_rcpt = check_recipient -log_selector = +received_recipients +tls_resumption +tls_peerdn +log_selector = +received_recipients +tls_resumption +tls_peerdn +outgoing_port .ifdef _OPT_OPENSSL_NO_TLSV1_3_X openssl_options = +no_sslv2 +no_sslv3 +single_dh_use OPTION @@ -21,6 +21,7 @@ openssl_options = +no_sslv2 +no_sslv3 +single_dh_use OPTION openssl_options = +no_sslv2 +no_sslv3 +single_dh_use .endif tls_advertise_hosts = * +tls_on_connect_ports = PORT_D2 # Set certificate only if server @@ -38,30 +39,32 @@ remote_max_parallel = 1 begin acl check_helo: - accept condition = ${if def:tls_in_cipher} - logwrite = tls_in_resumption\t${listextract {$tls_in_resumption} {_RESUME_DECODE}} - logwrite = our cert subject\t${certextract {subject}{$tls_in_ourcert}} - logwrite = peer cert subject\t${certextract {subject}{$tls_in_peercert}} - logwrite = peer cert verified\t${tls_in_certificate_verified} - logwrite = peer dn\t${tls_in_peerdn} - logwrite = cipher\t${tls_in_cipher} - logwrite = bits\t${tls_in_bits} + accept condition = ${if def:tls_in_cipher} + logwrite = tls_in_ver\t$tls_in_ver + logwrite = tls_in_resumption\t${listextract {$tls_in_resumption} {_RESUME_DECODE}} + logwrite = our cert subject\t${certextract {subject}{$tls_in_ourcert}} + logwrite = peer cert subject\t${certextract {subject}{$tls_in_peercert}} + logwrite = peer cert verified\t${tls_in_certificate_verified} + logwrite = peer dn\t${tls_in_peerdn} + logwrite = cipher\t${tls_in_cipher} + logwrite = bits\t${tls_in_bits} accept check_recipient: - accept domains = +local_domains - deny message = relay not permitted + accept domains = +local_domains + deny message = relay not permitted log_resumption: accept condition = ${if def:tls_out_cipher} condition = ${if eq {$event_name}{tcp:close}} + logwrite = tls_out_ver\t$tls_out_ver logwrite = tls_out_resumption ${listextract {$tls_out_resumption} {_RESUME_DECODE}} - logwrite = our cert subject\t${certextract {subject}{$tls_out_ourcert}} - logwrite = peer cert subject\t${certextract {subject}{$tls_out_peercert}} - logwrite = peer cert verified\t${tls_out_certificate_verified} - logwrite = peer dn\t${tls_out_peerdn} - logwrite = cipher\t${tls_out_cipher} - logwrite = bits\t${tls_out_bits} + logwrite = our cert subject\t${certextract {subject}{$tls_out_ourcert}} + logwrite = peer cert subject\t${certextract {subject}{$tls_out_peercert}} + logwrite = peer cert verified\t${tls_out_certificate_verified} + logwrite = peer dn\t${tls_out_peerdn} + logwrite = cipher\t${tls_out_cipher} + logwrite = bits\t${tls_out_bits} # ----- Routers ----- @@ -85,7 +88,14 @@ send_to_server1: driver = smtp allow_localhost hosts = 127.0.0.1 +.ifdef SELECTOR + port = PORT_D2 + protocol = smtps + # Use HELO purely to get a P= different on the server <= line + hosts_avoid_esmtp = * +.else port = PORT_D +.endif helo_data = helo.data.changed .ifdef HELO_MSG host_name_extract = HELO_MSG @@ -98,17 +108,21 @@ send_to_server1: tls_verify_certificates = CDIR/CA/CA.pem tls_verify_cert_hostnames = ${if match {$local_part}{^noverify} {*}{:}} tls_try_verify_hosts = * +.ifdef _HAVE_EVENT event_action = ${acl {log_resumption}} +.endif send_to_server2: - driver = smtp + driver = smtp allow_localhost - hosts = HOSTIPV4 - port = PORT_D - hosts_try_fastopen = : + hosts = HOSTIPV4 + port = PORT_D + hosts_try_fastopen = : tls_verify_certificates = CDIR/CA/CA.pem tls_verify_cert_hostnames = : +.ifdef _HAVE_EVENT event_action = ${acl {log_resumption}} +.endif # ----- Retry ----- diff --git a/test/confs/5893 b/test/confs/5893 index a7f73a98c..5d569d708 100644 --- a/test/confs/5893 +++ b/test/confs/5893 @@ -97,7 +97,9 @@ send_to_server1: tls_verify_certificates = CDIR/CA/CA.pem tls_verify_cert_hostnames = ${if match {$local_part}{^noverify} {*}{:}} tls_try_verify_hosts = * +.ifdef _HAVE_EVENT event_action = ${acl {log_resumption}} +.endif send_to_server2: driver = smtp @@ -107,7 +109,9 @@ send_to_server2: hosts_try_fastopen = : tls_verify_certificates = CDIR/CA/CA.pem tls_verify_cert_hostnames = : +.ifdef _HAVE_EVENT event_action = ${acl {log_resumption}} +.endif # ----- Retry ----- diff --git a/test/confs/5894 b/test/confs/5894 index da347178e..d823290aa 100644 --- a/test/confs/5894 +++ b/test/confs/5894 @@ -12,10 +12,11 @@ domainlist local_domains = test.ex : *.test.ex acl_smtp_helo = check_helo acl_smtp_rcpt = check_recipient -log_selector = +received_recipients +tls_resumption +tls_peerdn +log_selector = +received_recipients +tls_resumption +tls_peerdn +outgoing_port openssl_options = +no_sslv2 +no_sslv3 +single_dh_use tls_advertise_hosts = * +tls_on_connect_ports = PORT_D2 # Set certificate only if server @@ -32,30 +33,32 @@ tls_resumption_hosts = 127.0.0.1 begin acl check_helo: - accept condition = ${if def:tls_in_cipher} - logwrite = tls_in_resumption\t${listextract {$tls_in_resumption} {_RESUME_DECODE}} - logwrite = our cert subject\t${certextract {subject}{$tls_in_ourcert}} - logwrite = peer cert subject\t${certextract {subject}{$tls_in_peercert}} - logwrite = peer cert verified\t${tls_in_certificate_verified} - logwrite = peer dn\t${tls_in_peerdn} - logwrite = cipher\t${tls_in_cipher} - logwrite = bits\t${tls_in_bits} + accept condition = ${if def:tls_in_cipher} + logwrite = tls_in_ver\t$tls_in_ver + logwrite = tls_in_resumption\t${listextract {$tls_in_resumption} {_RESUME_DECODE}} + logwrite = our cert subject\t${certextract {subject}{$tls_in_ourcert}} + logwrite = peer cert subject\t${certextract {subject}{$tls_in_peercert}} + logwrite = peer cert verified\t${tls_in_certificate_verified} + logwrite = peer dn\t${tls_in_peerdn} + logwrite = cipher\t${tls_in_cipher} + logwrite = bits\t${tls_in_bits} accept check_recipient: - accept domains = +local_domains - deny message = relay not permitted + accept domains = +local_domains + deny message = relay not permitted log_resumption: accept condition = ${if def:tls_out_cipher} condition = ${if eq {$event_name}{tcp:close}} + logwrite = tls_out_ver\t$tls_out_ver logwrite = tls_out_resumption ${listextract {$tls_out_resumption} {_RESUME_DECODE}} - logwrite = our cert subject\t${certextract {subject}{$tls_out_ourcert}} - logwrite = peer cert subject\t${certextract {subject}{$tls_out_peercert}} - logwrite = peer cert verified\t${tls_out_certificate_verified} - logwrite = peer dn\t${tls_out_peerdn} - logwrite = cipher\t${tls_out_cipher} - logwrite = bits\t${tls_out_bits} + logwrite = our cert subject\t${certextract {subject}{$tls_out_ourcert}} + logwrite = peer cert subject\t${certextract {subject}{$tls_out_peercert}} + logwrite = peer cert verified\t${tls_out_certificate_verified} + logwrite = peer dn\t${tls_out_peerdn} + logwrite = cipher\t${tls_out_cipher} + logwrite = bits\t${tls_out_bits} # ----- Routers ----- @@ -65,7 +68,7 @@ begin routers client: driver = accept condition = ${if eq {SERVER}{server}{no}{yes}} - transport = send_to_server${if eq{$local_part}{abcd}{2}{1}} + transport = send_to_server${if eq{$local_part}{hostnotresume}{2}{1}} server: driver = redirect @@ -79,7 +82,14 @@ send_to_server1: driver = smtp allow_localhost hosts = 127.0.0.1 +.ifdef SELECTOR + port = PORT_D2 + protocol = smtps + # Use HELO purely to get a P= different on the server <= line + hosts_avoid_esmtp = * +.else port = PORT_D +.endif helo_data = helo.data.changed .ifdef VALUE tls_resumption_hosts = * @@ -89,17 +99,21 @@ send_to_server1: tls_verify_certificates = CDIR/CA/CA.pem tls_verify_cert_hostnames = ${if match {$local_part}{^noverify} {*}{:}} tls_try_verify_hosts = * +.ifdef _HAVE_EVENT event_action = ${acl {log_resumption}} +.endif send_to_server2: - driver = smtp + driver = smtp allow_localhost - hosts = HOSTIPV4 - port = PORT_D - hosts_try_fastopen = : + hosts = HOSTIPV4 + port = PORT_D + hosts_try_fastopen = : tls_verify_certificates = CDIR/CA/CA.pem tls_verify_cert_hostnames = : +.ifdef _HAVE_EVENT event_action = ${acl {log_resumption}} +.endif # ----- Retry ----- diff --git a/test/confs/5895 b/test/confs/5895 index d279b1e3e..c83c70926 100644 --- a/test/confs/5895 +++ b/test/confs/5895 @@ -92,7 +92,9 @@ send_to_server1: tls_verify_certificates = CDIR/CA/CA.pem tls_verify_cert_hostnames = ${if match {$local_part}{^noverify} {*}{:}} tls_try_verify_hosts = * +.ifdef _HAVE_EVENT event_action = ${acl {log_resumption}} +.endif send_to_server2: driver = smtp @@ -102,7 +104,9 @@ send_to_server2: hosts_try_fastopen = : tls_verify_certificates = CDIR/CA/CA.pem tls_verify_cert_hostnames = : +.ifdef _HAVE_EVENT event_action = ${acl {log_resumption}} +.endif # ----- Retry ----- diff --git a/test/dnszones-src/db.test.ex b/test/dnszones-src/db.test.ex index d39e9cf1e..d6de7aa6c 100644 --- a/test/dnszones-src/db.test.ex +++ b/test/dnszones-src/db.test.ex @@ -24,6 +24,8 @@ test.ex. SOA exim.test.ex. hostmaster.exim.test.ex 1430683638 1200 120 6 test.ex. TXT "A TXT record for test.ex." s/lash TXT "A TXT record for s/lash.test.ex." +long TXT "This is a max-length chunk 789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234" "A short chunk" "A final chunk" +long TXT "Second RR" cname CNAME test.ex. @@ -583,6 +585,11 @@ DNSSEC danemixed A 127.0.0.1 DNSSEC _1225._tcp.danemixed TLSA 2 0 1 0d643c1ebcdf2cb83634e0c2f5102c1e268983401c9f4d8711d60b44d7fb7a3e DNSSEC TLSA 3 1 1 8276000000000000000000000000000000000000000000000000000000000000 +; have the TLSA lookup, only, return SERVFAIL +; +DNSSEC daneservfail A 127.0.0.1 +DNSSEC _1225._tcp.daneservfail CNAME test.again.dns. + ; ------- Testing delays ------------ DELAY=500 delay500 A HOSTIPV4 diff --git a/test/log/0021 b/test/log/0021 index 0f99f87bd..d5e5db32b 100644 --- a/test/log/0021 +++ b/test/log/0021 @@ -47,7 +47,7 @@ 1999-03-02 09:44:33 10HmbL-000000005vi-0000 <= ok@test3 H=[10.9.8.8] U=CALLER P=smtp S=sss 1999-03-02 09:44:33 10HmbL-000000005vi-0000 => x R=accept T=appendfile 1999-03-02 09:44:33 10HmbL-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmaX-000000005vi-0000 10HmaX-000000005vi-0000 no recipients found in headers +1999-03-02 09:44:33 10HmaX-000000005vi-0000 no recipients found in headers 1999-03-02 09:44:33 10HmbM-000000005vi-0000 <= <> R=10HmaX-000000005vi-0000 U=EXIMUSER P=local S=sss 1999-03-02 09:44:33 10HmbM-000000005vi-0000 => CALLER R=accept T=appendfile 1999-03-02 09:44:33 10HmbM-000000005vi-0000 Completed diff --git a/test/log/0026 b/test/log/0026 index a537c7a25..5974b7ced 100644 --- a/test/log/0026 +++ b/test/log/0026 @@ -1,9 +1,13 @@ 1999-03-02 09:44:33 10HmbD-000000005vi-0000 $h_from: 'x@y' 1999-03-02 09:44:33 10HmbD-000000005vi-0000 <= x@y U=CALLER P=local-smtp S=sss +1999-03-02 09:44:33 10HmaX-000000005vi-0000 qualify/rewrite: domain missing or malformed 1999-03-02 09:44:33 10HmaX-000000005vi-0000 $h_from: '@' 1999-03-02 09:44:33 10HmaX-000000005vi-0000 U=CALLER F= rejected after DATA: domain missing or malformed: failing address in "From:" header is: @ +1999-03-02 09:44:33 10HmaY-000000005vi-0000 qualify/rewrite: '>' missing at end of address +1999-03-02 09:44:33 10HmaY-000000005vi-0000 qualify/rewrite: '>' missing at end of address 1999-03-02 09:44:33 10HmaY-000000005vi-0000 $h_from: ' rejected after DATA: '>' missing at end of address: failing address in "To:" header is: , @' 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 U=CALLER F=<> rejected after DATA: domain missing or malformed: failing address in "From:" header is: @ 1999-03-02 09:44:33 10HmbA-000000005vi-0000 $h_from: '' diff --git a/test/log/0072 b/test/log/0072 index 0730df728..89789a459 100644 --- a/test/log/0072 +++ b/test/log/0072 @@ -31,6 +31,7 @@ 1999-03-02 09:44:33 10HmbH-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbG-000000005vi-0000 => userx R=reply T=reply 1999-03-02 09:44:33 10HmbG-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbI-000000005vi-0000 qualify/rewrite: missing or malformed local part (expected word or "<") 1999-03-02 09:44:33 10HmbI-000000005vi-0000 <= CALLER@test.ex U=CALLER P=local S=sss 1999-03-02 09:44:33 10HmbI-000000005vi-0000 ** >**bad-reply** R=filter: filter autoreply generated syntactically invalid recipient 1999-03-02 09:44:33 10HmbI-000000005vi-0000 >**bad-reply** : error ignored diff --git a/test/log/0162 b/test/log/0162 index f463f6931..3ea2941cc 100644 --- a/test/log/0162 +++ b/test/log/0162 @@ -1 +1,4 @@ +1999-03-02 09:44:33 10HmaX-000000005vi-0000 qualify/rewrite: malformed address: ">, + , + may not follow rejected after DATA: malformed address: ">,\n ,\n may not follow ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n rejected after DATA: malformed address: ;bad@address;bad@address;bad@add may not follow bad@address: failing address in "To:" header begins: bad@address;bad@address;bad@address;bad@address;bad@address;bad@address;\n bad@address;bad@address;bad@address;bad@address;bad@address;bad@address;\n bad@address;bad@address;bad@address;bad@address;bad@address;bad@address;\n bad@address;bad@address;bad@address;bad@address;bad@address;bad@address;\n bad@address;bad@address;bad@address;bad@address;bad@address;bad@address;\n bad@address;bad@address;bad@address;bad@address;bad@address;bad@address;\n bad@address;bad@address;bad@address;bad@address;bad@address;bad@address;\n bad@address;bad@address;bad@address;bad@address;bad@address;bad@address;\n bad@address;bad@address;bad@address;bad@address;bad@address;bad@address;\n bad@address;bad@address;bad@address;bad@address;bad@address;bad@address;\n bad@address;bad@address;bad@address;bad@address;bad@address;bad@address;\n bad@address;bad@address;bad@address;bad@address;bad@address;bad@address;\n bad@address;bad@address;bad@address;bad@address;bad@address;bad@address;\n bad@address;bad@address diff --git a/test/log/0289 b/test/log/0289 index 15064bcdb..e79c3e25e 100644 --- a/test/log/0289 +++ b/test/log/0289 @@ -1,3 +1,10 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= <> U=EXIMUSER P=local S=sss 1999-03-02 09:44:33 10HmaX-000000005vi-0000 => CALLER R=r1 T=local_delivery 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss +1999-03-02 09:44:33 10HmaY-000000005vi-0000 => userx R=r1 T=local_delivery +1999-03-02 09:44:33 10HmaY-000000005vi-0000 => usery R=r1 T=local_delivery +1999-03-02 09:44:33 10HmaY-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 <= <> U=EXIMUSER P=local S=sss +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => CALLER R=r1 T=local_delivery +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed diff --git a/test/log/0365 b/test/log/0365 index a484a8b17..55ae1c787 100644 --- a/test/log/0365 +++ b/test/log/0365 @@ -1,19 +1,23 @@ +1999-03-02 09:44:33 10HmaX-000000005vi-0000 qualify/rewrite: '>' missing at end of address 1999-03-02 09:44:33 10HmaX-000000005vi-0000 U=CALLER F=<> rejected after DATA: '>' missing at end of address: failing address in "From:" header is: rejected after DATA: there is no valid sender in any header line 1999-03-02 09:44:33 recipient verify defer (making calloout connection): T=smtp Network Error 1999-03-02 09:44:33 U=CALLER sender verify defer for : Could not complete sender verify callout: V4NET.0.0.0 [V4NET.0.0.0] : Network Error 1999-03-02 09:44:33 U=CALLER F= temporarily rejected RCPT : Could not complete sender verify callout +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 qualify/rewrite: '>' missing at end of address 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 U=CALLER F= rejected after DATA 1999-03-02 09:44:33 10HmbA-000000005vi-0000 U=CALLER F=<> rejected after DATA: there is no valid sender in any header line 1999-03-02 09:44:33 sender verify defer (making calloout connection): T=smtp Network Error 1999-03-02 09:44:33 U=CALLER F= temporarily rejected RCPT : Could not complete recipient verify callout: V4NET.0.0.0 [V4NET.0.0.0] : Network Error 1999-03-02 09:44:33 U=CALLER F=<> rejected RCPT : failure message 1999-03-02 09:44:33 U=CALLER F=<> temporarily rejected RCPT : defer message +1999-03-02 09:44:33 10HmbB-000000005vi-0000 qualify/rewrite: '>' missing at end of address 1999-03-02 09:44:33 10HmbB-000000005vi-0000 U=CALLER F=<> rejected after DATA: '>' missing at end of address: failing address in "From:" header is: rejected after DATA: there is no valid sender in any header line 1999-03-02 09:44:33 recipient verify defer (making calloout connection): T=smtp Network Error 1999-03-02 09:44:33 U=CALLER sender verify defer for : Could not complete sender verify callout: V4NET.0.0.0 [V4NET.0.0.0] : Network Error 1999-03-02 09:44:33 U=CALLER F= temporarily rejected RCPT : Could not complete sender verify callout +1999-03-02 09:44:33 10HmbD-000000005vi-0000 qualify/rewrite: '>' missing at end of address 1999-03-02 09:44:33 10HmbD-000000005vi-0000 U=CALLER F= rejected after DATA 1999-03-02 09:44:33 10HmbE-000000005vi-0000 U=CALLER F=<> rejected after DATA: there is no valid sender in any header line 1999-03-02 09:44:33 sender verify defer (making calloout connection): T=smtp Network Error diff --git a/test/log/0367 b/test/log/0367 index 528c25e5e..bfc366ac0 100644 --- a/test/log/0367 +++ b/test/log/0367 @@ -5,10 +5,10 @@ 1999-03-02 09:44:33 Start queue run: pid=p1234 -qqf 1999-03-02 09:44:33 10HmaX-000000005vi-0000 => userx@domain1 R=others T=smtp H=127.0.0.1 [127.0.0.1] C="250 OK" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbA-000000005vi-0000 => userx@domain1 R=others T=smtp H=127.0.0.1 [127.0.0.1]* C="250 OK" -1999-03-02 09:44:33 10HmbA-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => userx@domain1 R=others T=smtp H=127.0.0.1 [127.0.0.1]* C="250 OK" -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmaY-000000005vi-0000 => userx@domain1 R=others T=smtp H=127.0.0.1 [127.0.0.1]* C="250 OK" 1999-03-02 09:44:33 10HmaY-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => userx@domain1 R=others T=smtp H=127.0.0.1 [127.0.0.1]* C="250 OK" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbA-000000005vi-0000 => userx@domain1 R=others T=smtp H=127.0.0.1 [127.0.0.1]* C="250 OK" +1999-03-02 09:44:33 10HmbA-000000005vi-0000 Completed 1999-03-02 09:44:33 End queue run: pid=p1234 -qqf diff --git a/test/log/0440 b/test/log/0440 index 129b25d3d..a4e1e5862 100644 --- a/test/log/0440 +++ b/test/log/0440 @@ -7,8 +7,8 @@ 1999-03-02 09:44:33 Start queue run: pid=p1234 1999-03-02 09:44:33 10HmaX-000000005vi-0000 => x1@y1 R=r1 T=t1 H=127.0.0.1 [127.0.0.1] C="250 OK" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => x3@y3 R=r1 T=t1 H=127.0.0.1 [127.0.0.1]* C="250 OK" -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmaY-000000005vi-0000 => x2@y2 R=r1 T=t1 H=127.0.0.1 [127.0.0.1]* C="250 OK" 1999-03-02 09:44:33 10HmaY-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => x3@y3 R=r1 T=t1 H=127.0.0.1 [127.0.0.1]* C="250 OK" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed 1999-03-02 09:44:33 End queue run: pid=p1234 diff --git a/test/log/0465 b/test/log/0465 index c8bc1458d..6b7628c32 100644 --- a/test/log/0465 +++ b/test/log/0465 @@ -1,3 +1,4 @@ 1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= <> U=CALLER P=local-smtp S=sss 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 <= abc@somewhere U=CALLER P=local S=sss +1999-03-02 09:44:33 10HmaX-000000005vi-0000 qualify/rewrite: domain missing or malformed 1999-03-02 09:44:33 10HmaX-000000005vi-0000 U=CALLER F=<> rejected after DATA: domain missing or malformed: failing address in "To:" header is: abc@xyz. diff --git a/test/log/0471 b/test/log/0471 index c80286d97..4d963cb55 100644 --- a/test/log/0471 +++ b/test/log/0471 @@ -1,10 +1,10 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for r1@test.ex 1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for r2@test.ex 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for r3@test.ex -1999-03-02 09:44:33 10HmbA-000000005vi-0000 rewrite: address is ridiculously long: localpart_with_256_chars_567890123456789012345678901234567890123... +1999-03-02 09:44:33 10HmbA-000000005vi-0000 qualify/rewrite: address is ridiculously long: localpart_with_256_chars_567890123456789012345678901234567890123... 1999-03-02 09:44:33 10HmbA-000000005vi-0000 verify header_syntax fails 1999-03-02 09:44:33 10HmbA-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for r4@test.ex 1999-03-02 09:44:33 10HmbB-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for r5@test.ex -1999-03-02 09:44:33 10HmbC-000000005vi-0000 rewrite: domain missing or malformed +1999-03-02 09:44:33 10HmbC-000000005vi-0000 qualify/rewrite: domain missing or malformed 1999-03-02 09:44:33 10HmbC-000000005vi-0000 verify header_syntax fails 1999-03-02 09:44:33 10HmbC-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for r6@test.ex diff --git a/test/log/0560 b/test/log/0560 index 9be1ae0cf..f7d8b8993 100644 --- a/test/log/0560 +++ b/test/log/0560 @@ -1 +1,3 @@ +1999-03-02 09:44:33 10HmaX-000000005vi-0000 qualify/rewrite: malformed address: another@another.ex may not follow first@test.ex + 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss diff --git a/test/log/0606 b/test/log/0606 index 58d340f03..718c2d4ff 100644 --- a/test/log/0606 +++ b/test/log/0606 @@ -1,3 +1,7 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@test.ex U=CALLER P=local S=sss +1999-03-02 09:44:33 10HmaX-000000005vi-0000 ** bad@test.ex R=bad: Temporary internal error 1999-03-02 09:44:33 10HmaX-000000005vi-0000 => b R=user T=local_delivery +1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= <> R=10HmaX-000000005vi-0000 U=EXIMUSER P=local S=sss +1999-03-02 09:44:33 10HmaY-000000005vi-0000 => :blackhole: R=dump_bounce +1999-03-02 09:44:33 10HmaY-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed diff --git a/test/log/0614 b/test/log/0614 index 00dbbf85c..2d80afdcf 100644 --- a/test/log/0614 +++ b/test/log/0614 @@ -7,12 +7,12 @@ 1999-03-02 09:44:33 Start queue run: pid=p1234 -qq 1999-03-02 09:44:33 10HmaX-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1] C="250 OK id=10HmbD-000000005vi-0000" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbC-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmbE-000000005vi-0000" -1999-03-02 09:44:33 10HmbC-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmbE-000000005vi-0000" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbB-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmbF-000000005vi-0000" 1999-03-02 09:44:33 10HmbB-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmbG-000000005vi-0000" -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbC-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmbG-000000005vi-0000" +1999-03-02 09:44:33 10HmbC-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmaY-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1] C="250 OK id=10HmbH-000000005vi-0000" 1999-03-02 09:44:33 10HmaY-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbA-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmbI-000000005vi-0000" @@ -22,8 +22,8 @@ ******** SERVER ******** 1999-03-02 09:44:33 exim x.yz daemon started: pid=p1235, no queue runs, listening for SMTP on port PORT_D 1999-03-02 09:44:33 10HmbD-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmaX-000000005vi-0000@the.local.host.name -1999-03-02 09:44:33 10HmbE-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbC-000000005vi-0000@the.local.host.name +1999-03-02 09:44:33 10HmbE-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmaZ-000000005vi-0000@the.local.host.name 1999-03-02 09:44:33 10HmbF-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbB-000000005vi-0000@the.local.host.name -1999-03-02 09:44:33 10HmbG-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmaZ-000000005vi-0000@the.local.host.name +1999-03-02 09:44:33 10HmbG-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbC-000000005vi-0000@the.local.host.name 1999-03-02 09:44:33 10HmbH-000000005vi-0000 <= peter@dustybelt.tld H=localhost (the.local.host.name) [127.0.0.1] P=esmtp S=sss id=E10HmaY-000000005vi-0000@the.local.host.name 1999-03-02 09:44:33 10HmbI-000000005vi-0000 <= peter@dustybelt.tld H=localhost (the.local.host.name) [127.0.0.1] P=esmtp S=sss id=E10HmbA-000000005vi-0000@the.local.host.name diff --git a/test/log/0615 b/test/log/0615 index 0fbdd1b8c..1c2e817fc 100644 --- a/test/log/0615 +++ b/test/log/0615 @@ -82,248 +82,248 @@ 2017-07-30 18:51:05.712 Start queue run: pid=p1234 -qq 2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1] C="250 OK id=10HmeA-000000005vi-0000" 2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdZ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeB-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdZ-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdY-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeC-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdY-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdX-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeD-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdX-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdW-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeE-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdW-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdV-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeF-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdV-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdU-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeG-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdU-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdT-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeH-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdT-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdS-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeI-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdS-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdR-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeJ-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdR-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdQ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeK-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdQ-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdP-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeL-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdP-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdO-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeM-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdO-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdN-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeN-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdN-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdM-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeO-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdM-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdL-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeP-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdL-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcV-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeB-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcV-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcW-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeC-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcW-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcX-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeD-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcX-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcY-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeE-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcY-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcZ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeF-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcZ-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdA-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeG-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdA-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdB-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeH-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdB-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdC-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeI-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdC-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdD-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeJ-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdD-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdE-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeK-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdE-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdF-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeL-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdF-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdG-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeM-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdG-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdH-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeN-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdH-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdI-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeO-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdI-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdJ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeP-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdJ-000000005vi-0000 Completed 2017-07-30 18:51:05.712 10HmdK-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeQ-000000005vi-0000" 2017-07-30 18:51:05.712 10HmdK-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdJ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeR-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdJ-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdI-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeS-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdI-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdH-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeT-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdH-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdG-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeU-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdG-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdF-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeV-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdF-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdE-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeW-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdE-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdD-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeX-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdD-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdC-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeY-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdC-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdB-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeZ-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdB-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmdA-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfA-000000005vi-0000" -2017-07-30 18:51:05.712 10HmdA-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcZ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfB-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcZ-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcY-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfC-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcY-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcX-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfD-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcX-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcW-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfE-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcW-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcV-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfF-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcV-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcU-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfG-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcU-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcT-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfH-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcT-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcS-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfI-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcS-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcR-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfJ-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcR-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcQ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfK-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcQ-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcP-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfL-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcP-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcO-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfM-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcO-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcN-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfN-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcN-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcM-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfO-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcM-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcL-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfP-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcL-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcK-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfQ-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcK-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcJ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfR-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcJ-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcI-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfS-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcI-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcH-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfT-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcH-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcG-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfU-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcG-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcF-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfV-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcF-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcE-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfW-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcE-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcD-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfX-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcD-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcC-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfY-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcC-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcB-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfZ-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcB-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmcA-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgA-000000005vi-0000" -2017-07-30 18:51:05.712 10HmcA-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbZ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgB-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbZ-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbY-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgC-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbY-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbX-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgD-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbX-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdL-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeR-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdL-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdM-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeS-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdM-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdN-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeT-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdN-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdO-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeU-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdO-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdP-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeV-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdP-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdQ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeW-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdQ-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdR-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeX-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdR-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdS-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeY-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdS-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdT-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeZ-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdT-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdU-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfA-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdU-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdV-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfB-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdV-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdW-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfC-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdW-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdX-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfD-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdX-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdY-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfE-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdY-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmdZ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfF-000000005vi-0000" +2017-07-30 18:51:05.712 10HmdZ-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfG-000000005vi-0000" +2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfH-000000005vi-0000" +2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfI-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfJ-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfK-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfL-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfM-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbF-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfN-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbF-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbG-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfO-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbG-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbH-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfP-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbH-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbI-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfQ-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbI-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbJ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfR-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbJ-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbK-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfS-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbK-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbL-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfT-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbL-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbM-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfU-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbM-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbN-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfV-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbN-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbO-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfW-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbO-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbP-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfX-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbP-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbQ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfY-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbQ-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbR-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfZ-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbR-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbS-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgA-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbS-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbT-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgB-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbT-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbU-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgC-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbU-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbV-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgD-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbV-000000005vi-0000 Completed 2017-07-30 18:51:05.712 10HmbW-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgE-000000005vi-0000" 2017-07-30 18:51:05.712 10HmbW-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbV-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgF-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbV-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbU-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgG-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbU-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbT-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgH-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbT-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbS-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgI-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbS-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbR-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgJ-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbR-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbQ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgK-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbQ-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbP-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgL-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbP-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbO-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgM-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbO-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbN-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgN-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbN-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbM-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgO-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbM-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbL-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgP-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbL-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbK-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgQ-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbK-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbJ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgR-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbJ-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbI-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgS-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbI-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbH-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgT-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbH-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbG-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgU-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbG-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbF-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgV-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbF-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgW-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgX-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgY-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgZ-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmhA-000000005vi-0000" -2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmhB-000000005vi-0000" -2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmhC-000000005vi-0000" -2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbX-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgF-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbX-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbY-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgG-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbY-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbZ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgH-000000005vi-0000" +2017-07-30 18:51:05.712 10HmbZ-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcA-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgI-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcA-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcB-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgJ-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcB-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcC-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgK-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcC-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcD-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgL-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcD-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcE-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgM-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcE-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcF-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgN-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcF-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcG-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgO-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcG-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcH-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgP-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcH-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcI-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgQ-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcI-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcJ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgR-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcJ-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcK-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgS-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcK-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcL-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgT-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcL-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcM-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgU-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcM-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcN-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgV-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcN-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcO-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgW-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcO-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcP-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgX-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcP-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcQ-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgY-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcQ-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcR-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgZ-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcR-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcS-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmhA-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcS-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcT-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmhB-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcT-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmcU-000000005vi-0000 => bob@anotherone.tld F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmhC-000000005vi-0000" +2017-07-30 18:51:05.712 10HmcU-000000005vi-0000 Completed 2017-07-30 18:51:05.712 End queue run: pid=p1234 -qq ******** SERVER ******** 2017-07-30 18:51:05.712 exim x.yz daemon started: pid=p1235, no queue runs, listening for SMTP on port PORT_D 2017-07-30 18:51:05.712 10HmeA-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmaX-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeB-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdZ-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeC-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdY-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeD-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdX-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeE-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdW-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeF-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdV-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeG-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdU-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeH-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdT-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeI-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdS-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeJ-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdR-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeK-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdQ-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeL-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdP-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeM-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdO-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeN-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdN-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeO-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdM-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeP-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdL-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeB-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcV-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeC-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcW-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeD-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcX-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeE-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcY-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeF-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcZ-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeG-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdA-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeH-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdB-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeI-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdC-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeJ-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdD-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeK-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdE-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeL-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdF-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeM-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdG-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeN-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdH-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeO-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdI-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeP-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdJ-000000005vi-0000@the.local.host.name 2017-07-30 18:51:05.712 10HmeQ-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdK-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeR-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdJ-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeS-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdI-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeT-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdH-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeU-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdG-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeV-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdF-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeW-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdE-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeX-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdD-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeY-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdC-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmeZ-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdB-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfA-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdA-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfB-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcZ-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfC-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcY-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfD-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcX-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfE-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcW-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfF-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcV-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfG-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcU-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfH-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcT-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfI-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcS-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfJ-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcR-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfK-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcQ-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfL-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcP-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfM-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcO-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfN-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcN-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfO-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcM-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfP-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcL-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfQ-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcK-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfR-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcJ-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfS-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcI-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfT-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcH-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfU-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcG-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfV-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcF-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfW-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcE-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfX-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcD-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfY-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcC-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmfZ-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcB-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgA-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcA-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgB-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbZ-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgC-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbY-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgD-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbX-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeR-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdL-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeS-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdM-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeT-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdN-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeU-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdO-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeV-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdP-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeW-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdQ-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeX-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdR-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeY-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdS-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmeZ-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdT-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfA-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdU-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfB-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdV-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfC-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdW-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfD-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdX-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfE-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdY-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfF-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmdZ-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfG-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmaY-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfH-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmaZ-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfI-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbA-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfJ-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbB-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfK-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbC-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfL-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbD-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfM-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbE-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfN-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbF-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfO-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbG-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfP-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbH-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfQ-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbI-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfR-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbJ-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfS-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbK-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfT-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbL-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfU-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbM-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfV-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbN-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfW-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbO-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfX-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbP-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfY-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbQ-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmfZ-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbR-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgA-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbS-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgB-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbT-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgC-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbU-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgD-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbV-000000005vi-0000@the.local.host.name 2017-07-30 18:51:05.712 10HmgE-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbW-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgF-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbV-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgG-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbU-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgH-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbT-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgI-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbS-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgJ-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbR-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgK-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbQ-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgL-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbP-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgM-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbO-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgN-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbN-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgO-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbM-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgP-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbL-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgQ-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbK-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgR-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbJ-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgS-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbI-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgT-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbH-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgU-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbG-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgV-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbF-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgW-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbE-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgX-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbD-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgY-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbC-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmgZ-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbB-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmhA-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbA-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmhB-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmaZ-000000005vi-0000@the.local.host.name -2017-07-30 18:51:05.712 10HmhC-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmaY-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgF-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbX-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgG-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbY-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgH-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbZ-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgI-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcA-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgJ-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcB-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgK-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcC-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgL-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcD-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgM-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcE-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgN-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcF-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgO-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcG-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgP-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcH-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgQ-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcI-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgR-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcJ-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgS-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcK-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgT-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcL-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgU-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcM-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgV-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcN-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgW-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcO-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgX-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcP-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgY-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcQ-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmgZ-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcR-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmhA-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcS-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmhB-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcT-000000005vi-0000@the.local.host.name +2017-07-30 18:51:05.712 10HmhC-000000005vi-0000 <= ralph@dustyshoes.tld H=the.local.host.name [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmcU-000000005vi-0000@the.local.host.name diff --git a/test/log/0630 b/test/log/0630 index 23bcced31..44f3872e7 100644 --- a/test/log/0630 +++ b/test/log/0630 @@ -3,4 +3,4 @@ 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 10HmaX-000000005vi-0000 <= test_3@paniclogrouter H=(test.ex) [127.0.0.1] P=esmtp S=sss 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Tainted filename '/dest3' -1999-03-02 09:44:33 10HmaX-000000005vi-0000 failed to open /dest3 when checking "/$local_part": Permission denied (euid=uuuu egid=EXIM_GID) +1999-03-02 09:44:33 10HmaX-000000005vi-0000 failed to open /dest3 when checking local_parts: Permission denied (euid=uuuu egid=EXIM_GID) diff --git a/test/log/0637 b/test/log/0637 new file mode 100644 index 000000000..5971628d3 --- /dev/null +++ b/test/log/0637 @@ -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:", C=MAIL,MAIL,MAIL,MAIL) diff --git a/test/log/0900 b/test/log/0900 index 00d13e443..a7852da37 100644 --- a/test/log/0900 +++ b/test/log/0900 @@ -16,3 +16,4 @@ 2017-07-30 18:51:05.712 10HmbG-000000005vi-0000 <= some6ne@some.domain H=(tester) [127.0.0.1] Ci=p1243 P=esmtp K S=sss for CALLER@test.ex 2017-07-30 18:51:05.712 rejected from H=(tester) [127.0.0.1]: Non-CRLF-terminated header, under CHUNKING: message abandoned 2017-07-30 18:51:05.712 10HmbH-000000005vi-0000 <= someone@some.domain H=(tester) [127.0.0.1] Ci=p1244 P=esmtp K S=sss for CALLER@test.ex +2017-07-30 18:51:05.712 10HmbI-000000005vi-0000 <= legit@some.domain H=(smuggler) [127.0.0.1] Ci=p1245 P=esmtp S=sss for CALLER@test.ex diff --git a/test/log/0904 b/test/log/0904 index af82b56bd..6b28fad3c 100644 --- a/test/log/0904 +++ b/test/log/0904 @@ -18,27 +18,3 @@ 2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 ** ebad@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 550 sorry, no 2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 ebad@test.ex: error ignored 2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 <= sender@source.dom U=root Ci=p1240 P=local-bsmtp S=sss for p@test.ex -2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 => p@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat" -2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 <= sender@source.dom U=root Ci=p1241 P=local-bsmtp S=sss for r@test.ex -2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 => r@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat" -2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbF-000000005vi-0000 <= sender@source.dom U=root Ci=p1242 P=local-bsmtp S=sss for s@test.ex -2017-07-30 18:51:05.712 10HmbF-000000005vi-0000 ** s@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 550 unacceptable mail-from -2017-07-30 18:51:05.712 10HmbF-000000005vi-0000 s@test.ex: error ignored -2017-07-30 18:51:05.712 10HmbF-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbG-000000005vi-0000 <= sender@source.dom U=root Ci=p1243 P=local-bsmtp S=sss for s1@test.ex -2017-07-30 18:51:05.712 10HmbG-000000005vi-0000 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 450 greylisted mail-from -2017-07-30 18:51:05.712 10HmbG-000000005vi-0000 == s1@test.ex R=to_server T=remote_smtp defer (-45) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 450 greylisted mail-from -2017-07-30 18:51:05.712 10HmbH-000000005vi-0000 <= sender@source.dom U=root Ci=p1244 P=local-bsmtp S=sss for t@test.ex -2017-07-30 18:51:05.712 10HmbH-000000005vi-0000 ** t@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 550 no such recipient -2017-07-30 18:51:05.712 10HmbH-000000005vi-0000 t@test.ex: error ignored -2017-07-30 18:51:05.712 10HmbH-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbI-000000005vi-0000 <= sender@source.dom U=root Ci=p1245 P=local-bsmtp S=sss for u@test.ex -2017-07-30 18:51:05.712 10HmbI-000000005vi-0000 ** u@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 500 oops bdat -2017-07-30 18:51:05.712 10HmbI-000000005vi-0000 u@test.ex: error ignored -2017-07-30 18:51:05.712 10HmbI-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbJ-000000005vi-0000 <= sender@source.dom U=root Ci=p1246 P=local-bsmtp S=sss for v@test.ex -2017-07-30 18:51:05.712 10HmbJ-000000005vi-0000 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 400 not right now bdat -2017-07-30 18:51:05.712 10HmbJ-000000005vi-0000 == v@test.ex R=to_server T=remote_smtp defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 400 not right now bdat diff --git a/test/log/0905 b/test/log/0905 index 693401145..d53fe9dbf 100644 --- a/test/log/0905 +++ b/test/log/0905 @@ -1,37 +1,33 @@ -2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 <= sender@dom U=root Ci=p1234 P=local-bsmtp S=sss for a@test.ex +2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 <= sender@source.dom U=root Ci=p1235 P=local-bsmtp S=sss for a@test.ex 2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 => a@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat" 2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 <= sender@dom U=root Ci=p1235 P=local-bsmtp S=sss for d@test.ex -2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 ** d@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after sending data block: 500 oops bdat-nonlast -2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 d@test.ex: error ignored +2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 <= sender@source.dom U=root Ci=p1236 P=local-bsmtp S=sss for c@test.ex +2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 => c@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat" 2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 <= sender@dom U=root Ci=p1236 P=local-bsmtp S=sss for p@test.ex -2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 => p@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat" +2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 <= sender@source.dom U=root Ci=p1237 P=local-bsmtp S=sss for d@test.ex +2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 ** d@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 550 unacceptable mail-from +2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 d@test.ex: error ignored 2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 <= sender@dom U=root Ci=p1237 P=local-bsmtp S=sss for s@test.ex -2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 ** s@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined sending data block: 550 unacceptable mail-from -2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 s@test.ex: error ignored -2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 <= sender@dom U=root Ci=p1238 P=local-bsmtp S=sss for t@test.ex -2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 ** t@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 550 no such recipient -2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 t@test.ex: error ignored +2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 <= sender@source.dom U=root Ci=p1238 P=local-bsmtp S=sss for c1@test.ex +2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 450 greylisted mail-from +2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 == c1@test.ex R=to_server T=remote_smtp defer (-45) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 450 greylisted mail-from +2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 <= sender@source.dom U=root Ci=p1239 P=local-bsmtp S=sss for e@test.ex +2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 ** e@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 550 no such recipient +2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 e@test.ex: error ignored 2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 <= sender@dom U=root Ci=p1239 P=local-bsmtp S=sss for t1@test.ex t2@test.ex -2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 ** t1@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 550 no such recipient -2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 => t2@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat" -2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 t1@test.ex: error ignored +2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 <= sender@source.dom U=root Ci=p1240 P=local-bsmtp S=sss for f1@test.ex +2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 peer close after all rcpt responses; converting i/o-error to no-error +2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 ** f1@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes: SMTP error from remote mail server after RCPT TO:: 550 we really do not like you +2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 f1@test.ex: error ignored 2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 <= sender@dom U=root Ci=p1240 P=local-bsmtp S=sss for u@test.ex -2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 ** u@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined sending data block: 500 oops nonlast bdat -2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 u@test.ex: error ignored +2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 <= sender@source.dom U=root Ci=p1241 P=local-bsmtp S=sss for g@test.ex +2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 ** g@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 500 oops bdat +2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 g@test.ex: error ignored 2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 <= sender@dom U=root Ci=p1241 P=local-bsmtp S=sss for v@test.ex -2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 ** v@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 500 oops bdat -2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 v@test.ex: error ignored -2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 Completed -2017-07-30 18:51:05.712 10HmbF-000000005vi-0000 <= sender@dom U=root Ci=p1242 P=local-bsmtp S=sss for u@test.ex -2017-07-30 18:51:05.712 10HmbF-000000005vi-0000 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined sending data block: 400 oops nonlast bdat -2017-07-30 18:51:05.712 10HmbF-000000005vi-0000 == u@test.ex R=to_server T=remote_smtp defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined sending data block: 400 oops nonlast bdat -2017-07-30 18:51:05.712 10HmbG-000000005vi-0000 <= sender@dom U=root Ci=p1243 P=local-bsmtp S=sss for p@test.ex -2017-07-30 18:51:05.712 10HmbG-000000005vi-0000 => p@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat" -2017-07-30 18:51:05.712 10HmbG-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 <= sender@source.dom U=root Ci=p1242 P=local-bsmtp S=sss for h@test.ex +2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 400 not right now bdat +2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 == h@test.ex R=to_server T=remote_smtp defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 400 not right now bdat + +******** SERVER ******** +2017-07-30 18:51:05.712 exim x.yz daemon started: pid=p1243, no queue runs, listening for SMTP on port PORT_S +2017-07-30 18:51:05.712 H=localhost (testhost.test.ex) [127.0.0.1] Ci=p1234 X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no F=<> rejected RCPT : 550 we really do not like you diff --git a/test/log/0906 b/test/log/0906 index fbdc696f7..693401145 100644 --- a/test/log/0906 +++ b/test/log/0906 @@ -1,12 +1,37 @@ -1999-03-02 09:44:33 Start queue run: pid=p1234 -1999-03-02 09:44:33 10HmaX-000000005vi-0000 => a R=localuser T=local_delivery -1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed -1999-03-02 09:44:33 End queue run: pid=p1234 - -******** SERVER ******** -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_S -1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= sender@dom H=(test.com) [127.0.0.1] P=esmtp K S=sss for a@test.ex -1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= <> H=localhost (testhost.test.ex) [127.0.0.1] P=esmtp K S=sss for a@test.ex -1999-03-02 09:44:33 10HmaX-000000005vi-0000 no immediate delivery: queued by ACL -1999-03-02 09:44:33 10HmaY-000000005vi-0000 => a@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250- 8nn byte chunk, total 8nn\\n250 OK id=10HmaX-000000005vi-0000" -1999-03-02 09:44:33 10HmaY-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 <= sender@dom U=root Ci=p1234 P=local-bsmtp S=sss for a@test.ex +2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 => a@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat" +2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 <= sender@dom U=root Ci=p1235 P=local-bsmtp S=sss for d@test.ex +2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 ** d@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after sending data block: 500 oops bdat-nonlast +2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 d@test.ex: error ignored +2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 <= sender@dom U=root Ci=p1236 P=local-bsmtp S=sss for p@test.ex +2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 => p@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat" +2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 <= sender@dom U=root Ci=p1237 P=local-bsmtp S=sss for s@test.ex +2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 ** s@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined sending data block: 550 unacceptable mail-from +2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 s@test.ex: error ignored +2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 <= sender@dom U=root Ci=p1238 P=local-bsmtp S=sss for t@test.ex +2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 ** t@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 550 no such recipient +2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 t@test.ex: error ignored +2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 <= sender@dom U=root Ci=p1239 P=local-bsmtp S=sss for t1@test.ex t2@test.ex +2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 ** t1@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 550 no such recipient +2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 => t2@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat" +2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 t1@test.ex: error ignored +2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 <= sender@dom U=root Ci=p1240 P=local-bsmtp S=sss for u@test.ex +2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 ** u@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined sending data block: 500 oops nonlast bdat +2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 u@test.ex: error ignored +2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 <= sender@dom U=root Ci=p1241 P=local-bsmtp S=sss for v@test.ex +2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 ** v@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 500 oops bdat +2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 v@test.ex: error ignored +2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 Completed +2017-07-30 18:51:05.712 10HmbF-000000005vi-0000 <= sender@dom U=root Ci=p1242 P=local-bsmtp S=sss for u@test.ex +2017-07-30 18:51:05.712 10HmbF-000000005vi-0000 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined sending data block: 400 oops nonlast bdat +2017-07-30 18:51:05.712 10HmbF-000000005vi-0000 == u@test.ex R=to_server T=remote_smtp defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined sending data block: 400 oops nonlast bdat +2017-07-30 18:51:05.712 10HmbG-000000005vi-0000 <= sender@dom U=root Ci=p1243 P=local-bsmtp S=sss for p@test.ex +2017-07-30 18:51:05.712 10HmbG-000000005vi-0000 => p@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat" +2017-07-30 18:51:05.712 10HmbG-000000005vi-0000 Completed diff --git a/test/log/0908 b/test/log/0908 new file mode 100644 index 000000000..fbdc696f7 --- /dev/null +++ b/test/log/0908 @@ -0,0 +1,12 @@ +1999-03-02 09:44:33 Start queue run: pid=p1234 +1999-03-02 09:44:33 10HmaX-000000005vi-0000 => a R=localuser T=local_delivery +1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed +1999-03-02 09:44:33 End queue run: pid=p1234 + +******** SERVER ******** +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_S +1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= sender@dom H=(test.com) [127.0.0.1] P=esmtp K S=sss for a@test.ex +1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= <> H=localhost (testhost.test.ex) [127.0.0.1] P=esmtp K S=sss for a@test.ex +1999-03-02 09:44:33 10HmaX-000000005vi-0000 no immediate delivery: queued by ACL +1999-03-02 09:44:33 10HmaY-000000005vi-0000 => a@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250- 8nn byte chunk, total 8nn\\n250 OK id=10HmaX-000000005vi-0000" +1999-03-02 09:44:33 10HmaY-000000005vi-0000 Completed diff --git a/test/log/0909 b/test/log/0909 new file mode 100644 index 000000000..83df51213 --- /dev/null +++ b/test/log/0909 @@ -0,0 +1,30 @@ +2017-07-30 18:51:05.712 SMTP connection from root +2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 <= fred@myhost.test.ex U=root P=local-smtp S=sss for good@test.ex +2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 => good@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L K C="250 OK chunked message data" +2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 Completed +2017-07-30 18:51:05.712 SMTP connection from root D=q.qqqs closed by QUIT +2017-07-30 18:51:05.712 SMTP connection from root +2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 <= fred@myhost.test.ex U=root P=local-smtp S=sss for nopipe@test.ex +2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 => nopipe@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] K C="250 OK chunked message data" +2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 Completed +2017-07-30 18:51:05.712 SMTP connection from root D=q.qqqs closed by QUIT +2017-07-30 18:51:05.712 SMTP connection from root +2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 <= fred@myhost.test.ex U=root P=local-smtp S=sss for tempreject@test.ex +2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 451 Service not available +2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 == tempreject@test.ex R=client T=send_to_server defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 451 Service not available +2017-07-30 18:51:05.712 SMTP connection from root D=q.qqqs closed by QUIT +2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 removed by CALLER +2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 Completed +2017-07-30 18:51:05.712 SMTP connection from root +2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 <= fred@myhost.test.ex U=root P=local-smtp S=sss for permreject@test.ex +2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 ** permreject@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 end of data: 550 content rejected +2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 permreject@test.ex: error ignored +2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 Completed +2017-07-30 18:51:05.712 SMTP connection from root D=q.qqqs closed by QUIT +2017-07-30 18:51:05.712 SMTP connection from root +2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 <= fred@myhost.test.ex U=root P=local-smtp S=sss for dataloss@test.ex +2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 H=127.0.0.1 [127.0.0.1]: Remote host closed connection in response to pipelined end of data +2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 == dataloss@test.ex R=client T=send_to_server defer (-18) H=127.0.0.1 [127.0.0.1]: Remote host closed connection in response to pipelined end of data +2017-07-30 18:51:05.712 SMTP connection from root D=q.qqqs closed by QUIT +2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 removed by CALLER +2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 Completed diff --git a/test/log/0911 b/test/log/0911 deleted file mode 100644 index 83df51213..000000000 --- a/test/log/0911 +++ /dev/null @@ -1,30 +0,0 @@ -2017-07-30 18:51:05.712 SMTP connection from root -2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 <= fred@myhost.test.ex U=root P=local-smtp S=sss for good@test.ex -2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 => good@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L K C="250 OK chunked message data" -2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 Completed -2017-07-30 18:51:05.712 SMTP connection from root D=q.qqqs closed by QUIT -2017-07-30 18:51:05.712 SMTP connection from root -2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 <= fred@myhost.test.ex U=root P=local-smtp S=sss for nopipe@test.ex -2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 => nopipe@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] K C="250 OK chunked message data" -2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 Completed -2017-07-30 18:51:05.712 SMTP connection from root D=q.qqqs closed by QUIT -2017-07-30 18:51:05.712 SMTP connection from root -2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 <= fred@myhost.test.ex U=root P=local-smtp S=sss for tempreject@test.ex -2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 451 Service not available -2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 == tempreject@test.ex R=client T=send_to_server defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 451 Service not available -2017-07-30 18:51:05.712 SMTP connection from root D=q.qqqs closed by QUIT -2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 removed by CALLER -2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 Completed -2017-07-30 18:51:05.712 SMTP connection from root -2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 <= fred@myhost.test.ex U=root P=local-smtp S=sss for permreject@test.ex -2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 ** permreject@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 end of data: 550 content rejected -2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 permreject@test.ex: error ignored -2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 Completed -2017-07-30 18:51:05.712 SMTP connection from root D=q.qqqs closed by QUIT -2017-07-30 18:51:05.712 SMTP connection from root -2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 <= fred@myhost.test.ex U=root P=local-smtp S=sss for dataloss@test.ex -2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 H=127.0.0.1 [127.0.0.1]: Remote host closed connection in response to pipelined end of data -2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 == dataloss@test.ex R=client T=send_to_server defer (-18) H=127.0.0.1 [127.0.0.1]: Remote host closed connection in response to pipelined end of data -2017-07-30 18:51:05.712 SMTP connection from root D=q.qqqs closed by QUIT -2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 removed by CALLER -2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 Completed diff --git a/test/log/1115 b/test/log/1115 new file mode 100644 index 000000000..d09da31a0 --- /dev/null +++ b/test/log/1115 @@ -0,0 +1,3 @@ + +******** SERVER ******** +1999-03-02 09:44:33 exim x.yz daemon started: pid=p1234, no queue runs, listening for SMTPS on port PORT_D2 diff --git a/test/log/1157 b/test/log/1157 index d9b8c02e2..83e829684 100644 --- a/test/log/1157 +++ b/test/log/1157 @@ -4,10 +4,10 @@ 1999-03-02 09:44:33 Start queue run: pid=p1234 -qqf 1999-03-02 09:44:33 10HmaX-000000005vi-0000 => userx@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbA-000000005vi-0000" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => userz@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbB-000000005vi-0000" -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmaY-000000005vi-0000 => usery@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbC-000000005vi-0000" +1999-03-02 09:44:33 10HmaY-000000005vi-0000 => usery@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbB-000000005vi-0000" 1999-03-02 09:44:33 10HmaY-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => userz@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbC-000000005vi-0000" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed 1999-03-02 09:44:33 End queue run: pid=p1234 -qqf 1999-03-02 09:44:33 10HmbD-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for usera@test.ex 1999-03-02 09:44:33 10HmbE-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for userb@test.ex @@ -15,10 +15,10 @@ 1999-03-02 09:44:33 Start queue run: pid=p1235 -qqf 1999-03-02 09:44:33 10HmbD-000000005vi-0000 => usera@test.ex R=cl_override T=send_to_server H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbG-000000005vi-0000" 1999-03-02 09:44:33 10HmbD-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbF-000000005vi-0000 => userc@test.ex R=cl_override T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbH-000000005vi-0000" -1999-03-02 09:44:33 10HmbF-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbE-000000005vi-0000 => userb@test.ex R=cl_override T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbI-000000005vi-0000" +1999-03-02 09:44:33 10HmbE-000000005vi-0000 => userb@test.ex R=cl_override T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbH-000000005vi-0000" 1999-03-02 09:44:33 10HmbE-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbF-000000005vi-0000 => userc@test.ex R=cl_override T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbI-000000005vi-0000" +1999-03-02 09:44:33 10HmbF-000000005vi-0000 Completed 1999-03-02 09:44:33 End queue run: pid=p1235 -qqf 1999-03-02 09:44:33 10HmbJ-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for user_p@test.ex 1999-03-02 09:44:33 10HmbK-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for user_q@test.ex @@ -26,44 +26,44 @@ 1999-03-02 09:44:33 Start queue run: pid=p1236 -qqf 1999-03-02 09:44:33 10HmbJ-000000005vi-0000 => user_p@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbM-000000005vi-0000" 1999-03-02 09:44:33 10HmbJ-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbL-000000005vi-0000 => user_r@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbN-000000005vi-0000" -1999-03-02 09:44:33 10HmbL-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbK-000000005vi-0000 => user_q@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbO-000000005vi-0000" +1999-03-02 09:44:33 10HmbK-000000005vi-0000 => user_q@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbN-000000005vi-0000" 1999-03-02 09:44:33 10HmbK-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbL-000000005vi-0000 => user_r@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbO-000000005vi-0000" +1999-03-02 09:44:33 10HmbL-000000005vi-0000 Completed 1999-03-02 09:44:33 End queue run: pid=p1236 -qqf ******** SERVER ******** 1999-03-02 09:44:33 exim x.yz daemon started: pid=p1237, no queue runs, listening for SMTP on port PORT_D 1999-03-02 09:44:33 SMTP connection from [127.0.0.1]:1111 (TCP/IP connection count = 1) 1999-03-02 09:44:33 10HmbA-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1111 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaX-000000005vi-0000@myhost.test.ex for userx@test.ex -1999-03-02 09:44:33 10HmbB-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1111 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaZ-000000005vi-0000@myhost.test.ex for userz@test.ex -1999-03-02 09:44:33 10HmbC-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1111 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaY-000000005vi-0000@myhost.test.ex for usery@test.ex +1999-03-02 09:44:33 10HmbB-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1111 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaY-000000005vi-0000@myhost.test.ex for usery@test.ex +1999-03-02 09:44:33 10HmbC-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1111 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaZ-000000005vi-0000@myhost.test.ex for userz@test.ex 1999-03-02 09:44:33 SMTP connection from localhost (myhost.test.ex) [127.0.0.1]:1111 D=qqs closed by QUIT 1999-03-02 09:44:33 Start queue run: pid=p1238 -qf 1999-03-02 09:44:33 10HmbA-000000005vi-0000 => userx R=server T=local_delivery 1999-03-02 09:44:33 10HmbA-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbB-000000005vi-0000 => userz R=server T=local_delivery +1999-03-02 09:44:33 10HmbB-000000005vi-0000 => usery R=server T=local_delivery 1999-03-02 09:44:33 10HmbB-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbC-000000005vi-0000 => usery R=server T=local_delivery +1999-03-02 09:44:33 10HmbC-000000005vi-0000 => userz R=server T=local_delivery 1999-03-02 09:44:33 10HmbC-000000005vi-0000 Completed 1999-03-02 09:44:33 End queue run: pid=p1238 -qf 1999-03-02 09:44:33 exim x.yz daemon started: pid=p1239, no queue runs, listening for SMTP on port PORT_D 1999-03-02 09:44:33 SMTP connection from [127.0.0.1]:1112 (TCP/IP connection count = 1) 1999-03-02 09:44:33 10HmbG-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1112 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbD-000000005vi-0000@myhost.test.ex for usera@test.ex -1999-03-02 09:44:33 10HmbH-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1112 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbF-000000005vi-0000@myhost.test.ex for userc@test.ex -1999-03-02 09:44:33 10HmbI-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1112 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbE-000000005vi-0000@myhost.test.ex for userb@test.ex +1999-03-02 09:44:33 10HmbH-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1112 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbE-000000005vi-0000@myhost.test.ex for userb@test.ex +1999-03-02 09:44:33 10HmbI-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1112 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbF-000000005vi-0000@myhost.test.ex for userc@test.ex 1999-03-02 09:44:33 SMTP connection from localhost (myhost.test.ex) [127.0.0.1]:1112 D=qqs closed by QUIT 1999-03-02 09:44:33 Start queue run: pid=p1240 -qf 1999-03-02 09:44:33 10HmbG-000000005vi-0000 => usera R=server T=local_delivery 1999-03-02 09:44:33 10HmbG-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbH-000000005vi-0000 => userc R=server T=local_delivery +1999-03-02 09:44:33 10HmbH-000000005vi-0000 => userb R=server T=local_delivery 1999-03-02 09:44:33 10HmbH-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbI-000000005vi-0000 => userb R=server T=local_delivery +1999-03-02 09:44:33 10HmbI-000000005vi-0000 => userc R=server T=local_delivery 1999-03-02 09:44:33 10HmbI-000000005vi-0000 Completed 1999-03-02 09:44:33 End queue run: pid=p1240 -qf 1999-03-02 09:44:33 exim x.yz daemon started: pid=p1241, no queue runs, listening for SMTP on port PORT_D 1999-03-02 09:44:33 SMTP connection from [127.0.0.1]:1113 (TCP/IP connection count = 1) 1999-03-02 09:44:33 10HmbM-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1113 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbJ-000000005vi-0000@myhost.test.ex for user_p@test.ex -1999-03-02 09:44:33 10HmbN-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1113 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbL-000000005vi-0000@myhost.test.ex for user_r@test.ex -1999-03-02 09:44:33 10HmbO-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1113 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbK-000000005vi-0000@myhost.test.ex for user_q@test.ex +1999-03-02 09:44:33 10HmbN-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1113 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbK-000000005vi-0000@myhost.test.ex for user_q@test.ex +1999-03-02 09:44:33 10HmbO-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1113 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbL-000000005vi-0000@myhost.test.ex for user_r@test.ex 1999-03-02 09:44:33 SMTP connection from localhost (myhost.test.ex) [127.0.0.1]:1113 D=qqs closed by QUIT diff --git a/test/log/1163 b/test/log/1163 index 31aec57c0..f1041ddf1 100644 --- a/test/log/1163 +++ b/test/log/1163 @@ -5,12 +5,12 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 => userx0@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbA-000000005vi-0000" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 => userx1@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbB-000000005vi-0000" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => userz0@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbC-000000005vi-0000" -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => userz1@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbD-000000005vi-0000" -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmaY-000000005vi-0000 => usery0@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbE-000000005vi-0000" -1999-03-02 09:44:33 10HmaY-000000005vi-0000 => usery1@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbF-000000005vi-0000" +1999-03-02 09:44:33 10HmaY-000000005vi-0000 => usery0@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbC-000000005vi-0000" +1999-03-02 09:44:33 10HmaY-000000005vi-0000 => usery1@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbD-000000005vi-0000" 1999-03-02 09:44:33 10HmaY-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => userz0@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbE-000000005vi-0000" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => userz1@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbF-000000005vi-0000" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed 1999-03-02 09:44:33 End queue run: pid=p1234 -qqf ******** SERVER ******** @@ -19,23 +19,23 @@ 1999-03-02 09:44:33 10HmbA-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1111 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaX-000000005vi-0000@myhost.test.ex for userx0@test.ex 1999-03-02 09:44:33 SMTP connection from [127.0.0.1]:1112 (TCP/IP connection count = 2) 1999-03-02 09:44:33 10HmbB-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1112 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaX-000000005vi-0000@myhost.test.ex for userx1@test.ex -1999-03-02 09:44:33 10HmbC-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1111 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaZ-000000005vi-0000@myhost.test.ex for userz0@test.ex -1999-03-02 09:44:33 10HmbD-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1111 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaZ-000000005vi-0000@myhost.test.ex for userz1@test.ex +1999-03-02 09:44:33 10HmbC-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1111 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaY-000000005vi-0000@myhost.test.ex for usery0@test.ex +1999-03-02 09:44:33 10HmbD-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1111 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaY-000000005vi-0000@myhost.test.ex for usery1@test.ex 1999-03-02 09:44:33 SMTP connection from localhost (myhost.test.ex) [127.0.0.1]:1111 D=qqs closed by QUIT -1999-03-02 09:44:33 10HmbE-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1112 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaY-000000005vi-0000@myhost.test.ex for usery0@test.ex -1999-03-02 09:44:33 10HmbF-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1112 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaY-000000005vi-0000@myhost.test.ex for usery1@test.ex +1999-03-02 09:44:33 10HmbE-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1112 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaZ-000000005vi-0000@myhost.test.ex for userz0@test.ex +1999-03-02 09:44:33 10HmbF-000000005vi-0000 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1112 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaZ-000000005vi-0000@myhost.test.ex for userz1@test.ex 1999-03-02 09:44:33 SMTP connection from localhost (myhost.test.ex) [127.0.0.1]:1112 D=qqs closed by QUIT 1999-03-02 09:44:33 Start queue run: pid=p1236 -qf 1999-03-02 09:44:33 10HmbA-000000005vi-0000 => userx0 R=server T=local_delivery 1999-03-02 09:44:33 10HmbA-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbB-000000005vi-0000 => userx1 R=server T=local_delivery 1999-03-02 09:44:33 10HmbB-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbC-000000005vi-0000 => userz0 R=server T=local_delivery +1999-03-02 09:44:33 10HmbC-000000005vi-0000 => usery0 R=server T=local_delivery 1999-03-02 09:44:33 10HmbC-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbD-000000005vi-0000 => userz1 R=server T=local_delivery +1999-03-02 09:44:33 10HmbD-000000005vi-0000 => usery1 R=server T=local_delivery 1999-03-02 09:44:33 10HmbD-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbE-000000005vi-0000 => usery0 R=server T=local_delivery +1999-03-02 09:44:33 10HmbE-000000005vi-0000 => userz0 R=server T=local_delivery 1999-03-02 09:44:33 10HmbE-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbF-000000005vi-0000 => usery1 R=server T=local_delivery +1999-03-02 09:44:33 10HmbF-000000005vi-0000 => userz1 R=server T=local_delivery 1999-03-02 09:44:33 10HmbF-000000005vi-0000 Completed 1999-03-02 09:44:33 End queue run: pid=p1236 -qf diff --git a/test/log/2102 b/test/log/2102 index 4702a6c7e..b20cf6100 100644 --- a/test/log/2102 +++ b/test/log/2102 @@ -1,49 +1,49 @@ -1999-03-02 09:44:33 Start queue run: pid=pppp -qf -1999-03-02 09:44:33 10HmaX-0005vi-00 => CALLER R=abc T=local_delivery -1999-03-02 09:44:33 10HmaX-0005vi-00 Completed -1999-03-02 09:44:33 10HmaY-0005vi-00 => CALLER R=abc T=local_delivery -1999-03-02 09:44:33 10HmaY-0005vi-00 Completed -1999-03-02 09:44:33 10HmaZ-0005vi-00 => CALLER R=abc T=local_delivery -1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed -1999-03-02 09:44:33 10HmbA-0005vi-00 => CALLER R=abc T=local_delivery -1999-03-02 09:44:33 10HmbA-0005vi-00 Completed -1999-03-02 09:44:33 End queue run: pid=pppp -qf +1999-03-02 09:44:33 Start queue run: pid=p1234 -qf +1999-03-02 09:44:33 10HmaX-000000005vi-0000 => CALLER R=abc T=local_delivery +1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmaY-000000005vi-0000 => CALLER R=abc T=local_delivery +1999-03-02 09:44:33 10HmaY-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => CALLER R=abc T=local_delivery +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbA-000000005vi-0000 => CALLER R=abc T=local_delivery +1999-03-02 09:44:33 10HmbA-000000005vi-0000 Completed +1999-03-02 09:44:33 End queue run: pid=p1234 -qf ******** SERVER ******** -1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D -1999-03-02 09:44:33 Our cert SN: +1999-03-02 09:44:33 exim x.yz daemon started: pid=p1235, no queue runs, listening for SMTP on port PORT_D +1999-03-02 09:44:33 Our cert SN: 1999-03-02 09:44:33 Peer did not present a cert -1999-03-02 09:44:33 10HmaX-0005vi-00 <= a@test.ex H=(rhu.barb) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss -1999-03-02 09:44:33 Our cert SN: +1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= a@test.ex H=(rhu.barb) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss +1999-03-02 09:44:33 Our cert SN: 1999-03-02 09:44:33 Peer did not present a cert -1999-03-02 09:44:33 10HmaY-0005vi-00 <= "name with spaces"@test.ex H=(rhu.barb) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss +1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= "name with spaces"@test.ex H=(rhu.barb) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss 1999-03-02 09:44:33 TLS error on connection from (rhu.barb) [ip4.ip4.ip4.ip4] (SSL_accept): error: <> -1999-03-02 09:44:33 Our cert SN: +1999-03-02 09:44:33 Our cert SN: 1999-03-02 09:44:33 Peer cert: 1999-03-02 09:44:33 ver 2 1999-03-02 09:44:33 SR 1999-03-02 09:44:33 SN 1999-03-02 09:44:33 IN 1999-03-02 09:44:33 IN/O -1999-03-02 09:44:33 NB/r -1999-03-02 09:44:33 NB -1999-03-02 09:44:33 NB/i <1351773270> -1999-03-02 09:44:33 NA/i <2143283670> -1999-03-02 09:44:33 NA +1999-03-02 09:44:33 NB/r +1999-03-02 09:44:33 NB +1999-03-02 09:44:33 NB/i <1572611696> +1999-03-02 09:44:33 NA/i <2364208496> +1999-03-02 09:44:33 NA 1999-03-02 09:44:33 SA -1999-03-02 09:44:33 SG <5d:2c:8d:dc:bf:45:79:5d:60:8e:57:08:fe:10:da:9d:34:eb:e6:b0:b0:5b:88:16:70:97:0b:ab:b4:1c:a8:04:99:40:84:1b:ed:45:6c:fc:30:9c:f2:f2:44:28:f3:76:28:a0:14:49:9f:a1:00:ac:2b:cf:88:68:ea:bc:21:d2:4b:29:fa:5e:38:d8:78:52:ae:0e:d8:ef:20:84:f3:43:8a:05:ea:17:f7:37:89:a8:9b:3a:ba:41:26:d2:e4:0f:a5:21:f6:c1:e7:15:90:b0:c4:5b:2b:d0:05:23:e7:84:45:77:24:b1:34:8f:24:a0:9b:69:39:52:0a:ec:b3:38:1e:70:47:60:23:ea:f7:3d:c7:0c:20:de:dd:d5:6f:56:76:db:74:24:c4:4e:13:e1:ee:0a:b5:c1:72:95:38:08:11:bc:e4:fe:d5:be:5f:80:1d:5d:c9:48:b8:40:43:5a:3e:2a:fa:bb:e7:df:29:79:d2:c2:3a:2d:f4:4b:02:f1:c3:05:88:84:9a:b4:af:03:c0:55:2b:72:b0:ba:f4:3b:5d:09:8f:6e:06:2a:52:0d:a4:4a:38:06:2c:c3:4c:83:a9:91:d9:6a:ed:a5:a1:fe:67:44:97:2c:f1:f9:4f:36:1f:92:57:0c:76:7a:d3:e0:6f:04:72:11:db:ae:4b:42> +1999-03-02 09:44:33 SG <43:92:24:83:bd:6e:40:cd:67:7e:2a:5d:fb:9d:89:f6:a2:9b:c5:06:47:d0:db:8e:20:52:59:97:b0:7f:69:f1:96:05:89:2f:6c:f8:e1:22:f7:28:1e:07:07:2b:81:47:05:1f:d7:74:f8:49:af:b4:86:15:7c:46:82:cd:63:f4:f1:e2:d8:d1:ba:6e:a5:63:92:27:97:5a:69:0e:42:b8:9f:78:09:9d:d5:0c:1e:37:49:a5:ac:35:c8:6a:ce:1e:50:69:27:a9:18:ab:19:50:10:64:2a:d9:4c:8a:47:79:4b:05:b8:fe:cb:c2:7c:ef:0e:99:46:a8:4a:68:52:33:95:8b:fe:0d:b1:4a:e3:21:5e:55:3a:4a:7e:21:91:0e:f7:85:d5:36:da:4b:22:51:16:a0:b7:7c:a5:d8:f6:a6:b2:15:3d:36:d6:01:46:aa:7a:9c:b9:52:24:36:d0:40:3d:cf:62:9b:b4:60:37:9a:5a:a5:f1:f8:e4:bc:30:11:05:3e:ad:4c:ef:6a:81:ca:e3:73:e0:1e:44:8c:9a:e1:41:41:c6:59:97:be:01:84:8b:30:da:9d:cb:a4:93:d8:54:d0:c6:58:eb:8c:ff:ef:7e:d3:40:8d:59:88:12:db:36:63:df:a2:1a:46:14:c6:c1:8a:75:aa:70:1f:4d:0c> 1999-03-02 09:44:33 SAN 1999-03-02 09:44:33 OCU 1999-03-02 09:44:33 (no CRU) -1999-03-02 09:44:33 md5 fingerprint 1B701FAEF70F57451A50B2A91EF011EE -1999-03-02 09:44:33 sha1 fingerprint DE737222042460A49F3E53A3FE05B9313E57327B -1999-03-02 09:44:33 sha256 fingerprint D64B951B475CAB05CD7CFDBC4A1E4754D448FA554D6BB0411E065A5A885A013A -1999-03-02 09:44:33 der_b64 MIIDuDCCAqCgAwIBAgICAMkwDQYJKoZIhvcNAQELBQAwNzEUMBIGA1UEChMLZXhhbXBsZS5jb20xHzAdBgNVBAMTFmNsaWNhIFNpZ25pbmcgQ2VydCByc2EwHhcNMTIxMTAxMTIzNDMwWhcNMzcxMjAxMTIzNDMwWjAeMRwwGgYDVQQDExNzZXJ2ZXIyLmV4YW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxHHdAsbLWHT6remjd2Rw+Tb1EDjDgHkhc6X2d3KyEvcNkbp+RMhyC0grYbue0tOp8SU+3U+TjLAsc3xesuGJYmsC8ttWf3fNOCM7TmE80fSzbZ4j6B8z6jbGT+fblaunHTRJF5H+yRKrV+Nfi7Pqu0YO3dnlGuehg8jjDUq3QrPTSU67P7DyDQv68cgWmck4h9OOC/T81hkNJk99ThWMkTkj8WsmdLVysK8suaniNuhDQvRmF/OZBUGb6hqEdRYDz3rIjrENHCtOygPFtZhc/YNSYMokIcJw3mTPLwTE0GbCfLowhkjPYW6J7ZuOlTTQqF/9b3yIYTpmm8sGVacEEwIDAQABo4HmMIHjMA4GA1UdDwEB/wQEAwIE8DAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwTgYDVR0jBEcwRYANQUFidHdDeGNYZ2IwUaExpC8wLTEUMBIGA1UEChMLZXhhbXBsZS5jb20xFTATBgNVBAMTDGNsaWNhIENBIHJzYYIBQjA0BggrBgEFBQcBAQQoMCYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vc2NwLmV4YW1wbGUuY29tLzApBgNVHREEIjAgggkqLnRlc3QuZXiCE3NlcnZlcjIuZXhhbXBsZS5jb20wDQYJKoZIhvcNAQELBQADggEBAF0sjdy/RXldYI5XCP4Q2p006+awsFuIFnCXC6u0HKgEmUCEG+1FbPwwnPLyRCjzdiigFEmfoQCsK8+IaOq8IdJLKfpeONh4Uq4O2O8ghPNDigXqF/c3iaibOrpBJtLkD6Uh9sHnFZCwxFsr0AUj54RFdySxNI8koJtpOVIK7LM4HnBHYCPq9z3HDCDe3dVvVnbbdCTEThPh7gq1wXKVOAgRvOT+1b5fgB1dyUi4QENaPir6u+ffKXnSwjot9EsC8cMFiISatK8DwFUrcrC69DtdCY9uBipSDaRKOAYsw0yDqZHZau2lof5nRJcs8flPNh+SVwx2etPgbwRyEduuS0I= +1999-03-02 09:44:33 md5 fingerprint 0EC720D50B90219A2126318C8AC16427 +1999-03-02 09:44:33 sha1 fingerprint DDFDB41DEF1CB4425B7656C037A4614D194E1148 +1999-03-02 09:44:33 sha256 fingerprint 30C1CFCE92CA95887E8B4FDE58BD32E5FFEFBA9AF6F5A856FC5D33AB8DF8D9BF +1999-03-02 09:44:33 der_b64 MIIDuDCCAqCgAwIBAgICAMkwDQYJKoZIhvcNAQELBQAwNzEUMBIGA1UEChMLZXhhbXBsZS5jb20xHzAdBgNVBAMTFmNsaWNhIFNpZ25pbmcgQ2VydCByc2EwHhcNMTkxMTAxMTIzNDU2WhcNNDQxMjAxMTIzNDU2WjAeMRwwGgYDVQQDExNzZXJ2ZXIyLmV4YW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAof6VHfuK2WHcXTyvWXXmk98Smc4wLxTqU7/Lwh+hEqGcFNjlmv6A3blSUX76X/YCIjJljmy+i1HWyEevpEp1782h9W1OwrFZ4aUnJK+UMpThK66Dr8Xg26S6QPOebdteGkl/96hJSs0T3iLQauw/4E1fRe03ev+Ui2egtwtcFD8cmrVbE/UB47ClkXbZ3/Sz7VQGrRcAnvPe1rtTQmOxLCkS/8NLTXIx54wdEXJVcu83WciM+DeiCc1MqxO+dsJIswrGZ6gJ4Zc6NwiRy/AJuKSNU4PG/6nZEx0x3mzDTFXvqfe6hTYqCeKjFxH/uhTBn5lmClk6amehN234eyXsPQIDAQABo4HmMIHjMA4GA1UdDwEB/wQEAwIE8DAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwTgYDVR0jBEcwRYANQUFidHdDeGNYZ2IwUaExpC8wLTEUMBIGA1UEChMLZXhhbXBsZS5jb20xFTATBgNVBAMTDGNsaWNhIENBIHJzYYIBQjA0BggrBgEFBQcBAQQoMCYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vc2NwLmV4YW1wbGUuY29tLzApBgNVHREEIjAgggkqLnRlc3QuZXiCE3NlcnZlcjIuZXhhbXBsZS5jb20wDQYJKoZIhvcNAQELBQADggEBAEOSJIO9bkDNZ34qXfudifaim8UGR9DbjiBSWZewf2nxlgWJL2z44SL3KB4HByuBRwUf13T4Sa+0hhV8RoLNY/Tx4tjRum6lY5Inl1ppDkK4n3gJndUMHjdJpaw1yGrOHlBpJ6kYqxlQEGQq2UyKR3lLBbj+y8J87w6ZRqhKaFIzlYv+DbFK4yFeVTpKfiGRDveF1TbaSyJRFqC3fKXY9qayFT021gFGqnqcuVIkNtBAPc9im7RgN5papfH45LwwEQU+rUzvaoHK43PgHkSMmuFBQcZZl74BhIsw2p3LpJPYVNDGWOuM/+9+00CNWYgS2zZj36IaRhTGwYp1qnAfTQw= 1999-03-02 09:44:33 cipher: TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 cipher_ TLS1.x:ke_RSA_WITH_ci_mac 1999-03-02 09:44:33 ver: TLS1.x -1999-03-02 09:44:33 10HmaZ-0005vi-00 <= b@test.ex H=(rhu.barb) [ip4.ip4.ip4.ip4] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server2.example.com" S=sss -1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 <= b@test.ex H=(rhu.barb) [ip4.ip4.ip4.ip4] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server2.example.com" S=sss +1999-03-02 09:44:33 exim x.yz daemon started: pid=p1236, no queue runs, listening for SMTP on port PORT_D 1999-03-02 09:44:33 Our cert SN: 1999-03-02 09:44:33 Peer did not present a cert -1999-03-02 09:44:33 10HmbA-0005vi-00 <= c@test.ex H=(rhu.barb) [127.0.0.1] P=esmtps X=TLS1.x:ke-ECDSA-AES256-SHAnnn:xxx CV=no S=sss +1999-03-02 09:44:33 10HmbA-000000005vi-0000 <= c@test.ex H=(rhu.barb) [127.0.0.1] P=esmtps X=TLS1.x:ke-ECDSA-AES256-SHAnnn:xxx CV=no S=sss diff --git a/test/log/2610 b/test/log/2610 index cd0e6e9dd..4acbbd873 100644 --- a/test/log/2610 +++ b/test/log/2610 @@ -1,5 +1,5 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss -1999-03-02 09:44:33 10HmaX-000000005vi-0000 tainted search query is not properly quoted (router r1, TESTSUITE/test-config 66): select name from them where id='ph10' limit 1 -1999-03-02 09:44:33 10HmaX-000000005vi-0000 tainted search query is not properly quoted (transport t1, TESTSUITE/test-config 80): select id from them where id='ph10' +1999-03-02 09:44:33 10HmaX-000000005vi-0000 tainted search query is not properly quoted (router r1, TESTSUITE/test-config 68): select name from them where id='ph10' limit 1 +1999-03-02 09:44:33 10HmaX-000000005vi-0000 tainted search query is not properly quoted (transport t1, TESTSUITE/test-config 82): select id from them where id='ph10' 1999-03-02 09:44:33 10HmaX-000000005vi-0000 => ph10 R=r1 T=t1 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed diff --git a/test/log/4004 b/test/log/4004 index 82e195fb9..5a04f6290 100644 --- a/test/log/4004 +++ b/test/log/4004 @@ -1,3 +1,4 @@ +1999-03-02 09:44:33 10HmaX-000000005vi-0000 qualify/rewrite: missing or malformed local part 1999-03-02 09:44:33 10HmaX-000000005vi-0000 U=CALLER Warning: reject Action: reject\n Symbol: FAKE_SYMBOL_A(15.00)\n Symbol: FAKE_SYMBOL_B(0.00)\n Message-ID: undef 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local-esmtp S=sss 1999-03-02 09:44:33 10HmaX-000000005vi-0000 => :blackhole: R=r diff --git a/test/log/4040 b/test/log/4040 new file mode 100644 index 000000000..4274a7a75 --- /dev/null +++ b/test/log/4040 @@ -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/log/4207 b/test/log/4207 index f3cc864c5..24521c670 100644 --- a/test/log/4207 +++ b/test/log/4207 @@ -10,8 +10,11 @@ ******** 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 10HmaY-000000005vi-0000 qualify/rewrite: domain missing or malformed 1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= xn--ihqwcrb4cv8a8dqg056pqjye@hebrew.xn--4dbcagdahymbxekheh6e0a7fei0b.com H=localhost (the.local.host.name) [127.0.0.1] P=esmtp S=sss id=E10HmaX-000000005vi-0000@the.local.host.name for xn--user1.-g95ww2bm7c8xj18gesgrby74dwqh18as2ft0ab05f5nc9w1befas47alnaxwd256esy4hea33e@test.ex +1999-03-02 09:44:33 10HmbA-000000005vi-0000 qualify/rewrite: domain missing or malformed 1999-03-02 09:44:33 10HmbA-000000005vi-0000 <= xn--ihqwcrb4cv8a8dqg056pqjye@hebrew.xn--4dbcagdahymbxekheh6e0a7fei0b.com H=localhost (the.local.host.name) [127.0.0.1] P=esmtp S=sss id=E10HmaZ-000000005vi-0000@the.local.host.name for xn--user2.-g95ww2bm7c8xj18gesgrby74dwqh18as2ft0ab05f5nc9w1befas47alnaxwd256esy4hea33e@test.ex +1999-03-02 09:44:33 10HmbC-000000005vi-0000 qualify/rewrite: domain missing or malformed 1999-03-02 09:44:33 10HmbC-000000005vi-0000 <= xn--ihqwcrb4cv8a8dqg056pqjye@hebrew.xn--4dbcagdahymbxekheh6e0a7fei0b.com H=localhost (the.local.host.name) [127.0.0.1] P=esmtp S=sss id=E10HmbB-000000005vi-0000@the.local.host.name for xn--user3.-g95ww2bm7c8xj18gesgrby74dwqh18as2ft0ab05f5nc9w1befas47alnaxwd256esy4hea33e@test.ex 1999-03-02 09:44:33 Start queue run: pid=p1235 -qqff 1999-03-02 09:44:33 10HmaY-000000005vi-0000 => :blackhole: R=localuser diff --git a/test/log/4510 b/test/log/4510 index 08f73d5b4..0c5ef4d5e 100644 --- a/test/log/4510 +++ b/test/log/4510 @@ -1,24 +1,27 @@ 1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for a@test.ex -1999-03-02 09:44:33 10HmaY-000000005vi-0000 => a@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] C="250 OK id=10HmaZ-000000005vi-0000" +1999-03-02 09:44:33 10HmaY-000000005vi-0000 => a@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] DKIM=test.ex:sel C="250 OK id=10HmaZ-000000005vi-0000" 1999-03-02 09:44:33 10HmaY-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbA-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for b@test.ex -1999-03-02 09:44:33 10HmbA-000000005vi-0000 => b@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] C="250 OK id=10HmbB-000000005vi-0000" +1999-03-02 09:44:33 10HmbA-000000005vi-0000 => b@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] DKIM=test.ex:sel C="250 OK id=10HmbB-000000005vi-0000" 1999-03-02 09:44:33 10HmbA-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbC-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for b10@test.ex -1999-03-02 09:44:33 10HmbC-000000005vi-0000 => b10@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] C="250 OK id=10HmbD-000000005vi-0000" +1999-03-02 09:44:33 10HmbC-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for b02@test.ex +1999-03-02 09:44:33 10HmbC-000000005vi-0000 => b02@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] DKIM=test.ex:sel C="250 OK id=10HmbD-000000005vi-0000" 1999-03-02 09:44:33 10HmbC-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbE-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for b12@test.ex -1999-03-02 09:44:33 10HmbE-000000005vi-0000 => b12@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] C="250 OK id=10HmbF-000000005vi-0000" +1999-03-02 09:44:33 10HmbE-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for b10@test.ex +1999-03-02 09:44:33 10HmbE-000000005vi-0000 => b10@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] DKIM=test.ex:sel C="250 OK id=10HmbF-000000005vi-0000" 1999-03-02 09:44:33 10HmbE-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbG-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for b20@test.ex -1999-03-02 09:44:33 10HmbG-000000005vi-0000 => b20@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] C="250 OK id=10HmbH-000000005vi-0000" +1999-03-02 09:44:33 10HmbG-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for b12@test.ex +1999-03-02 09:44:33 10HmbG-000000005vi-0000 => b12@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] DKIM=test.ex:sel C="250 OK id=10HmbH-000000005vi-0000" 1999-03-02 09:44:33 10HmbG-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbI-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for b22@test.ex -1999-03-02 09:44:33 10HmbI-000000005vi-0000 => b22@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] C="250 OK id=10HmbJ-000000005vi-0000" +1999-03-02 09:44:33 10HmbI-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for b20@test.ex +1999-03-02 09:44:33 10HmbI-000000005vi-0000 => b20@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] DKIM=test.ex:sel C="250 OK id=10HmbJ-000000005vi-0000" 1999-03-02 09:44:33 10HmbI-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbK-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for d@test.ex -1999-03-02 09:44:33 10HmbK-000000005vi-0000 => d@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] C="250 OK id=10HmbL-000000005vi-0000" +1999-03-02 09:44:33 10HmbK-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for b22@test.ex +1999-03-02 09:44:33 10HmbK-000000005vi-0000 => b22@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] DKIM=test.ex:sel C="250 OK id=10HmbL-000000005vi-0000" 1999-03-02 09:44:33 10HmbK-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbM-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for d@test.ex +1999-03-02 09:44:33 10HmbM-000000005vi-0000 => d@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] DKIM=test.ex:sel_bad C="250 OK id=10HmbN-000000005vi-0000" +1999-03-02 09:44:33 10HmbM-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= <> U=CALLER P=local S=sss for e0@test.ex 1999-03-02 09:44:33 10HmaX-000000005vi-0000 failed to expand dkim_timestamps: unknown variable in "${bogus}" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 DKIM: message could not be signed, and dkim_strict is set. Deferring message delivery. @@ -27,12 +30,12 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 ** e0@test.ex: retry timeout exceeded 1999-03-02 09:44:33 10HmaX-000000005vi-0000 e0@test.ex: error ignored 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbM-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for e@test.ex -1999-03-02 09:44:33 10HmbM-000000005vi-0000 => e@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] C="250 OK id=10HmbN-000000005vi-0000" -1999-03-02 09:44:33 10HmbM-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbO-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for f@test.ex -1999-03-02 09:44:33 10HmbO-000000005vi-0000 => f@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] C="250 OK id=10HmbP-000000005vi-0000" +1999-03-02 09:44:33 10HmbO-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for e@test.ex +1999-03-02 09:44:33 10HmbO-000000005vi-0000 => e@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] C="250 OK id=10HmbP-000000005vi-0000" 1999-03-02 09:44:33 10HmbO-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbQ-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for f@test.ex +1999-03-02 09:44:33 10HmbQ-000000005vi-0000 => f@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] DKIM=test.ex:sel C="250 OK id=10HmbR-000000005vi-0000" +1999-03-02 09:44:33 10HmbQ-000000005vi-0000 Completed ******** SERVER ******** 1999-03-02 09:44:33 exim x.yz daemon started: pid=p1234, no queue runs, listening for SMTP on port PORT_D @@ -51,52 +54,59 @@ 1999-03-02 09:44:33 10HmbB-000000005vi-0000 => b R=server_store T=file 1999-03-02 09:44:33 10HmbB-000000005vi-0000 Completed 1999-03-02 09:44:33 rcpt_acl: macro: From:Sender:Reply-To:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive -1999-03-02 09:44:33 10HmbD-000000005vi-0000 dkim_acl: signer: test.ex bits: 1024 h=From -1999-03-02 09:44:33 10HmbD-000000005vi-0000 DKIM: d=test.ex s=sel c=relaxed/relaxed a=rsa-sha256 b=1024 [verification succeeded] +1999-03-02 09:44:33 10HmbD-000000005vi-0000 dkim_acl: signer: test.ex bits: 1024 h=From:From +1999-03-02 09:44:33 10HmbD-000000005vi-0000 DKIM: d=test.ex s=sel c=relaxed/relaxed a=rsa-sha256 b=1024 t=T [verification succeeded] 1999-03-02 09:44:33 10HmbD-000000005vi-0000 data_acl: dkim status pass -1999-03-02 09:44:33 10HmbD-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbC-000000005vi-0000@myhost.test.ex for b10@test.ex -1999-03-02 09:44:33 10HmbD-000000005vi-0000 => b10 R=server_store T=file +1999-03-02 09:44:33 10HmbD-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbC-000000005vi-0000@myhost.test.ex for b02@test.ex +1999-03-02 09:44:33 10HmbD-000000005vi-0000 => b02 R=server_store T=file 1999-03-02 09:44:33 10HmbD-000000005vi-0000 Completed 1999-03-02 09:44:33 rcpt_acl: macro: From:Sender:Reply-To:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive -1999-03-02 09:44:33 10HmbF-000000005vi-0000 dkim_acl: signer: test.ex bits: 1024 h=X-mine:X-mine:From +1999-03-02 09:44:33 10HmbF-000000005vi-0000 dkim_acl: signer: test.ex bits: 1024 h=From 1999-03-02 09:44:33 10HmbF-000000005vi-0000 DKIM: d=test.ex s=sel c=relaxed/relaxed a=rsa-sha256 b=1024 [verification succeeded] 1999-03-02 09:44:33 10HmbF-000000005vi-0000 data_acl: dkim status pass -1999-03-02 09:44:33 10HmbF-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbE-000000005vi-0000@myhost.test.ex for b12@test.ex -1999-03-02 09:44:33 10HmbF-000000005vi-0000 => b12 R=server_store T=file +1999-03-02 09:44:33 10HmbF-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbE-000000005vi-0000@myhost.test.ex for b10@test.ex +1999-03-02 09:44:33 10HmbF-000000005vi-0000 => b10 R=server_store T=file 1999-03-02 09:44:33 10HmbF-000000005vi-0000 Completed 1999-03-02 09:44:33 rcpt_acl: macro: From:Sender:Reply-To:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive -1999-03-02 09:44:33 10HmbH-000000005vi-0000 dkim_acl: signer: test.ex bits: 1024 h=X-Mine +1999-03-02 09:44:33 10HmbH-000000005vi-0000 dkim_acl: signer: test.ex bits: 1024 h=X-mine:X-mine:From 1999-03-02 09:44:33 10HmbH-000000005vi-0000 DKIM: d=test.ex s=sel c=relaxed/relaxed a=rsa-sha256 b=1024 [verification succeeded] 1999-03-02 09:44:33 10HmbH-000000005vi-0000 data_acl: dkim status pass -1999-03-02 09:44:33 10HmbH-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbG-000000005vi-0000@myhost.test.ex for b20@test.ex -1999-03-02 09:44:33 10HmbH-000000005vi-0000 => b20 R=server_store T=file +1999-03-02 09:44:33 10HmbH-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbG-000000005vi-0000@myhost.test.ex for b12@test.ex +1999-03-02 09:44:33 10HmbH-000000005vi-0000 => b12 R=server_store T=file 1999-03-02 09:44:33 10HmbH-000000005vi-0000 Completed 1999-03-02 09:44:33 rcpt_acl: macro: From:Sender:Reply-To:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive -1999-03-02 09:44:33 10HmbJ-000000005vi-0000 dkim_acl: signer: test.ex bits: 1024 h=X-mine:X-mine:X-Mine +1999-03-02 09:44:33 10HmbJ-000000005vi-0000 dkim_acl: signer: test.ex bits: 1024 h=X-Mine 1999-03-02 09:44:33 10HmbJ-000000005vi-0000 DKIM: d=test.ex s=sel c=relaxed/relaxed a=rsa-sha256 b=1024 [verification succeeded] 1999-03-02 09:44:33 10HmbJ-000000005vi-0000 data_acl: dkim status pass -1999-03-02 09:44:33 10HmbJ-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbI-000000005vi-0000@myhost.test.ex for b22@test.ex -1999-03-02 09:44:33 10HmbJ-000000005vi-0000 => b22 R=server_store T=file +1999-03-02 09:44:33 10HmbJ-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbI-000000005vi-0000@myhost.test.ex for b20@test.ex +1999-03-02 09:44:33 10HmbJ-000000005vi-0000 => b20 R=server_store T=file 1999-03-02 09:44:33 10HmbJ-000000005vi-0000 Completed 1999-03-02 09:44:33 rcpt_acl: macro: From:Sender:Reply-To:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive -1999-03-02 09:44:33 10HmbL-000000005vi-0000 DKIM: d=test.ex s=sel_bad [failed key import] -1999-03-02 09:44:33 10HmbL-000000005vi-0000 dkim_acl: signer: test.ex bits: 0 h=From -1999-03-02 09:44:33 10HmbL-000000005vi-0000 DKIM: d=test.ex s=sel_bad c=relaxed/relaxed a=rsa-sha256 b=1024 [invalid - syntax error in public key record] -1999-03-02 09:44:33 10HmbL-000000005vi-0000 data_acl: dkim status invalid -1999-03-02 09:44:33 10HmbL-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbK-000000005vi-0000@myhost.test.ex for d@test.ex -1999-03-02 09:44:33 10HmbL-000000005vi-0000 => d R=server_store T=file +1999-03-02 09:44:33 10HmbL-000000005vi-0000 dkim_acl: signer: test.ex bits: 1024 h=X-mine:X-mine:X-Mine +1999-03-02 09:44:33 10HmbL-000000005vi-0000 DKIM: d=test.ex s=sel c=relaxed/relaxed a=rsa-sha256 b=1024 [verification succeeded] +1999-03-02 09:44:33 10HmbL-000000005vi-0000 data_acl: dkim status pass +1999-03-02 09:44:33 10HmbL-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbK-000000005vi-0000@myhost.test.ex for b22@test.ex +1999-03-02 09:44:33 10HmbL-000000005vi-0000 => b22 R=server_store T=file 1999-03-02 09:44:33 10HmbL-000000005vi-0000 Completed 1999-03-02 09:44:33 rcpt_acl: macro: From:Sender:Reply-To:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive -1999-03-02 09:44:33 SMTP connection from the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] lost while reading message data (header) -1999-03-02 09:44:33 rcpt_acl: macro: From:Sender:Reply-To:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive -1999-03-02 09:44:33 10HmbN-000000005vi-0000 data_acl: dkim status -1999-03-02 09:44:33 10HmbN-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbM-000000005vi-0000@myhost.test.ex for e@test.ex -1999-03-02 09:44:33 10HmbN-000000005vi-0000 => e R=server_store T=file +1999-03-02 09:44:33 10HmbN-000000005vi-0000 DKIM: d=test.ex s=sel_bad [failed key import] +1999-03-02 09:44:33 10HmbN-000000005vi-0000 dkim_acl: signer: test.ex bits: 0 h=From +1999-03-02 09:44:33 10HmbN-000000005vi-0000 DKIM: d=test.ex s=sel_bad c=relaxed/relaxed a=rsa-sha256 b=1024 [invalid - syntax error in public key record] +1999-03-02 09:44:33 10HmbN-000000005vi-0000 data_acl: dkim status invalid +1999-03-02 09:44:33 10HmbN-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbM-000000005vi-0000@myhost.test.ex for d@test.ex +1999-03-02 09:44:33 10HmbN-000000005vi-0000 => d R=server_store T=file 1999-03-02 09:44:33 10HmbN-000000005vi-0000 Completed 1999-03-02 09:44:33 rcpt_acl: macro: From:Sender:Reply-To:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive -1999-03-02 09:44:33 10HmbP-000000005vi-0000 dkim_acl: signer: test.ex bits: 1024 h=From -1999-03-02 09:44:33 10HmbP-000000005vi-0000 DKIM: d=test.ex s=sel c=relaxed/relaxed a=rsa-sha256 b=1024 [verification succeeded] -1999-03-02 09:44:33 10HmbP-000000005vi-0000 data_acl: dkim status pass -1999-03-02 09:44:33 10HmbP-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbO-000000005vi-0000@myhost.test.ex for f@test.ex -1999-03-02 09:44:33 10HmbP-000000005vi-0000 => f R=server_store T=file +1999-03-02 09:44:33 SMTP connection from the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] lost while reading message data (header) +1999-03-02 09:44:33 rcpt_acl: macro: From:Sender:Reply-To:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive +1999-03-02 09:44:33 10HmbP-000000005vi-0000 data_acl: dkim status +1999-03-02 09:44:33 10HmbP-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbO-000000005vi-0000@myhost.test.ex for e@test.ex +1999-03-02 09:44:33 10HmbP-000000005vi-0000 => e R=server_store T=file 1999-03-02 09:44:33 10HmbP-000000005vi-0000 Completed +1999-03-02 09:44:33 rcpt_acl: macro: From:Sender:Reply-To:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive +1999-03-02 09:44:33 10HmbR-000000005vi-0000 dkim_acl: signer: test.ex bits: 1024 h=From +1999-03-02 09:44:33 10HmbR-000000005vi-0000 DKIM: d=test.ex s=sel c=relaxed/relaxed a=rsa-sha256 b=1024 [verification succeeded] +1999-03-02 09:44:33 10HmbR-000000005vi-0000 data_acl: dkim status pass +1999-03-02 09:44:33 10HmbR-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtp S=sss id=E10HmbQ-000000005vi-0000@myhost.test.ex for f@test.ex +1999-03-02 09:44:33 10HmbR-000000005vi-0000 => f R=server_store T=file +1999-03-02 09:44:33 10HmbR-000000005vi-0000 Completed diff --git a/test/log/4511 b/test/log/4511 index b45c16fbb..2b6340344 100644 --- a/test/log/4511 +++ b/test/log/4511 @@ -1,8 +1,8 @@ 2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 <= sender@testhost.test.ex U=sender Ci=p1234 P=local S=sss for a@test.ex -2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 => a@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] K C="250- 6nn byte chunk, total 6nn\\n250 OK id=10HmaY-000000005vi-0000" +2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 => a@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] K DKIM=test.ex:sel C="250- 6nn byte chunk, total 6nn\\n250 OK id=10HmaY-000000005vi-0000" 2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 Completed 2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 <= sender@testhost.test.ex U=sender Ci=p1235 P=local S=sss for b@test.ex -2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 => b@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] K C="250- 8nn byte chunk, total 8nn\\n250 OK id=10HmbA-000000005vi-0000" +2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 => b@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] K DKIM=test.ex:sel C="250- 8nn byte chunk, total 8nn\\n250 OK id=10HmbA-000000005vi-0000" 2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 Completed ******** SERVER ******** diff --git a/test/log/4513 b/test/log/4513 index a3c53de81..c72693ca1 100644 --- a/test/log/4513 +++ b/test/log/4513 @@ -1,5 +1,5 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for a@test.ex -1999-03-02 09:44:33 10HmaX-000000005vi-0000 => a@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] C="250 OK id=10HmaY-000000005vi-0000" +1999-03-02 09:44:33 10HmaX-000000005vi-0000 => a@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] DKIM=test.ex:sel C="250 OK id=10HmaY-000000005vi-0000" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed ******** SERVER ******** diff --git a/test/log/4514 b/test/log/4514 index 6d489fb99..619023da0 100644 --- a/test/log/4514 +++ b/test/log/4514 @@ -1,5 +1,5 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for c@test.ex -1999-03-02 09:44:33 10HmaX-000000005vi-0000 => c@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] C="250 OK id=10HmaY-000000005vi-0000" +1999-03-02 09:44:33 10HmaX-000000005vi-0000 => c@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] DKIM=test.ex:ses:test.ex:sel C="250 OK id=10HmaY-000000005vi-0000" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed ******** SERVER ******** diff --git a/test/log/4519 b/test/log/4519 index 24aba0b1e..02ddaebff 100644 --- a/test/log/4519 +++ b/test/log/4519 @@ -11,11 +11,11 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 DKIM: d=test.ex s=sel c=relaxed/relaxed a=rsa-sha256 b=1024 [verification succeeded] 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= <> H=localhost (testhost.test.ex) [127.0.0.1] P=esmtp K S=sss DKIM=test.ex for z@test.ex 1999-03-02 09:44:33 10HmaX-000000005vi-0000 no immediate delivery: queued by ACL -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => z@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] K C="250- 6nn byte chunk, total 6nn\\n250 OK id=10HmaX-000000005vi-0000" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => z@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] K DKIM=test.ex:sel C="250- 6nn byte chunk, total 6nn\\n250 OK id=10HmaX-000000005vi-0000" 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbA-000000005vi-0000 <= CALLER@bloggs.com H=(xxx) [127.0.0.1] P=esmtp K S=sss for y@test.ex 1999-03-02 09:44:33 10HmaY-000000005vi-0000 DKIM: d=test.ex s=sel c=relaxed/relaxed a=rsa-sha256 b=1024 [verification succeeded] 1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= <> H=localhost (testhost.test.ex) [127.0.0.1] P=esmtp K S=sss DKIM=test.ex for y@test.ex 1999-03-02 09:44:33 10HmaY-000000005vi-0000 no immediate delivery: queued by ACL -1999-03-02 09:44:33 10HmbA-000000005vi-0000 => y@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] K C="250- 6nn byte chunk, total 6nn\\n250 OK id=10HmaY-000000005vi-0000" +1999-03-02 09:44:33 10HmbA-000000005vi-0000 => y@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] K DKIM=test.ex:sel C="250- 6nn byte chunk, total 6nn\\n250 OK id=10HmaY-000000005vi-0000" 1999-03-02 09:44:33 10HmbA-000000005vi-0000 Completed diff --git a/test/log/4530 b/test/log/4530 index bd0e40ae2..74713e09d 100644 --- a/test/log/4530 +++ b/test/log/4530 @@ -1,23 +1,23 @@ 1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for a@test.ex -1999-03-02 09:44:33 10HmaY-000000005vi-0000 => a@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmaZ-000000005vi-0000" +1999-03-02 09:44:33 10HmaY-000000005vi-0000 => a@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DKIM=test.ex:sel C="250 OK id=10HmaZ-000000005vi-0000" 1999-03-02 09:44:33 10HmaY-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbA-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for b@test.ex -1999-03-02 09:44:33 10HmbA-000000005vi-0000 => b@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbB-000000005vi-0000" +1999-03-02 09:44:33 10HmbA-000000005vi-0000 => b@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DKIM=test.ex:sel C="250 OK id=10HmbB-000000005vi-0000" 1999-03-02 09:44:33 10HmbA-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbC-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for b10@test.ex -1999-03-02 09:44:33 10HmbC-000000005vi-0000 => b10@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbD-000000005vi-0000" +1999-03-02 09:44:33 10HmbC-000000005vi-0000 => b10@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DKIM=test.ex:sel C="250 OK id=10HmbD-000000005vi-0000" 1999-03-02 09:44:33 10HmbC-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbE-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for b12@test.ex -1999-03-02 09:44:33 10HmbE-000000005vi-0000 => b12@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbF-000000005vi-0000" +1999-03-02 09:44:33 10HmbE-000000005vi-0000 => b12@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DKIM=test.ex:sel C="250 OK id=10HmbF-000000005vi-0000" 1999-03-02 09:44:33 10HmbE-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbG-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for b20@test.ex -1999-03-02 09:44:33 10HmbG-000000005vi-0000 => b20@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbH-000000005vi-0000" +1999-03-02 09:44:33 10HmbG-000000005vi-0000 => b20@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DKIM=test.ex:sel C="250 OK id=10HmbH-000000005vi-0000" 1999-03-02 09:44:33 10HmbG-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbI-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for b22@test.ex -1999-03-02 09:44:33 10HmbI-000000005vi-0000 => b22@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbJ-000000005vi-0000" +1999-03-02 09:44:33 10HmbI-000000005vi-0000 => b22@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DKIM=test.ex:sel C="250 OK id=10HmbJ-000000005vi-0000" 1999-03-02 09:44:33 10HmbI-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbK-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for d@test.ex -1999-03-02 09:44:33 10HmbK-000000005vi-0000 => d@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbL-000000005vi-0000" +1999-03-02 09:44:33 10HmbK-000000005vi-0000 => d@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DKIM=test.ex:sel_bad C="250 OK id=10HmbL-000000005vi-0000" 1999-03-02 09:44:33 10HmbK-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= <> U=CALLER P=local S=sss for e0@test.ex 1999-03-02 09:44:33 10HmaX-000000005vi-0000 failed to expand dkim_timestamps: unknown variable in "${bogus}" @@ -31,7 +31,7 @@ 1999-03-02 09:44:33 10HmbM-000000005vi-0000 => e@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbN-000000005vi-0000" 1999-03-02 09:44:33 10HmbM-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbO-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for f@test.ex -1999-03-02 09:44:33 10HmbO-000000005vi-0000 => f@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbP-000000005vi-0000" +1999-03-02 09:44:33 10HmbO-000000005vi-0000 => f@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DKIM=test.ex:sel C="250 OK id=10HmbP-000000005vi-0000" 1999-03-02 09:44:33 10HmbO-000000005vi-0000 Completed ******** SERVER ******** diff --git a/test/log/4531 b/test/log/4531 index bd642b51f..45994c751 100644 --- a/test/log/4531 +++ b/test/log/4531 @@ -1,8 +1,8 @@ 2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 <= sender@testhost.test.ex U=sender Ci=p1234 P=local S=sss for a@test.ex -2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 => a@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes K C="250- 6nn byte chunk, total 6nn\\n250 OK id=10HmaY-000000005vi-0000" +2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 => a@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes K DKIM=test.ex:sel C="250- 6nn byte chunk, total 6nn\\n250 OK id=10HmaY-000000005vi-0000" 2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 Completed 2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 <= sender@testhost.test.ex U=sender Ci=p1235 P=local S=sss for b@test.ex -2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 => b@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes K C="250- 8nn byte chunk, total 8nn\\n250 OK id=10HmbA-000000005vi-0000" +2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 => b@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes K DKIM=test.ex:sel C="250- 8nn byte chunk, total 8nn\\n250 OK id=10HmbA-000000005vi-0000" 2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 Completed ******** SERVER ******** diff --git a/test/log/4533 b/test/log/4533 index 3e8343539..0483ddc08 100644 --- a/test/log/4533 +++ b/test/log/4533 @@ -1,5 +1,5 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for a@test.ex -1999-03-02 09:44:33 10HmaX-000000005vi-0000 => a@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmaY-000000005vi-0000" +1999-03-02 09:44:33 10HmaX-000000005vi-0000 => a@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DKIM=test.ex:sel C="250 OK id=10HmaY-000000005vi-0000" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed ******** SERVER ******** diff --git a/test/log/4534 b/test/log/4534 index 4f386c95c..d80dc7154 100644 --- a/test/log/4534 +++ b/test/log/4534 @@ -1,5 +1,5 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for c@test.ex -1999-03-02 09:44:33 10HmaX-000000005vi-0000 => c@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmaY-000000005vi-0000" +1999-03-02 09:44:33 10HmaX-000000005vi-0000 => c@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DKIM=test.ex:ses:test.ex:sel C="250 OK id=10HmaY-000000005vi-0000" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed ******** SERVER ******** diff --git a/test/log/4539 b/test/log/4539 index 9b0269b6c..5f503f6b2 100644 --- a/test/log/4539 +++ b/test/log/4539 @@ -11,11 +11,11 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 DKIM: d=test.ex s=sel c=relaxed/relaxed a=rsa-sha256 b=1024 [verification succeeded] 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= <> H=localhost (testhost.test.ex) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no K S=sss DKIM=test.ex for z@test.ex 1999-03-02 09:44:33 10HmaX-000000005vi-0000 no immediate delivery: queued by ACL -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => z@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes K C="250- 7nn byte chunk, total 7nn\\n250 OK id=10HmaX-000000005vi-0000" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => z@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes K DKIM=test.ex:sel C="250- 7nn byte chunk, total 7nn\\n250 OK id=10HmaX-000000005vi-0000" 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbA-000000005vi-0000 <= CALLER@bloggs.com H=(xxx) [127.0.0.1] P=smtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no K S=sss for y@test.ex 1999-03-02 09:44:33 10HmaY-000000005vi-0000 DKIM: d=test.ex s=sel c=relaxed/relaxed a=rsa-sha256 b=1024 [verification succeeded] 1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= <> H=localhost (testhost.test.ex) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no K S=sss DKIM=test.ex for y@test.ex 1999-03-02 09:44:33 10HmaY-000000005vi-0000 no immediate delivery: queued by ACL -1999-03-02 09:44:33 10HmbA-000000005vi-0000 => y@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes K C="250- 7nn byte chunk, total 7nn\\n250 OK id=10HmaY-000000005vi-0000" +1999-03-02 09:44:33 10HmbA-000000005vi-0000 => y@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes K DKIM=test.ex:sel C="250- 7nn byte chunk, total 7nn\\n250 OK id=10HmaY-000000005vi-0000" 1999-03-02 09:44:33 10HmbA-000000005vi-0000 Completed diff --git a/test/log/4540 b/test/log/4540 index e283729ed..4f806f3c2 100644 --- a/test/log/4540 +++ b/test/log/4540 @@ -12,9 +12,9 @@ 1999-03-02 09:44:33 10HmaY-000000005vi-0000 dkim_status includes pass 1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= CALLER@bloggs.com H=(xxx) [127.0.0.1] P=smtp S=sss DKIM=test.ex id=E10HmaX-0005vi-00@myhost.test.ex 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 signer: kitterman.org bits: 253 -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 DKIM: d=kitterman.org s=ed25519 c=relaxed/simple a=ed25519-sha256 b=512 i=@kitterman.org t=1517847601 [verification succeeded] +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 DKIM: d=kitterman.org s=ed25519 c=relaxed/simple a=ed25519-sha256 b=512 i=@kitterman.org t=T [verification succeeded] 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 signer: @kitterman.org bits: 253 -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 DKIM: d=kitterman.org s=ed25519 c=relaxed/simple a=ed25519-sha256 b=512 i=@kitterman.org t=1517847601 [verification succeeded] +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 DKIM: d=kitterman.org s=ed25519 c=relaxed/simple a=ed25519-sha256 b=512 i=@kitterman.org t=T [verification succeeded] 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Authentication-Results: myhost.test.ex;\n dkim=pass header.d=kitterman.org header.i=@kitterman.org header.s=ed25519 header.a=ed25519-sha256 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 dkim_status includes pass 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 <= CALLER@bloggs.com H=(xxx) [127.0.0.1] P=smtp S=sss DKIM=kitterman.org id=example@example.com diff --git a/test/log/4541 b/test/log/4541 index bc998cc35..f2d4c325b 100644 --- a/test/log/4541 +++ b/test/log/4541 @@ -1,8 +1,8 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for a@test.ex -1999-03-02 09:44:33 10HmaX-000000005vi-0000 => a@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] C="250 OK id=10HmaY-000000005vi-0000" +1999-03-02 09:44:33 10HmaX-000000005vi-0000 => a@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] DKIM=test.ex:sel:test.ex:sed C="250 OK id=10HmaY-000000005vi-0000" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for b@test.ex -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => b@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] C="250 OK id=10HmbA-000000005vi-0000" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => b@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] DKIM=test.ex:sel:test.ex:sed C="250 OK id=10HmbA-000000005vi-0000" 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed ******** SERVER ******** diff --git a/test/log/4545 b/test/log/4545 index cb1918b2f..c983a7a96 100644 --- a/test/log/4545 +++ b/test/log/4545 @@ -1,8 +1,8 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for a@test.ex -1999-03-02 09:44:33 10HmaX-000000005vi-0000 => a@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] C="250 OK id=10HmaY-000000005vi-0000" +1999-03-02 09:44:33 10HmaX-000000005vi-0000 => a@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] DKIM=test.ex:sed C="250 OK id=10HmaY-000000005vi-0000" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for b@test.ex -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => b@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] C="250 OK id=10HmbA-000000005vi-0000" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => b@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] DKIM=test.ex:sed:test.ex:sel C="250 OK id=10HmbA-000000005vi-0000" 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed ******** SERVER ******** diff --git a/test/log/4560 b/test/log/4560 index 0f8c63aea..2735b4645 100644 --- a/test/log/4560 +++ b/test/log/4560 @@ -217,8 +217,8 @@ 1999-03-02 09:44:33 10HmbO-000000005vi-0000 => a R=d1 T=tfile 1999-03-02 09:44:33 10HmbO-000000005vi-0000 Completed 1999-03-02 09:44:33 End queue run: pid=p1252 -1999-03-02 09:44:33 10HmbP-000000005vi-0000 DKIM: d=dmarc.org s=clochette c=simple/simple a=rsa-sha256 b=1024 t=1517535263 [verification succeeded] -1999-03-02 09:44:33 10HmbP-000000005vi-0000 DKIM: d=convivian.com s=default c=simple/simple a=rsa-sha256 b=1024 t=1517535248 [verification failed - body hash mismatch (body probably modified in transit)] +1999-03-02 09:44:33 10HmbP-000000005vi-0000 DKIM: d=dmarc.org s=clochette c=simple/simple a=rsa-sha256 b=1024 t=T [verification succeeded] +1999-03-02 09:44:33 10HmbP-000000005vi-0000 DKIM: d=convivian.com s=default c=simple/simple a=rsa-sha256 b=1024 t=T [verification failed - body hash mismatch (body probably modified in transit)] 1999-03-02 09:44:33 10HmbP-000000005vi-0000 arc_state: 1999-03-02 09:44:33 10HmbP-000000005vi-0000 domains: 1999-03-02 09:44:33 10HmbP-000000005vi-0000 arc_oldest_pass <0> @@ -228,8 +228,8 @@ 1999-03-02 09:44:33 10HmbP-000000005vi-0000 oldest-p-AAR: <> 1999-03-02 09:44:33 10HmbP-000000005vi-0000 <= CALLER@bloggs.com H=(xxx) [127.0.0.1] P=smtp S=sss DKIM=dmarc.org id=1426665656.110316.1517535248039.JavaMail.zimbra@convivian.com for za@test.ex 1999-03-02 09:44:33 Start queue run: pid=p1253 -1999-03-02 09:44:33 10HmbQ-000000005vi-0000 DKIM: d=dmarc.org s=clochette c=simple/simple a=rsa-sha256 b=1024 t=1517535263 [verification succeeded] -1999-03-02 09:44:33 10HmbQ-000000005vi-0000 DKIM: d=convivian.com s=default c=simple/simple a=rsa-sha256 b=1024 t=1517535248 [verification failed - body hash mismatch (body probably modified in transit)] +1999-03-02 09:44:33 10HmbQ-000000005vi-0000 DKIM: d=dmarc.org s=clochette c=simple/simple a=rsa-sha256 b=1024 t=T [verification succeeded] +1999-03-02 09:44:33 10HmbQ-000000005vi-0000 DKIM: d=convivian.com s=default c=simple/simple a=rsa-sha256 b=1024 t=T [verification failed - body hash mismatch (body probably modified in transit)] 1999-03-02 09:44:33 10HmbQ-000000005vi-0000 arc_state: 1999-03-02 09:44:33 10HmbQ-000000005vi-0000 domains: 1999-03-02 09:44:33 10HmbQ-000000005vi-0000 arc_oldest_pass <0> diff --git a/test/log/4565 b/test/log/4565 index 4c74fc4d2..48efed49d 100644 --- a/test/log/4565 +++ b/test/log/4565 @@ -13,7 +13,7 @@ 1999-03-02 09:44:33 10HmaY-000000005vi-0000 arc_oldest_pass <1> 1999-03-02 09:44:33 10HmaY-000000005vi-0000 domains: 1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= CALLER@bloggs.com H=localhost (test.ex) [127.0.0.1] P=esmtp S=sss DKIM=test.ex ARC id=qwerty1234@disco-zombie.net for a@test.ex -1999-03-02 09:44:33 10HmaX-000000005vi-0000 => a@test.ex R=fwd T=tsmtp H=127.0.0.1 [127.0.0.1] C="250 OK id=10HmaY-000000005vi-0000" +1999-03-02 09:44:33 10HmaX-000000005vi-0000 => a@test.ex R=fwd T=tsmtp H=127.0.0.1 [127.0.0.1] DKIM=test.ex:sel C="250 OK id=10HmaY-000000005vi-0000" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed 1999-03-02 09:44:33 End queue run: pid=p1235 1999-03-02 09:44:33 Start queue run: pid=p1236 diff --git a/test/log/4710 b/test/log/4710 index 3937611b8..99934ebf5 100644 --- a/test/log/4710 +++ b/test/log/4710 @@ -4,3 +4,5 @@ 1999-03-02 09:44:33 exim x.yz daemon started: pid=p1237, no queue runs, listening for SMTP on port PORT_D 1999-03-02 09:44:33 exim x.yz daemon started: pid=p1238, no queue runs, listening for SMTP on port PORT_D 1999-03-02 09:44:33 exim x.yz daemon started: pid=p1239, no queue runs, listening for SMTP on port PORT_D +1999-03-02 09:44:33 exim x.yz daemon started: pid=p1240, no queue runs, listening for SMTP on port PORT_D +1999-03-02 09:44:33 exim x.yz daemon started: pid=p1241, no queue runs, listening for SMTP on port PORT_D diff --git a/test/log/4714 b/test/log/4714 index 0ffb6b206..aca77a7ab 100644 --- a/test/log/4714 +++ b/test/log/4714 @@ -1,14 +1,18 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@the.local.host.name U=CALLER P=local S=sss for r1_1.test.ex r1_2.test.ex 1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= CALLER@the.local.host.name U=CALLER P=local S=sss for r2_1.test.ex r2_2.test.ex 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 <= CALLER@the.local.host.name U=CALLER P=local S=sss for r3_1.test.ex r3_2.test.ex +1999-03-02 09:44:33 10HmbA-000000005vi-0000 <= CALLER@the.local.host.name U=CALLER P=local S=sss for r4_1.test.ex r4_2.test.ex 1999-03-02 09:44:33 Start queue run: pid=p1234 -qq 1999-03-02 09:44:33 10HmaX-000000005vi-0000 => r1_1.test.ex@the.local.host.name R=send_to_server T=to_server H=127.0.0.1 [127.0.0.1] C="250 message 1 received" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 => r1_2.test.ex@the.local.host.name R=send_to_server T=to_server H=127.0.0.1 [127.0.0.1]* C="250 message 2 received" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => r3_1.test.ex@the.local.host.name R=send_to_server T=to_server H=127.0.0.1 [127.0.0.1]* C="250 message 3 received" -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => r3_2.test.ex@the.local.host.name R=send_to_server T=to_server H=127.0.0.1 [127.0.0.1]* C="250 message 4 received" -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmaY-000000005vi-0000 => r2_1.test.ex@the.local.host.name R=send_to_server T=to_server H=127.0.0.1 [127.0.0.1]* C="250 message 5 received" -1999-03-02 09:44:33 10HmaY-000000005vi-0000 => r2_2.test.ex@the.local.host.name R=send_to_server T=to_server H=127.0.0.1 [127.0.0.1] C="250 message 6 received" +1999-03-02 09:44:33 10HmaY-000000005vi-0000 => r2_1.test.ex@the.local.host.name R=send_to_server T=to_server H=127.0.0.1 [127.0.0.1]* C="250 message 3 received" +1999-03-02 09:44:33 10HmaY-000000005vi-0000 => r2_2.test.ex@the.local.host.name R=send_to_server T=to_server H=127.0.0.1 [127.0.0.1]* C="250 message 4 received" 1999-03-02 09:44:33 10HmaY-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => r3_1.test.ex@the.local.host.name R=send_to_server T=to_server H=127.0.0.1 [127.0.0.1]* C="250 message 5 received" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => r3_2.test.ex@the.local.host.name R=send_to_server T=to_server H=127.0.0.1 [127.0.0.1] C="250 message 6 received" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbA-000000005vi-0000 => r4_1.test.ex@the.local.host.name R=send_to_server T=to_server H=127.0.0.1 [127.0.0.1]* C="250 message 7 received" +1999-03-02 09:44:33 10HmbA-000000005vi-0000 => r4_2.test.ex@the.local.host.name R=send_to_server T=to_server H=127.0.0.1 [127.0.0.1]* C="250 message 8 received" +1999-03-02 09:44:33 10HmbA-000000005vi-0000 Completed 1999-03-02 09:44:33 End queue run: pid=p1234 -qq diff --git a/test/log/5701 b/test/log/5701 index 531dc63f7..657f2f807 100644 --- a/test/log/5701 +++ b/test/log/5701 @@ -1,3 +1,4 @@ +1999-03-02 09:44:33 10HmaX-000000005vi-0000 qualify/rewrite: missing or malformed local part (expected word or "<") 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@the.local.host.name U=CALLER P=local S=sss 1999-03-02 09:44:33 10HmaX-000000005vi-0000 ** >**bad-reply** R=router_filter T=reply: filter autoreply generated syntactically invalid recipient 1999-03-02 09:44:33 10HmaX-000000005vi-0000 event msg:fail:delivery diff --git a/test/log/5708 b/test/log/5708 new file mode 100644 index 000000000..def9f94e4 --- /dev/null +++ b/test/log/5708 @@ -0,0 +1,12 @@ + +******** 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 M +1999-03-02 09:44:33 H=(nonexistent.test.ex) [127.0.0.1] F= rejected RCPT +1999-03-02 09:44:33 M +1999-03-02 09:44:33 H=(badcname.test.ex) [127.0.0.1] F= rejected RCPT +1999-03-02 09:44:33 M +1999-03-02 09:44:33 H=(test.again.dns) [127.0.0.1] F= rejected RCPT +1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= a@b H=(localhost) [127.0.0.1] P=smtp S=sss +1999-03-02 09:44:33 10HmaX-000000005vi-0000 T +1999-03-02 09:44:33 10HmaX-000000005vi-0000 == bad_a@nonexistent.test.ex R=all T=all defer (-32): failed to lookup IP address for nonexistent.test.ex diff --git a/test/log/5709 b/test/log/5709 new file mode 100644 index 000000000..b7cd77918 --- /dev/null +++ b/test/log/5709 @@ -0,0 +1,6 @@ + +******** 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 +1999-03-02 09:44:33 +1999-03-02 09:44:33 diff --git a/test/log/5710 b/test/log/5710 index f9ffee773..1fe7b1d5e 100644 --- a/test/log/5710 +++ b/test/log/5710 @@ -1,7 +1,7 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss 1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss 1999-03-02 09:44:33 Start queue run: pid=p1234 -qf -1999-03-02 09:44:33 10HmaX-000000005vi-0000 smtp:ehlo 250-myhost.test.ex Hello localhost [127.0.0.1]\n250-SIZE 52428800\n250-8BITMIME\n250-PIPELINING\n250-STARTTLS\n250 HELP +1999-03-02 09:44:33 10HmaX-000000005vi-0000 smtp:ehlo 250-myhost.test.ex Hello localhost [127.0.0.1]\n250-SIZE 52428800\n250-LIMITS MAILMAX=1000 RCPTMAX=50000\n250-8BITMIME\n250-PIPELINING\n250-STARTTLS\n250 HELP 1999-03-02 09:44:33 10HmaX-000000005vi-0000 cipher_ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 ver: 1999-03-02 09:44:33 10HmaX-000000005vi-0000 tls:cert depth=0 @@ -23,7 +23,7 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 SAN 1999-03-02 09:44:33 10HmaX-000000005vi-0000 SAN 1999-03-02 09:44:33 10HmaX-000000005vi-0000 TLS session: (certificate verification failed): certificate invalid: delivering unencrypted to H=127.0.0.1 [127.0.0.1] (not in hosts_require_tls) -1999-03-02 09:44:33 10HmaX-000000005vi-0000 smtp:ehlo 250-myhost.test.ex Hello localhost [127.0.0.1]\n250-SIZE 52428800\n250-8BITMIME\n250-PIPELINING\n250-STARTTLS\n250 HELP +1999-03-02 09:44:33 10HmaX-000000005vi-0000 smtp:ehlo 250-myhost.test.ex Hello localhost [127.0.0.1]\n250-SIZE 52428800\n250-LIMITS MAILMAX=1000 RCPTMAX=50000\n250-8BITMIME\n250-PIPELINING\n250-STARTTLS\n250 HELP 1999-03-02 09:44:33 10HmaX-000000005vi-0000 cipher_ TLS1.x:ke_RSA_WITH_ci_mac 1999-03-02 09:44:33 10HmaX-000000005vi-0000 ver: 1999-03-02 09:44:33 10HmaX-000000005vi-0000 => bad@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] C="250 OK id=10HmaZ-000000005vi-0000" @@ -31,11 +31,11 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 NO CLIENT CERT presented 1999-03-02 09:44:33 10HmaX-000000005vi-0000 No Peer cert 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmaY-000000005vi-0000 smtp:ehlo 250-myhost.test.ex Hello localhost [127.0.0.1]\n250-SIZE 52428800\n250-8BITMIME\n250-PIPELINING\n250-STARTTLS\n250 HELP +1999-03-02 09:44:33 10HmaY-000000005vi-0000 smtp:ehlo 250-myhost.test.ex Hello localhost [127.0.0.1]\n250-SIZE 52428800\n250-LIMITS MAILMAX=1000 RCPTMAX=50000\n250-8BITMIME\n250-PIPELINING\n250-STARTTLS\n250 HELP 1999-03-02 09:44:33 10HmaY-000000005vi-0000 cipher_ 1999-03-02 09:44:33 10HmaY-000000005vi-0000 ver: 1999-03-02 09:44:33 10HmaY-000000005vi-0000 tls:cert depth=0 -1999-03-02 09:44:33 10HmaY-000000005vi-0000 TLS1.x:ke-RSA-AES256-SHAnnn:xxx smtp:ehlo 250-myhost.test.ex Hello localhost [127.0.0.1]\n250-SIZE 52428800\n250-8BITMIME\n250-PIPELINING\n250 HELP +1999-03-02 09:44:33 10HmaY-000000005vi-0000 TLS1.x:ke-RSA-AES256-SHAnnn:xxx smtp:ehlo 250-myhost.test.ex Hello localhost [127.0.0.1]\n250-SIZE 52428800\n250-LIMITS MAILMAX=1000 RCPTMAX=50000\n250-8BITMIME\n250-PIPELINING\n250 HELP 1999-03-02 09:44:33 10HmaY-000000005vi-0000 cipher_ TLS1.x:ke_RSA_WITH_ci_mac 1999-03-02 09:44:33 10HmaY-000000005vi-0000 ver: TLS1.x 1999-03-02 09:44:33 10HmaY-000000005vi-0000 => good@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbA-000000005vi-0000" diff --git a/test/log/5720 b/test/log/5720 index 8fed1a972..61da6f83c 100644 --- a/test/log/5720 +++ b/test/log/5720 @@ -1,7 +1,7 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss 1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss 1999-03-02 09:44:33 Start queue run: pid=p1234 -qf -1999-03-02 09:44:33 10HmaX-000000005vi-0000 smtp:ehlo 250-myhost.test.ex Hello localhost [127.0.0.1]\n250-SIZE 52428800\n250-8BITMIME\n250-PIPELINING\n250-STARTTLS\n250 HELP +1999-03-02 09:44:33 10HmaX-000000005vi-0000 smtp:ehlo 250-myhost.test.ex Hello localhost [127.0.0.1]\n250-SIZE 52428800\n250-LIMITS MAILMAX=1000 RCPTMAX=50000\n250-8BITMIME\n250-PIPELINING\n250-STARTTLS\n250 HELP 1999-03-02 09:44:33 10HmaX-000000005vi-0000 cipher_ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 ver: 1999-03-02 09:44:33 10HmaX-000000005vi-0000 [127.0.0.1] SSL verify error: depth=2 error=self signed certificate in certificate chain cert=/O=example.com/CN=clica CA rsa @@ -23,7 +23,7 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 (no SAN) 1999-03-02 09:44:33 10HmaX-000000005vi-0000 (no SAN) 1999-03-02 09:44:33 10HmaX-000000005vi-0000 TLS session: (SSL_connect): error: <> -1999-03-02 09:44:33 10HmaX-000000005vi-0000 smtp:ehlo 250-myhost.test.ex Hello localhost [127.0.0.1]\n250-SIZE 52428800\n250-8BITMIME\n250-PIPELINING\n250-STARTTLS\n250 HELP +1999-03-02 09:44:33 10HmaX-000000005vi-0000 smtp:ehlo 250-myhost.test.ex Hello localhost [127.0.0.1]\n250-SIZE 52428800\n250-LIMITS MAILMAX=1000 RCPTMAX=50000\n250-8BITMIME\n250-PIPELINING\n250-STARTTLS\n250 HELP 1999-03-02 09:44:33 10HmaX-000000005vi-0000 cipher_ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 ver: 1999-03-02 09:44:33 10HmaX-000000005vi-0000 => bad@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] C="250 OK id=10HmaZ-000000005vi-0000" @@ -31,13 +31,13 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 NO CLIENT CERT presented 1999-03-02 09:44:33 10HmaX-000000005vi-0000 No Peer cert 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmaY-000000005vi-0000 smtp:ehlo 250-myhost.test.ex Hello localhost [127.0.0.1]\n250-SIZE 52428800\n250-8BITMIME\n250-PIPELINING\n250-STARTTLS\n250 HELP +1999-03-02 09:44:33 10HmaY-000000005vi-0000 smtp:ehlo 250-myhost.test.ex Hello localhost [127.0.0.1]\n250-SIZE 52428800\n250-LIMITS MAILMAX=1000 RCPTMAX=50000\n250-8BITMIME\n250-PIPELINING\n250-STARTTLS\n250 HELP 1999-03-02 09:44:33 10HmaY-000000005vi-0000 cipher_ 1999-03-02 09:44:33 10HmaY-000000005vi-0000 ver: 1999-03-02 09:44:33 10HmaY-000000005vi-0000 tls:cert depth=2 1999-03-02 09:44:33 10HmaY-000000005vi-0000 tls:cert depth=1 1999-03-02 09:44:33 10HmaY-000000005vi-0000 tls:cert depth=0 -1999-03-02 09:44:33 10HmaY-000000005vi-0000 TLS1.x:ke-RSA-AES256-SHAnnn:xxx smtp:ehlo 250-myhost.test.ex Hello localhost [127.0.0.1]\n250-SIZE 52428800\n250-8BITMIME\n250-PIPELINING\n250 HELP +1999-03-02 09:44:33 10HmaY-000000005vi-0000 TLS1.x:ke-RSA-AES256-SHAnnn:xxx smtp:ehlo 250-myhost.test.ex Hello localhost [127.0.0.1]\n250-SIZE 52428800\n250-LIMITS MAILMAX=1000 RCPTMAX=50000\n250-8BITMIME\n250-PIPELINING\n250 HELP 1999-03-02 09:44:33 10HmaY-000000005vi-0000 cipher_ TLS1.x:ke_RSA_WITH_ci_mac 1999-03-02 09:44:33 10HmaY-000000005vi-0000 ver: TLS1.x 1999-03-02 09:44:33 10HmaY-000000005vi-0000 => good@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbA-000000005vi-0000" diff --git a/test/log/5890 b/test/log/5890 index 065e31b7f..d77b85f92 100644 --- a/test/log/5890 +++ b/test/log/5890 @@ -1,4 +1,5 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for getticket@test.ex +1999-03-02 09:44:33 10HmaX-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmaX-000000005vi-0000 tls_out_resumption client requested new ticket, server provided 1999-03-02 09:44:33 10HmaX-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmaX-000000005vi-0000 peer cert subject CN=server1.example.com @@ -6,9 +7,10 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 peer dn CN=server1.example.com 1999-03-02 09:44:33 10HmaX-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmaX-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmaX-000000005vi-0000 => getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmaY-000000005vi-0000" +1999-03-02 09:44:33 10HmaX-000000005vi-0000 => getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmaY-000000005vi-0000" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for resume@test.ex abcd@test.ex xyz@test.ex +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for resume@test.ex hostnotresume@test.ex xyz@test.ex +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 tls_out_resumption session resumed 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 peer cert subject CN=server1.example.com @@ -16,6 +18,7 @@ 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 peer dn CN=server1.example.com 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 cipher TLS1.x:ke--AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 bits 256 +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 tls_out_resumption not requested or offered 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 peer cert subject CN=server1.example.com @@ -23,11 +26,12 @@ 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 peer dn CN=server1.example.com 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke--AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbA-000000005vi-0000" -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 -> xyz@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke--AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbA-000000005vi-0000" -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => abcd@test.ex R=client T=send_to_server2 H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbB-000000005vi-0000" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke--AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbA-000000005vi-0000" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 -> xyz@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke--AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbA-000000005vi-0000" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => hostnotresume@test.ex R=client T=send_to_server2 H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbB-000000005vi-0000" 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbC-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for renewal@test.ex +1999-03-02 09:44:33 10HmbC-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmbC-000000005vi-0000 tls_out_resumption session resumed 1999-03-02 09:44:33 10HmbC-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbC-000000005vi-0000 peer cert subject CN=server1.example.com @@ -35,9 +39,10 @@ 1999-03-02 09:44:33 10HmbC-000000005vi-0000 peer dn CN=server1.example.com 1999-03-02 09:44:33 10HmbC-000000005vi-0000 cipher TLS1.x:ke--AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbC-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbC-000000005vi-0000 => renewal@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke--AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbD-000000005vi-0000" +1999-03-02 09:44:33 10HmbC-000000005vi-0000 => renewal@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke--AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbD-000000005vi-0000" 1999-03-02 09:44:33 10HmbC-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbE-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for postrenewal@test.ex +1999-03-02 09:44:33 10HmbE-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmbE-000000005vi-0000 tls_out_resumption session resumed 1999-03-02 09:44:33 10HmbE-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbE-000000005vi-0000 peer cert subject CN=server1.example.com @@ -45,9 +50,10 @@ 1999-03-02 09:44:33 10HmbE-000000005vi-0000 peer dn CN=server1.example.com 1999-03-02 09:44:33 10HmbE-000000005vi-0000 cipher TLS1.x:ke--AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbE-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbE-000000005vi-0000 => postrenewal@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke--AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbF-000000005vi-0000" +1999-03-02 09:44:33 10HmbE-000000005vi-0000 => postrenewal@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke--AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbF-000000005vi-0000" 1999-03-02 09:44:33 10HmbE-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbG-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for timeout@test.ex +1999-03-02 09:44:33 10HmbG-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmbG-000000005vi-0000 tls_out_resumption client offered session, server only provided new ticket 1999-03-02 09:44:33 10HmbG-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbG-000000005vi-0000 peer cert subject CN=server1.example.com @@ -55,9 +61,10 @@ 1999-03-02 09:44:33 10HmbG-000000005vi-0000 peer dn CN=server1.example.com 1999-03-02 09:44:33 10HmbG-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbG-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbG-000000005vi-0000 => timeout@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbH-000000005vi-0000" +1999-03-02 09:44:33 10HmbG-000000005vi-0000 => timeout@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbH-000000005vi-0000" 1999-03-02 09:44:33 10HmbG-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbI-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for notreq@test.ex +1999-03-02 09:44:33 10HmbI-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmbI-000000005vi-0000 tls_out_resumption no client request 1999-03-02 09:44:33 10HmbI-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbI-000000005vi-0000 peer cert subject CN=server1.example.com @@ -65,9 +72,10 @@ 1999-03-02 09:44:33 10HmbI-000000005vi-0000 peer dn CN=server1.example.com 1999-03-02 09:44:33 10HmbI-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbI-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbI-000000005vi-0000 => notreq@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbJ-000000005vi-0000" +1999-03-02 09:44:33 10HmbI-000000005vi-0000 => notreq@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbJ-000000005vi-0000" 1999-03-02 09:44:33 10HmbI-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbK-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for noverify_getticket@test.ex +1999-03-02 09:44:33 10HmbK-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmbK-000000005vi-0000 tls_out_resumption client requested new ticket, server provided 1999-03-02 09:44:33 10HmbK-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbK-000000005vi-0000 peer cert subject CN=server1.example.com @@ -75,9 +83,10 @@ 1999-03-02 09:44:33 10HmbK-000000005vi-0000 peer dn CN=server1.example.com 1999-03-02 09:44:33 10HmbK-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbK-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbK-000000005vi-0000 => noverify_getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no DN="CN=server1.example.com" C="250 OK id=10HmbL-000000005vi-0000" +1999-03-02 09:44:33 10HmbK-000000005vi-0000 => noverify_getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no DN="CN=server1.example.com" C="250 OK id=10HmbL-000000005vi-0000" 1999-03-02 09:44:33 10HmbK-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbM-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for noverify_resume@test.ex +1999-03-02 09:44:33 10HmbM-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmbM-000000005vi-0000 tls_out_resumption session resumed 1999-03-02 09:44:33 10HmbM-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbM-000000005vi-0000 peer cert subject CN=server1.example.com @@ -85,120 +94,187 @@ 1999-03-02 09:44:33 10HmbM-000000005vi-0000 peer dn CN=server1.example.com 1999-03-02 09:44:33 10HmbM-000000005vi-0000 cipher TLS1.x:ke--AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbM-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbM-000000005vi-0000 => noverify_resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke--AES256-SHAnnn:xxx* CV=no DN="CN=server1.example.com" C="250 OK id=10HmbN-000000005vi-0000" +1999-03-02 09:44:33 10HmbM-000000005vi-0000 => noverify_resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke--AES256-SHAnnn:xxx* CV=no DN="CN=server1.example.com" C="250 OK id=10HmbN-000000005vi-0000" 1999-03-02 09:44:33 10HmbM-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbO-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for getticket@test.ex -1999-03-02 09:44:33 10HmbO-000000005vi-0000 tls_out_resumption client requested new ticket, server provided +1999-03-02 09:44:33 10HmbO-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for resume@test.ex +1999-03-02 09:44:33 10HmbO-000000005vi-0000 tls_out_ver TLS1.2 +1999-03-02 09:44:33 10HmbO-000000005vi-0000 tls_out_resumption session resumed 1999-03-02 09:44:33 10HmbO-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbO-000000005vi-0000 peer cert subject CN=server1.example.com 1999-03-02 09:44:33 10HmbO-000000005vi-0000 peer cert verified 1 1999-03-02 09:44:33 10HmbO-000000005vi-0000 peer dn CN=server1.example.com -1999-03-02 09:44:33 10HmbO-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx +1999-03-02 09:44:33 10HmbO-000000005vi-0000 cipher TLS1.x:ke--AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbO-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbO-000000005vi-0000 => getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbP-000000005vi-0000" +1999-03-02 09:44:33 10HmbO-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke--AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbP-000000005vi-0000" 1999-03-02 09:44:33 10HmbO-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbQ-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for resume@test.ex abcd@test.ex xyz@test.ex -1999-03-02 09:44:33 10HmbQ-000000005vi-0000 tls_out_resumption session resumed, also new ticket -1999-03-02 09:44:33 10HmbQ-000000005vi-0000 our cert subject -1999-03-02 09:44:33 10HmbQ-000000005vi-0000 peer cert subject CN=server1.example.com -1999-03-02 09:44:33 10HmbQ-000000005vi-0000 peer cert verified 1 -1999-03-02 09:44:33 10HmbQ-000000005vi-0000 peer dn CN=server1.example.com -1999-03-02 09:44:33 10HmbQ-000000005vi-0000 cipher TLS1.x:ke-PSK-AES256-SHAnnn:xxx -1999-03-02 09:44:33 10HmbQ-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbQ-000000005vi-0000 tls_out_resumption not requested or offered +1999-03-02 09:44:33 10HmbQ-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for getticket@test.ex +1999-03-02 09:44:33 10HmbQ-000000005vi-0000 tls_out_ver TLS1.2 +1999-03-02 09:44:33 10HmbQ-000000005vi-0000 tls_out_resumption client requested new ticket, server provided 1999-03-02 09:44:33 10HmbQ-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbQ-000000005vi-0000 peer cert subject CN=server1.example.com 1999-03-02 09:44:33 10HmbQ-000000005vi-0000 peer cert verified 1 1999-03-02 09:44:33 10HmbQ-000000005vi-0000 peer dn CN=server1.example.com 1999-03-02 09:44:33 10HmbQ-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbQ-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbQ-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbR-000000005vi-0000" -1999-03-02 09:44:33 10HmbQ-000000005vi-0000 -> xyz@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbR-000000005vi-0000" -1999-03-02 09:44:33 10HmbQ-000000005vi-0000 => abcd@test.ex R=client T=send_to_server2 H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbS-000000005vi-0000" +1999-03-02 09:44:33 10HmbQ-000000005vi-0000 => getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D2 X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbR-000000005vi-0000" 1999-03-02 09:44:33 10HmbQ-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbT-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for renewal@test.ex -1999-03-02 09:44:33 10HmbT-000000005vi-0000 tls_out_resumption session resumed, also new ticket -1999-03-02 09:44:33 10HmbT-000000005vi-0000 our cert subject -1999-03-02 09:44:33 10HmbT-000000005vi-0000 peer cert subject CN=server1.example.com -1999-03-02 09:44:33 10HmbT-000000005vi-0000 peer cert verified 1 -1999-03-02 09:44:33 10HmbT-000000005vi-0000 peer dn CN=server1.example.com -1999-03-02 09:44:33 10HmbT-000000005vi-0000 cipher TLS1.x:ke-PSK-AES256-SHAnnn:xxx -1999-03-02 09:44:33 10HmbT-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbT-000000005vi-0000 => renewal@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbU-000000005vi-0000" -1999-03-02 09:44:33 10HmbT-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbV-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for postrenewal@test.ex -1999-03-02 09:44:33 10HmbV-000000005vi-0000 tls_out_resumption session resumed -1999-03-02 09:44:33 10HmbV-000000005vi-0000 our cert subject -1999-03-02 09:44:33 10HmbV-000000005vi-0000 peer cert subject CN=server1.example.com -1999-03-02 09:44:33 10HmbV-000000005vi-0000 peer cert verified 1 -1999-03-02 09:44:33 10HmbV-000000005vi-0000 peer dn CN=server1.example.com -1999-03-02 09:44:33 10HmbV-000000005vi-0000 cipher TLS1.x:ke-PSK-AES256-SHAnnn:xxx -1999-03-02 09:44:33 10HmbV-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbV-000000005vi-0000 => postrenewal@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbW-000000005vi-0000" -1999-03-02 09:44:33 10HmbV-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbX-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for timeout@test.ex -1999-03-02 09:44:33 10HmbX-000000005vi-0000 tls_out_resumption client offered session, server only provided new ticket -1999-03-02 09:44:33 10HmbX-000000005vi-0000 our cert subject -1999-03-02 09:44:33 10HmbX-000000005vi-0000 peer cert subject CN=server1.example.com -1999-03-02 09:44:33 10HmbX-000000005vi-0000 peer cert verified 1 -1999-03-02 09:44:33 10HmbX-000000005vi-0000 peer dn CN=server1.example.com -1999-03-02 09:44:33 10HmbX-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx -1999-03-02 09:44:33 10HmbX-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbX-000000005vi-0000 => timeout@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbY-000000005vi-0000" -1999-03-02 09:44:33 10HmbX-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbZ-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for notreq@test.ex -1999-03-02 09:44:33 10HmbZ-000000005vi-0000 tls_out_resumption no client request +1999-03-02 09:44:33 10HmbS-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for resume@test.ex +1999-03-02 09:44:33 10HmbS-000000005vi-0000 tls_out_ver TLS1.2 +1999-03-02 09:44:33 10HmbS-000000005vi-0000 tls_out_resumption session resumed +1999-03-02 09:44:33 10HmbS-000000005vi-0000 our cert subject +1999-03-02 09:44:33 10HmbS-000000005vi-0000 peer cert subject CN=server1.example.com +1999-03-02 09:44:33 10HmbS-000000005vi-0000 peer cert verified 1 +1999-03-02 09:44:33 10HmbS-000000005vi-0000 peer dn CN=server1.example.com +1999-03-02 09:44:33 10HmbS-000000005vi-0000 cipher TLS1.x:ke--AES256-SHAnnn:xxx +1999-03-02 09:44:33 10HmbS-000000005vi-0000 bits 256 +1999-03-02 09:44:33 10HmbS-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D2 X=TLS1.x:ke--AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbT-000000005vi-0000" +1999-03-02 09:44:33 10HmbS-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbU-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for getticket@test.ex +1999-03-02 09:44:33 10HmbU-000000005vi-0000 tls_out_ver TLS1.3 +1999-03-02 09:44:33 10HmbU-000000005vi-0000 tls_out_resumption client requested new ticket, server provided +1999-03-02 09:44:33 10HmbU-000000005vi-0000 our cert subject +1999-03-02 09:44:33 10HmbU-000000005vi-0000 peer cert subject CN=server1.example.com +1999-03-02 09:44:33 10HmbU-000000005vi-0000 peer cert verified 1 +1999-03-02 09:44:33 10HmbU-000000005vi-0000 peer dn CN=server1.example.com +1999-03-02 09:44:33 10HmbU-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx +1999-03-02 09:44:33 10HmbU-000000005vi-0000 bits 256 +1999-03-02 09:44:33 10HmbU-000000005vi-0000 => getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbV-000000005vi-0000" +1999-03-02 09:44:33 10HmbU-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbW-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for resume@test.ex hostnotresume@test.ex xyz@test.ex +1999-03-02 09:44:33 10HmbW-000000005vi-0000 tls_out_ver TLS1.3 +1999-03-02 09:44:33 10HmbW-000000005vi-0000 tls_out_resumption session resumed, also new ticket +1999-03-02 09:44:33 10HmbW-000000005vi-0000 our cert subject +1999-03-02 09:44:33 10HmbW-000000005vi-0000 peer cert subject CN=server1.example.com +1999-03-02 09:44:33 10HmbW-000000005vi-0000 peer cert verified 1 +1999-03-02 09:44:33 10HmbW-000000005vi-0000 peer dn CN=server1.example.com +1999-03-02 09:44:33 10HmbW-000000005vi-0000 cipher TLS1.x:ke-PSK-AES256-SHAnnn:xxx +1999-03-02 09:44:33 10HmbW-000000005vi-0000 bits 256 +1999-03-02 09:44:33 10HmbW-000000005vi-0000 tls_out_ver TLS1.3 +1999-03-02 09:44:33 10HmbW-000000005vi-0000 tls_out_resumption not requested or offered +1999-03-02 09:44:33 10HmbW-000000005vi-0000 our cert subject +1999-03-02 09:44:33 10HmbW-000000005vi-0000 peer cert subject CN=server1.example.com +1999-03-02 09:44:33 10HmbW-000000005vi-0000 peer cert verified 1 +1999-03-02 09:44:33 10HmbW-000000005vi-0000 peer dn CN=server1.example.com +1999-03-02 09:44:33 10HmbW-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx +1999-03-02 09:44:33 10HmbW-000000005vi-0000 bits 256 +1999-03-02 09:44:33 10HmbW-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbX-000000005vi-0000" +1999-03-02 09:44:33 10HmbW-000000005vi-0000 -> xyz@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbX-000000005vi-0000" +1999-03-02 09:44:33 10HmbW-000000005vi-0000 => hostnotresume@test.ex R=client T=send_to_server2 H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmbY-000000005vi-0000" +1999-03-02 09:44:33 10HmbW-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbZ-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for renewal@test.ex +1999-03-02 09:44:33 10HmbZ-000000005vi-0000 tls_out_ver TLS1.3 +1999-03-02 09:44:33 10HmbZ-000000005vi-0000 tls_out_resumption session resumed, also new ticket 1999-03-02 09:44:33 10HmbZ-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbZ-000000005vi-0000 peer cert subject CN=server1.example.com 1999-03-02 09:44:33 10HmbZ-000000005vi-0000 peer cert verified 1 1999-03-02 09:44:33 10HmbZ-000000005vi-0000 peer dn CN=server1.example.com -1999-03-02 09:44:33 10HmbZ-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx +1999-03-02 09:44:33 10HmbZ-000000005vi-0000 cipher TLS1.x:ke-PSK-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbZ-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbZ-000000005vi-0000 => notreq@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmcA-000000005vi-0000" +1999-03-02 09:44:33 10HmbZ-000000005vi-0000 => renewal@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmcA-000000005vi-0000" 1999-03-02 09:44:33 10HmbZ-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmcB-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for getticket@test.ex -1999-03-02 09:44:33 10HmcB-000000005vi-0000 tls_out_resumption client requested new ticket, server provided +1999-03-02 09:44:33 10HmcB-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for postrenewal@test.ex +1999-03-02 09:44:33 10HmcB-000000005vi-0000 tls_out_ver TLS1.3 +1999-03-02 09:44:33 10HmcB-000000005vi-0000 tls_out_resumption session resumed 1999-03-02 09:44:33 10HmcB-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmcB-000000005vi-0000 peer cert subject CN=server1.example.com 1999-03-02 09:44:33 10HmcB-000000005vi-0000 peer cert verified 1 1999-03-02 09:44:33 10HmcB-000000005vi-0000 peer dn CN=server1.example.com -1999-03-02 09:44:33 10HmcB-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx +1999-03-02 09:44:33 10HmcB-000000005vi-0000 cipher TLS1.x:ke-PSK-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmcB-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmcB-000000005vi-0000 => getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmcC-000000005vi-0000" +1999-03-02 09:44:33 10HmcB-000000005vi-0000 => postrenewal@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmcC-000000005vi-0000" 1999-03-02 09:44:33 10HmcB-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmcD-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for noresume@test.ex -1999-03-02 09:44:33 10HmcD-000000005vi-0000 tls_out_resumption client requested new ticket, server provided +1999-03-02 09:44:33 10HmcD-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for timeout@test.ex +1999-03-02 09:44:33 10HmcD-000000005vi-0000 tls_out_ver TLS1.3 +1999-03-02 09:44:33 10HmcD-000000005vi-0000 tls_out_resumption client offered session, server only provided new ticket 1999-03-02 09:44:33 10HmcD-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmcD-000000005vi-0000 peer cert subject CN=server1.example.com 1999-03-02 09:44:33 10HmcD-000000005vi-0000 peer cert verified 1 1999-03-02 09:44:33 10HmcD-000000005vi-0000 peer dn CN=server1.example.com 1999-03-02 09:44:33 10HmcD-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmcD-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmcD-000000005vi-0000 => noresume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmcE-000000005vi-0000" +1999-03-02 09:44:33 10HmcD-000000005vi-0000 => timeout@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmcE-000000005vi-0000" 1999-03-02 09:44:33 10HmcD-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmcF-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for resume@test.ex -1999-03-02 09:44:33 10HmcF-000000005vi-0000 tls_out_resumption session resumed, also new ticket +1999-03-02 09:44:33 10HmcF-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for notreq@test.ex +1999-03-02 09:44:33 10HmcF-000000005vi-0000 tls_out_ver TLS1.3 +1999-03-02 09:44:33 10HmcF-000000005vi-0000 tls_out_resumption no client request 1999-03-02 09:44:33 10HmcF-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmcF-000000005vi-0000 peer cert subject CN=server1.example.com 1999-03-02 09:44:33 10HmcF-000000005vi-0000 peer cert verified 1 1999-03-02 09:44:33 10HmcF-000000005vi-0000 peer dn CN=server1.example.com -1999-03-02 09:44:33 10HmcF-000000005vi-0000 cipher TLS1.x:ke-PSK-AES256-SHAnnn:xxx +1999-03-02 09:44:33 10HmcF-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmcF-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmcF-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmcG-000000005vi-0000" +1999-03-02 09:44:33 10HmcF-000000005vi-0000 => notreq@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmcG-000000005vi-0000" 1999-03-02 09:44:33 10HmcF-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmcH-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for resume@test.ex -1999-03-02 09:44:33 10HmcH-000000005vi-0000 tls_out_resumption session resumed, also new ticket +1999-03-02 09:44:33 10HmcH-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for getticket@test.ex +1999-03-02 09:44:33 10HmcH-000000005vi-0000 tls_out_ver TLS1.3 +1999-03-02 09:44:33 10HmcH-000000005vi-0000 tls_out_resumption client requested new ticket, server provided 1999-03-02 09:44:33 10HmcH-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmcH-000000005vi-0000 peer cert subject CN=server1.example.com 1999-03-02 09:44:33 10HmcH-000000005vi-0000 peer cert verified 1 1999-03-02 09:44:33 10HmcH-000000005vi-0000 peer dn CN=server1.example.com -1999-03-02 09:44:33 10HmcH-000000005vi-0000 cipher TLS1.x:ke-PSK-AES256-SHAnnn:xxx +1999-03-02 09:44:33 10HmcH-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmcH-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmcH-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmcI-000000005vi-0000" +1999-03-02 09:44:33 10HmcH-000000005vi-0000 => getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmcI-000000005vi-0000" 1999-03-02 09:44:33 10HmcH-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmcJ-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for noresume@test.ex +1999-03-02 09:44:33 10HmcJ-000000005vi-0000 tls_out_ver TLS1.3 +1999-03-02 09:44:33 10HmcJ-000000005vi-0000 tls_out_resumption client requested new ticket, server provided +1999-03-02 09:44:33 10HmcJ-000000005vi-0000 our cert subject +1999-03-02 09:44:33 10HmcJ-000000005vi-0000 peer cert subject CN=server1.example.com +1999-03-02 09:44:33 10HmcJ-000000005vi-0000 peer cert verified 1 +1999-03-02 09:44:33 10HmcJ-000000005vi-0000 peer dn CN=server1.example.com +1999-03-02 09:44:33 10HmcJ-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx +1999-03-02 09:44:33 10HmcJ-000000005vi-0000 bits 256 +1999-03-02 09:44:33 10HmcJ-000000005vi-0000 => noresume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmcK-000000005vi-0000" +1999-03-02 09:44:33 10HmcJ-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmcL-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for resume@test.ex +1999-03-02 09:44:33 10HmcL-000000005vi-0000 tls_out_ver TLS1.3 +1999-03-02 09:44:33 10HmcL-000000005vi-0000 tls_out_resumption session resumed, also new ticket +1999-03-02 09:44:33 10HmcL-000000005vi-0000 our cert subject +1999-03-02 09:44:33 10HmcL-000000005vi-0000 peer cert subject CN=server1.example.com +1999-03-02 09:44:33 10HmcL-000000005vi-0000 peer cert verified 1 +1999-03-02 09:44:33 10HmcL-000000005vi-0000 peer dn CN=server1.example.com +1999-03-02 09:44:33 10HmcL-000000005vi-0000 cipher TLS1.x:ke-PSK-AES256-SHAnnn:xxx +1999-03-02 09:44:33 10HmcL-000000005vi-0000 bits 256 +1999-03-02 09:44:33 10HmcL-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmcM-000000005vi-0000" +1999-03-02 09:44:33 10HmcL-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmcN-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for resume@test.ex +1999-03-02 09:44:33 10HmcN-000000005vi-0000 tls_out_ver TLS1.3 +1999-03-02 09:44:33 10HmcN-000000005vi-0000 tls_out_resumption session resumed, also new ticket +1999-03-02 09:44:33 10HmcN-000000005vi-0000 our cert subject +1999-03-02 09:44:33 10HmcN-000000005vi-0000 peer cert subject CN=server1.example.com +1999-03-02 09:44:33 10HmcN-000000005vi-0000 peer cert verified 1 +1999-03-02 09:44:33 10HmcN-000000005vi-0000 peer dn CN=server1.example.com +1999-03-02 09:44:33 10HmcN-000000005vi-0000 cipher TLS1.x:ke-PSK-AES256-SHAnnn:xxx +1999-03-02 09:44:33 10HmcN-000000005vi-0000 bits 256 +1999-03-02 09:44:33 10HmcN-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmcO-000000005vi-0000" +1999-03-02 09:44:33 10HmcN-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmcP-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for getticket@test.ex +1999-03-02 09:44:33 10HmcP-000000005vi-0000 tls_out_ver TLS1.3 +1999-03-02 09:44:33 10HmcP-000000005vi-0000 tls_out_resumption client requested new ticket, server provided +1999-03-02 09:44:33 10HmcP-000000005vi-0000 our cert subject +1999-03-02 09:44:33 10HmcP-000000005vi-0000 peer cert subject CN=server1.example.com +1999-03-02 09:44:33 10HmcP-000000005vi-0000 peer cert verified 1 +1999-03-02 09:44:33 10HmcP-000000005vi-0000 peer dn CN=server1.example.com +1999-03-02 09:44:33 10HmcP-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx +1999-03-02 09:44:33 10HmcP-000000005vi-0000 bits 256 +1999-03-02 09:44:33 10HmcP-000000005vi-0000 => getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D2 X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="CN=server1.example.com" C="250 OK id=10HmcQ-000000005vi-0000" +1999-03-02 09:44:33 10HmcP-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmcR-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for resume@test.ex +1999-03-02 09:44:33 10HmcR-000000005vi-0000 tls_out_ver TLS1.3 +1999-03-02 09:44:33 10HmcR-000000005vi-0000 tls_out_resumption session resumed, also new ticket +1999-03-02 09:44:33 10HmcR-000000005vi-0000 our cert subject +1999-03-02 09:44:33 10HmcR-000000005vi-0000 peer cert subject CN=server1.example.com +1999-03-02 09:44:33 10HmcR-000000005vi-0000 peer cert verified 1 +1999-03-02 09:44:33 10HmcR-000000005vi-0000 peer dn CN=server1.example.com +1999-03-02 09:44:33 10HmcR-000000005vi-0000 cipher TLS1.x:ke-PSK-AES256-SHAnnn:xxx +1999-03-02 09:44:33 10HmcR-000000005vi-0000 bits 256 +1999-03-02 09:44:33 10HmcR-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D2 X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=yes DN="CN=server1.example.com" C="250 OK id=10HmcS-000000005vi-0000" +1999-03-02 09:44:33 10HmcR-000000005vi-0000 Completed ******** 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 exim x.yz daemon started: pid=p1234, no queue runs, listening for SMTP on port PORT_D and for SMTPS on port PORT_D2 +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption client requested new ticket, server provided 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -209,6 +285,7 @@ 1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaX-000000005vi-0000@myhost.test.ex for getticket@test.ex 1999-03-02 09:44:33 10HmaY-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmaY-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption session resumed 1999-03-02 09:44:33 our cert subject 1999-03-02 09:44:33 peer cert subject @@ -220,6 +297,7 @@ 1999-03-02 09:44:33 10HmbA-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbA-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbA-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption not requested or offered 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -227,9 +305,10 @@ 1999-03-02 09:44:33 peer dn 1999-03-02 09:44:33 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 bits 256 -1999-03-02 09:44:33 10HmbB-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaZ-000000005vi-0000@myhost.test.ex for abcd@test.ex -1999-03-02 09:44:33 10HmbB-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmbB-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaZ-000000005vi-0000@myhost.test.ex for hostnotresume@test.ex +1999-03-02 09:44:33 10HmbB-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbB-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption session resumed 1999-03-02 09:44:33 our cert subject 1999-03-02 09:44:33 peer cert subject @@ -240,6 +319,7 @@ 1999-03-02 09:44:33 10HmbD-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke--AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbC-000000005vi-0000@myhost.test.ex for renewal@test.ex 1999-03-02 09:44:33 10HmbD-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbD-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption session resumed 1999-03-02 09:44:33 our cert subject 1999-03-02 09:44:33 peer cert subject @@ -250,6 +330,7 @@ 1999-03-02 09:44:33 10HmbF-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke--AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbE-000000005vi-0000@myhost.test.ex for postrenewal@test.ex 1999-03-02 09:44:33 10HmbF-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbF-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption client offered session, server only provided new ticket 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -260,6 +341,7 @@ 1999-03-02 09:44:33 10HmbH-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbG-000000005vi-0000@myhost.test.ex for timeout@test.ex 1999-03-02 09:44:33 10HmbH-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbH-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption client requested new ticket, server provided 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -270,6 +352,7 @@ 1999-03-02 09:44:33 10HmbJ-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbI-000000005vi-0000@myhost.test.ex for notreq@test.ex 1999-03-02 09:44:33 10HmbJ-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbJ-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption client requested new ticket, server provided 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -280,6 +363,7 @@ 1999-03-02 09:44:33 10HmbL-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbK-000000005vi-0000@myhost.test.ex for noverify_getticket@test.ex 1999-03-02 09:44:33 10HmbL-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbL-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption session resumed 1999-03-02 09:44:33 our cert subject 1999-03-02 09:44:33 peer cert subject @@ -290,7 +374,41 @@ 1999-03-02 09:44:33 10HmbN-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke--AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbM-000000005vi-0000@myhost.test.ex for noverify_resume@test.ex 1999-03-02 09:44:33 10HmbN-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbN-000000005vi-0000 Completed -1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D +1999-03-02 09:44:33 tls_in_ver TLS1.2 +1999-03-02 09:44:33 tls_in_resumption session resumed +1999-03-02 09:44:33 our cert subject +1999-03-02 09:44:33 peer cert subject +1999-03-02 09:44:33 peer cert verified 0 +1999-03-02 09:44:33 peer dn +1999-03-02 09:44:33 cipher TLS1.x:ke--AES256-SHAnnn:xxx +1999-03-02 09:44:33 bits 256 +1999-03-02 09:44:33 10HmbP-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke--AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbO-000000005vi-0000@myhost.test.ex for resume@test.ex +1999-03-02 09:44:33 10HmbP-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmbP-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 +1999-03-02 09:44:33 tls_in_resumption client offered session, server only provided new ticket +1999-03-02 09:44:33 our cert subject CN=server1.example.com +1999-03-02 09:44:33 peer cert subject +1999-03-02 09:44:33 peer cert verified 0 +1999-03-02 09:44:33 peer dn +1999-03-02 09:44:33 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx +1999-03-02 09:44:33 bits 256 +1999-03-02 09:44:33 10HmbR-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] TFO* P=smtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbQ-000000005vi-0000@myhost.test.ex for getticket@test.ex +1999-03-02 09:44:33 10HmbR-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmbR-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 +1999-03-02 09:44:33 tls_in_resumption session resumed +1999-03-02 09:44:33 our cert subject +1999-03-02 09:44:33 peer cert subject +1999-03-02 09:44:33 peer cert verified 0 +1999-03-02 09:44:33 peer dn +1999-03-02 09:44:33 cipher TLS1.x:ke--AES256-SHAnnn:xxx +1999-03-02 09:44:33 bits 256 +1999-03-02 09:44:33 10HmbT-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] TFO* P=smtps X=TLS1.x:ke--AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbS-000000005vi-0000@myhost.test.ex for resume@test.ex +1999-03-02 09:44:33 10HmbT-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmbT-000000005vi-0000 Completed +1999-03-02 09:44:33 exim x.yz daemon started: pid=p1235, no queue runs, listening for SMTP on port PORT_D and for SMTPS on port PORT_D2 +1999-03-02 09:44:33 tls_in_ver TLS1.3 1999-03-02 09:44:33 tls_in_resumption client requested new ticket, server provided 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -298,9 +416,10 @@ 1999-03-02 09:44:33 peer dn 1999-03-02 09:44:33 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 bits 256 -1999-03-02 09:44:33 10HmbP-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbO-000000005vi-0000@myhost.test.ex for getticket@test.ex -1999-03-02 09:44:33 10HmbP-000000005vi-0000 => :blackhole: R=server -1999-03-02 09:44:33 10HmbP-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbV-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbU-000000005vi-0000@myhost.test.ex for getticket@test.ex +1999-03-02 09:44:33 10HmbV-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmbV-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 1999-03-02 09:44:33 tls_in_resumption session resumed, also new ticket 1999-03-02 09:44:33 our cert subject 1999-03-02 09:44:33 peer cert subject @@ -308,10 +427,11 @@ 1999-03-02 09:44:33 peer dn 1999-03-02 09:44:33 cipher TLS1.x:ke-PSK-AES256-SHAnnn:xxx 1999-03-02 09:44:33 bits 256 -1999-03-02 09:44:33 10HmbR-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbQ-000000005vi-0000@myhost.test.ex for resume@test.ex xyz@test.ex -1999-03-02 09:44:33 10HmbR-000000005vi-0000 => :blackhole: R=server -1999-03-02 09:44:33 10HmbR-000000005vi-0000 => :blackhole: R=server -1999-03-02 09:44:33 10HmbR-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbX-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbW-000000005vi-0000@myhost.test.ex for resume@test.ex xyz@test.ex +1999-03-02 09:44:33 10HmbX-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmbX-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmbX-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 1999-03-02 09:44:33 tls_in_resumption not requested or offered 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -319,9 +439,10 @@ 1999-03-02 09:44:33 peer dn 1999-03-02 09:44:33 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 bits 256 -1999-03-02 09:44:33 10HmbS-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbQ-000000005vi-0000@myhost.test.ex for abcd@test.ex -1999-03-02 09:44:33 10HmbS-000000005vi-0000 => :blackhole: R=server -1999-03-02 09:44:33 10HmbS-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbY-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbW-000000005vi-0000@myhost.test.ex for hostnotresume@test.ex +1999-03-02 09:44:33 10HmbY-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmbY-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 1999-03-02 09:44:33 tls_in_resumption session resumed, also new ticket 1999-03-02 09:44:33 our cert subject 1999-03-02 09:44:33 peer cert subject @@ -329,9 +450,10 @@ 1999-03-02 09:44:33 peer dn 1999-03-02 09:44:33 cipher TLS1.x:ke-PSK-AES256-SHAnnn:xxx 1999-03-02 09:44:33 bits 256 -1999-03-02 09:44:33 10HmbU-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbT-000000005vi-0000@myhost.test.ex for renewal@test.ex -1999-03-02 09:44:33 10HmbU-000000005vi-0000 => :blackhole: R=server -1999-03-02 09:44:33 10HmbU-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmcA-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbZ-000000005vi-0000@myhost.test.ex for renewal@test.ex +1999-03-02 09:44:33 10HmcA-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmcA-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 1999-03-02 09:44:33 tls_in_resumption session resumed 1999-03-02 09:44:33 our cert subject 1999-03-02 09:44:33 peer cert subject @@ -339,9 +461,10 @@ 1999-03-02 09:44:33 peer dn 1999-03-02 09:44:33 cipher TLS1.x:ke-PSK-AES256-SHAnnn:xxx 1999-03-02 09:44:33 bits 256 -1999-03-02 09:44:33 10HmbW-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbV-000000005vi-0000@myhost.test.ex for postrenewal@test.ex -1999-03-02 09:44:33 10HmbW-000000005vi-0000 => :blackhole: R=server -1999-03-02 09:44:33 10HmbW-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmcC-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmcB-000000005vi-0000@myhost.test.ex for postrenewal@test.ex +1999-03-02 09:44:33 10HmcC-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmcC-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 1999-03-02 09:44:33 tls_in_resumption client requested new ticket, server provided 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -349,9 +472,10 @@ 1999-03-02 09:44:33 peer dn 1999-03-02 09:44:33 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 bits 256 -1999-03-02 09:44:33 10HmbY-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbX-000000005vi-0000@myhost.test.ex for timeout@test.ex -1999-03-02 09:44:33 10HmbY-000000005vi-0000 => :blackhole: R=server -1999-03-02 09:44:33 10HmbY-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmcE-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmcD-000000005vi-0000@myhost.test.ex for timeout@test.ex +1999-03-02 09:44:33 10HmcE-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmcE-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 1999-03-02 09:44:33 tls_in_resumption client requested new ticket, server provided 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -359,9 +483,10 @@ 1999-03-02 09:44:33 peer dn 1999-03-02 09:44:33 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 bits 256 -1999-03-02 09:44:33 10HmcA-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbZ-000000005vi-0000@myhost.test.ex for notreq@test.ex -1999-03-02 09:44:33 10HmcA-000000005vi-0000 => :blackhole: R=server -1999-03-02 09:44:33 10HmcA-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmcG-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmcF-000000005vi-0000@myhost.test.ex for notreq@test.ex +1999-03-02 09:44:33 10HmcG-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmcG-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 1999-03-02 09:44:33 tls_in_resumption client requested new ticket, server provided 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -369,9 +494,10 @@ 1999-03-02 09:44:33 peer dn 1999-03-02 09:44:33 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 bits 256 -1999-03-02 09:44:33 10HmcC-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmcB-000000005vi-0000@myhost.test.ex for getticket@test.ex -1999-03-02 09:44:33 10HmcC-000000005vi-0000 => :blackhole: R=server -1999-03-02 09:44:33 10HmcC-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmcI-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmcH-000000005vi-0000@myhost.test.ex for getticket@test.ex +1999-03-02 09:44:33 10HmcI-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmcI-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 1999-03-02 09:44:33 tls_in_resumption client requested new ticket, server provided 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -379,9 +505,10 @@ 1999-03-02 09:44:33 peer dn 1999-03-02 09:44:33 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 bits 256 -1999-03-02 09:44:33 10HmcE-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmcD-000000005vi-0000@myhost.test.ex for noresume@test.ex -1999-03-02 09:44:33 10HmcE-000000005vi-0000 => :blackhole: R=server -1999-03-02 09:44:33 10HmcE-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmcK-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmcJ-000000005vi-0000@myhost.test.ex for noresume@test.ex +1999-03-02 09:44:33 10HmcK-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmcK-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 1999-03-02 09:44:33 tls_in_resumption session resumed, also new ticket 1999-03-02 09:44:33 our cert subject 1999-03-02 09:44:33 peer cert subject @@ -389,9 +516,10 @@ 1999-03-02 09:44:33 peer dn 1999-03-02 09:44:33 cipher TLS1.x:ke-PSK-AES256-SHAnnn:xxx 1999-03-02 09:44:33 bits 256 -1999-03-02 09:44:33 10HmcG-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmcF-000000005vi-0000@myhost.test.ex for resume@test.ex -1999-03-02 09:44:33 10HmcG-000000005vi-0000 => :blackhole: R=server -1999-03-02 09:44:33 10HmcG-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmcM-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmcL-000000005vi-0000@myhost.test.ex for resume@test.ex +1999-03-02 09:44:33 10HmcM-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmcM-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 1999-03-02 09:44:33 tls_in_resumption session resumed, also new ticket 1999-03-02 09:44:33 our cert subject 1999-03-02 09:44:33 peer cert subject @@ -399,6 +527,28 @@ 1999-03-02 09:44:33 peer dn 1999-03-02 09:44:33 cipher TLS1.x:ke-PSK-AES256-SHAnnn:xxx 1999-03-02 09:44:33 bits 256 -1999-03-02 09:44:33 10HmcI-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmcH-000000005vi-0000@myhost.test.ex for resume@test.ex -1999-03-02 09:44:33 10HmcI-000000005vi-0000 => :blackhole: R=server -1999-03-02 09:44:33 10HmcI-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmcO-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmcN-000000005vi-0000@myhost.test.ex for resume@test.ex +1999-03-02 09:44:33 10HmcO-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmcO-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 +1999-03-02 09:44:33 tls_in_resumption client requested new ticket, server provided +1999-03-02 09:44:33 our cert subject CN=server1.example.com +1999-03-02 09:44:33 peer cert subject +1999-03-02 09:44:33 peer cert verified 0 +1999-03-02 09:44:33 peer dn +1999-03-02 09:44:33 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx +1999-03-02 09:44:33 bits 256 +1999-03-02 09:44:33 10HmcQ-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] TFO* P=smtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmcP-000000005vi-0000@myhost.test.ex for getticket@test.ex +1999-03-02 09:44:33 10HmcQ-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmcQ-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 +1999-03-02 09:44:33 tls_in_resumption session resumed, also new ticket +1999-03-02 09:44:33 our cert subject +1999-03-02 09:44:33 peer cert subject +1999-03-02 09:44:33 peer cert verified 0 +1999-03-02 09:44:33 peer dn +1999-03-02 09:44:33 cipher TLS1.x:ke-PSK-AES256-SHAnnn:xxx +1999-03-02 09:44:33 bits 256 +1999-03-02 09:44:33 10HmcS-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] TFO* P=smtps X=TLS1.x:ke-PSK-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmcR-000000005vi-0000@myhost.test.ex for resume@test.ex +1999-03-02 09:44:33 10HmcS-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmcS-000000005vi-0000 Completed diff --git a/test/log/5892 b/test/log/5892 index aeaae546a..21b6cc597 100644 --- a/test/log/5892 +++ b/test/log/5892 @@ -1,4 +1,5 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for getticket@test.ex +1999-03-02 09:44:33 10HmaX-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmaX-000000005vi-0000 tls_out_resumption client requested new ticket, server provided 1999-03-02 09:44:33 10HmaX-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmaX-000000005vi-0000 peer cert subject CN=server1.example.com @@ -6,9 +7,10 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmaX-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmaX-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmaX-000000005vi-0000 => getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmaY-000000005vi-0000" +1999-03-02 09:44:33 10HmaX-000000005vi-0000 => getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmaY-000000005vi-0000" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for resume@test.ex hostnotresume@test.ex xyz@test.ex +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 tls_out_resumption session resumed 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 peer cert subject CN=server1.example.com @@ -16,8 +18,9 @@ 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbA-000000005vi-0000" -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 -> xyz@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbA-000000005vi-0000" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbA-000000005vi-0000" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 -> xyz@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbA-000000005vi-0000" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 tls_out_resumption not requested or offered 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 peer cert subject CN=server1.example.com @@ -25,9 +28,10 @@ 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => hostnotresume@test.ex R=client T=send_to_server2 H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbB-000000005vi-0000" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => hostnotresume@test.ex R=client T=send_to_server2 H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbB-000000005vi-0000" 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbC-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for renewal@test.ex +1999-03-02 09:44:33 10HmbC-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmbC-000000005vi-0000 tls_out_resumption session resumed 1999-03-02 09:44:33 10HmbC-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbC-000000005vi-0000 peer cert subject CN=server1.example.com @@ -35,9 +39,10 @@ 1999-03-02 09:44:33 10HmbC-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmbC-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbC-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbC-000000005vi-0000 => renewal@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbD-000000005vi-0000" +1999-03-02 09:44:33 10HmbC-000000005vi-0000 => renewal@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbD-000000005vi-0000" 1999-03-02 09:44:33 10HmbC-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbE-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for postrenewal@test.ex +1999-03-02 09:44:33 10HmbE-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmbE-000000005vi-0000 tls_out_resumption session resumed 1999-03-02 09:44:33 10HmbE-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbE-000000005vi-0000 peer cert subject CN=server1.example.com @@ -45,9 +50,10 @@ 1999-03-02 09:44:33 10HmbE-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmbE-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbE-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbE-000000005vi-0000 => postrenewal@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbF-000000005vi-0000" +1999-03-02 09:44:33 10HmbE-000000005vi-0000 => postrenewal@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbF-000000005vi-0000" 1999-03-02 09:44:33 10HmbE-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbG-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for aftertimeout@test.ex +1999-03-02 09:44:33 10HmbG-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmbG-000000005vi-0000 tls_out_resumption client requested new ticket, server provided 1999-03-02 09:44:33 10HmbG-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbG-000000005vi-0000 peer cert subject CN=server1.example.com @@ -55,9 +61,10 @@ 1999-03-02 09:44:33 10HmbG-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmbG-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbG-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbG-000000005vi-0000 => aftertimeout@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbH-000000005vi-0000" +1999-03-02 09:44:33 10HmbG-000000005vi-0000 => aftertimeout@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbH-000000005vi-0000" 1999-03-02 09:44:33 10HmbG-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbI-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for notreq@test.ex +1999-03-02 09:44:33 10HmbI-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmbI-000000005vi-0000 tls_out_resumption not requested or offered 1999-03-02 09:44:33 10HmbI-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbI-000000005vi-0000 peer cert subject CN=server1.example.com @@ -65,10 +72,11 @@ 1999-03-02 09:44:33 10HmbI-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmbI-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbI-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbI-000000005vi-0000 => notreq@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbJ-000000005vi-0000" +1999-03-02 09:44:33 10HmbI-000000005vi-0000 => notreq@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbJ-000000005vi-0000" 1999-03-02 09:44:33 10HmbI-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbK-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for noverify_getticket@test.ex 1999-03-02 09:44:33 10HmbK-000000005vi-0000 [127.0.0.1] SSL verify error: certificate name mismatch: DN="/CN=server1.example.com" H="127.0.0.1" +1999-03-02 09:44:33 10HmbK-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmbK-000000005vi-0000 tls_out_resumption client requested new ticket, server provided 1999-03-02 09:44:33 10HmbK-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbK-000000005vi-0000 peer cert subject CN=server1.example.com @@ -76,9 +84,10 @@ 1999-03-02 09:44:33 10HmbK-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmbK-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbK-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbK-000000005vi-0000 => noverify_getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no DN="/CN=server1.example.com" C="250 OK id=10HmbL-000000005vi-0000" +1999-03-02 09:44:33 10HmbK-000000005vi-0000 => noverify_getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no DN="/CN=server1.example.com" C="250 OK id=10HmbL-000000005vi-0000" 1999-03-02 09:44:33 10HmbK-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbM-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for noverify_resume@test.ex +1999-03-02 09:44:33 10HmbM-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmbM-000000005vi-0000 tls_out_resumption session resumed 1999-03-02 09:44:33 10HmbM-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbM-000000005vi-0000 peer cert subject CN=server1.example.com @@ -86,9 +95,10 @@ 1999-03-02 09:44:33 10HmbM-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmbM-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbM-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbM-000000005vi-0000 => noverify_resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=no DN="/CN=server1.example.com" C="250 OK id=10HmbN-000000005vi-0000" +1999-03-02 09:44:33 10HmbM-000000005vi-0000 => noverify_resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=no DN="/CN=server1.example.com" C="250 OK id=10HmbN-000000005vi-0000" 1999-03-02 09:44:33 10HmbM-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbO-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for getticket@test.ex +1999-03-02 09:44:33 10HmbO-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmbO-000000005vi-0000 tls_out_resumption client requested new ticket, server provided 1999-03-02 09:44:33 10HmbO-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbO-000000005vi-0000 peer cert subject CN=server1.example.com @@ -96,9 +106,10 @@ 1999-03-02 09:44:33 10HmbO-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmbO-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbO-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbO-000000005vi-0000 => getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbP-000000005vi-0000" +1999-03-02 09:44:33 10HmbO-000000005vi-0000 => getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbP-000000005vi-0000" 1999-03-02 09:44:33 10HmbO-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbQ-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for noresume@test.ex +1999-03-02 09:44:33 10HmbQ-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmbQ-000000005vi-0000 tls_out_resumption client requested new ticket, server provided 1999-03-02 09:44:33 10HmbQ-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbQ-000000005vi-0000 peer cert subject CN=server1.example.com @@ -106,9 +117,10 @@ 1999-03-02 09:44:33 10HmbQ-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmbQ-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbQ-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbQ-000000005vi-0000 => noresume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbR-000000005vi-0000" +1999-03-02 09:44:33 10HmbQ-000000005vi-0000 => noresume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbR-000000005vi-0000" 1999-03-02 09:44:33 10HmbQ-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbS-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for resume@test.ex +1999-03-02 09:44:33 10HmbS-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmbS-000000005vi-0000 tls_out_resumption session resumed 1999-03-02 09:44:33 10HmbS-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbS-000000005vi-0000 peer cert subject CN=server1.example.com @@ -116,9 +128,10 @@ 1999-03-02 09:44:33 10HmbS-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmbS-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbS-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbS-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbT-000000005vi-0000" +1999-03-02 09:44:33 10HmbS-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbT-000000005vi-0000" 1999-03-02 09:44:33 10HmbS-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbU-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for resume@test.ex +1999-03-02 09:44:33 10HmbU-000000005vi-0000 tls_out_ver TLS1.2 1999-03-02 09:44:33 10HmbU-000000005vi-0000 tls_out_resumption session resumed 1999-03-02 09:44:33 10HmbU-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbU-000000005vi-0000 peer cert subject CN=server1.example.com @@ -126,11 +139,34 @@ 1999-03-02 09:44:33 10HmbU-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmbU-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbU-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbU-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbV-000000005vi-0000" +1999-03-02 09:44:33 10HmbU-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbV-000000005vi-0000" 1999-03-02 09:44:33 10HmbU-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbW-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for getticket@test.ex +1999-03-02 09:44:33 10HmbW-000000005vi-0000 tls_out_ver TLS1.2 +1999-03-02 09:44:33 10HmbW-000000005vi-0000 tls_out_resumption client requested new ticket, server provided +1999-03-02 09:44:33 10HmbW-000000005vi-0000 our cert subject +1999-03-02 09:44:33 10HmbW-000000005vi-0000 peer cert subject CN=server1.example.com +1999-03-02 09:44:33 10HmbW-000000005vi-0000 peer cert verified 1 +1999-03-02 09:44:33 10HmbW-000000005vi-0000 peer dn /CN=server1.example.com +1999-03-02 09:44:33 10HmbW-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx +1999-03-02 09:44:33 10HmbW-000000005vi-0000 bits 256 +1999-03-02 09:44:33 10HmbW-000000005vi-0000 => getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D2 X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbX-000000005vi-0000" +1999-03-02 09:44:33 10HmbW-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbY-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for resume@test.ex +1999-03-02 09:44:33 10HmbY-000000005vi-0000 tls_out_ver TLS1.2 +1999-03-02 09:44:33 10HmbY-000000005vi-0000 tls_out_resumption session resumed +1999-03-02 09:44:33 10HmbY-000000005vi-0000 our cert subject +1999-03-02 09:44:33 10HmbY-000000005vi-0000 peer cert subject CN=server1.example.com +1999-03-02 09:44:33 10HmbY-000000005vi-0000 peer cert verified 1 +1999-03-02 09:44:33 10HmbY-000000005vi-0000 peer dn /CN=server1.example.com +1999-03-02 09:44:33 10HmbY-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx +1999-03-02 09:44:33 10HmbY-000000005vi-0000 bits 256 +1999-03-02 09:44:33 10HmbY-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D2 X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbZ-000000005vi-0000" +1999-03-02 09:44:33 10HmbY-000000005vi-0000 Completed ******** 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 exim x.yz daemon started: pid=p1234, no queue runs, listening for SMTP on port PORT_D and for SMTPS on port PORT_D2 +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption client requested new ticket, server provided 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -141,6 +177,7 @@ 1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaX-000000005vi-0000@myhost.test.ex for getticket@test.ex 1999-03-02 09:44:33 10HmaY-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmaY-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption session resumed 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -152,6 +189,7 @@ 1999-03-02 09:44:33 10HmbA-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbA-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbA-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption not requested or offered 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -162,6 +200,7 @@ 1999-03-02 09:44:33 10HmbB-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaZ-000000005vi-0000@myhost.test.ex for hostnotresume@test.ex 1999-03-02 09:44:33 10HmbB-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbB-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption session resumed, also new ticket 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -172,6 +211,7 @@ 1999-03-02 09:44:33 10HmbD-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbC-000000005vi-0000@myhost.test.ex for renewal@test.ex 1999-03-02 09:44:33 10HmbD-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbD-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption session resumed, also new ticket 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -182,6 +222,7 @@ 1999-03-02 09:44:33 10HmbF-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbE-000000005vi-0000@myhost.test.ex for postrenewal@test.ex 1999-03-02 09:44:33 10HmbF-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbF-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption client requested new ticket, server provided 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -192,6 +233,7 @@ 1999-03-02 09:44:33 10HmbH-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbG-000000005vi-0000@myhost.test.ex for aftertimeout@test.ex 1999-03-02 09:44:33 10HmbH-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbH-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption no client request 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -202,6 +244,7 @@ 1999-03-02 09:44:33 10HmbJ-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbI-000000005vi-0000@myhost.test.ex for notreq@test.ex 1999-03-02 09:44:33 10HmbJ-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbJ-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption client requested new ticket, server provided 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -212,6 +255,7 @@ 1999-03-02 09:44:33 10HmbL-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbK-000000005vi-0000@myhost.test.ex for noverify_getticket@test.ex 1999-03-02 09:44:33 10HmbL-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbL-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption session resumed 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -222,6 +266,7 @@ 1999-03-02 09:44:33 10HmbN-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbM-000000005vi-0000@myhost.test.ex for noverify_resume@test.ex 1999-03-02 09:44:33 10HmbN-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbN-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption client requested new ticket, server provided 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -232,6 +277,7 @@ 1999-03-02 09:44:33 10HmbP-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbO-000000005vi-0000@myhost.test.ex for getticket@test.ex 1999-03-02 09:44:33 10HmbP-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbP-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption client requested new ticket, server provided 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -242,6 +288,7 @@ 1999-03-02 09:44:33 10HmbR-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbQ-000000005vi-0000@myhost.test.ex for noresume@test.ex 1999-03-02 09:44:33 10HmbR-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbR-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption session resumed 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -252,6 +299,7 @@ 1999-03-02 09:44:33 10HmbT-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbS-000000005vi-0000@myhost.test.ex for resume@test.ex 1999-03-02 09:44:33 10HmbT-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbT-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 1999-03-02 09:44:33 tls_in_resumption session resumed 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -262,3 +310,25 @@ 1999-03-02 09:44:33 10HmbV-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbU-000000005vi-0000@myhost.test.ex for resume@test.ex 1999-03-02 09:44:33 10HmbV-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbV-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 +1999-03-02 09:44:33 tls_in_resumption client requested new ticket, server provided +1999-03-02 09:44:33 our cert subject CN=server1.example.com +1999-03-02 09:44:33 peer cert subject +1999-03-02 09:44:33 peer cert verified 0 +1999-03-02 09:44:33 peer dn +1999-03-02 09:44:33 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx +1999-03-02 09:44:33 bits 256 +1999-03-02 09:44:33 10HmbX-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] TFO* P=smtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbW-000000005vi-0000@myhost.test.ex for getticket@test.ex +1999-03-02 09:44:33 10HmbX-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmbX-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.2 +1999-03-02 09:44:33 tls_in_resumption session resumed +1999-03-02 09:44:33 our cert subject CN=server1.example.com +1999-03-02 09:44:33 peer cert subject +1999-03-02 09:44:33 peer cert verified 0 +1999-03-02 09:44:33 peer dn +1999-03-02 09:44:33 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx +1999-03-02 09:44:33 bits 256 +1999-03-02 09:44:33 10HmbZ-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] TFO* P=smtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbY-000000005vi-0000@myhost.test.ex for resume@test.ex +1999-03-02 09:44:33 10HmbZ-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmbZ-000000005vi-0000 Completed diff --git a/test/log/5894 b/test/log/5894 index ab0d53703..f3d447c2a 100644 --- a/test/log/5894 +++ b/test/log/5894 @@ -1,4 +1,5 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for getticket@test.ex +1999-03-02 09:44:33 10HmaX-000000005vi-0000 tls_out_ver TLS1.3 1999-03-02 09:44:33 10HmaX-000000005vi-0000 tls_out_resumption client requested new ticket, server provided 1999-03-02 09:44:33 10HmaX-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmaX-000000005vi-0000 peer cert subject CN=server1.example.com @@ -6,9 +7,10 @@ 1999-03-02 09:44:33 10HmaX-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmaX-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmaX-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmaX-000000005vi-0000 => getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmaY-000000005vi-0000" +1999-03-02 09:44:33 10HmaX-000000005vi-0000 => getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmaY-000000005vi-0000" 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for resume@test.ex abcd@test.ex xyz@test.ex +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for resume@test.ex hostnotresume@test.ex xyz@test.ex +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 tls_out_ver TLS1.3 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 tls_out_resumption session resumed 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 peer cert subject CN=server1.example.com @@ -16,6 +18,7 @@ 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 bits 256 +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 tls_out_ver TLS1.3 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 tls_out_resumption not requested or offered 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 peer cert subject CN=server1.example.com @@ -23,41 +26,45 @@ 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbA-000000005vi-0000" -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 -> xyz@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbA-000000005vi-0000" -1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => abcd@test.ex R=client T=send_to_server2 H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbB-000000005vi-0000" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbA-000000005vi-0000" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 -> xyz@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbA-000000005vi-0000" +1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => hostnotresume@test.ex R=client T=send_to_server2 H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbB-000000005vi-0000" 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbC-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for renewal@test.ex -1999-03-02 09:44:33 10HmbC-000000005vi-0000 tls_out_resumption session resumed, also new ticket +1999-03-02 09:44:33 10HmbC-000000005vi-0000 tls_out_ver TLS1.3 +1999-03-02 09:44:33 10HmbC-000000005vi-0000 tls_out_resumption session resumed 1999-03-02 09:44:33 10HmbC-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbC-000000005vi-0000 peer cert subject CN=server1.example.com 1999-03-02 09:44:33 10HmbC-000000005vi-0000 peer cert verified 1 1999-03-02 09:44:33 10HmbC-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmbC-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbC-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbC-000000005vi-0000 => renewal@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbD-000000005vi-0000" +1999-03-02 09:44:33 10HmbC-000000005vi-0000 => renewal@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbD-000000005vi-0000" 1999-03-02 09:44:33 10HmbC-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbE-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for postrenewal@test.ex -1999-03-02 09:44:33 10HmbE-000000005vi-0000 tls_out_resumption session resumed +1999-03-02 09:44:33 10HmbE-000000005vi-0000 tls_out_ver TLS1.3 +1999-03-02 09:44:33 10HmbE-000000005vi-0000 tls_out_resumption session resumed, also new ticket 1999-03-02 09:44:33 10HmbE-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbE-000000005vi-0000 peer cert subject CN=server1.example.com 1999-03-02 09:44:33 10HmbE-000000005vi-0000 peer cert verified 1 1999-03-02 09:44:33 10HmbE-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmbE-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbE-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbE-000000005vi-0000 => postrenewal@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbF-000000005vi-0000" +1999-03-02 09:44:33 10HmbE-000000005vi-0000 => postrenewal@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbF-000000005vi-0000" 1999-03-02 09:44:33 10HmbE-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbG-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for timeout@test.ex -1999-03-02 09:44:33 10HmbG-000000005vi-0000 tls_out_resumption session resumed, also new ticket +1999-03-02 09:44:33 10HmbG-000000005vi-0000 tls_out_ver TLS1.3 +1999-03-02 09:44:33 10HmbG-000000005vi-0000 tls_out_resumption session resumed 1999-03-02 09:44:33 10HmbG-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbG-000000005vi-0000 peer cert subject CN=server1.example.com 1999-03-02 09:44:33 10HmbG-000000005vi-0000 peer cert verified 1 1999-03-02 09:44:33 10HmbG-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmbG-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbG-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbG-000000005vi-0000 => timeout@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbH-000000005vi-0000" +1999-03-02 09:44:33 10HmbG-000000005vi-0000 => timeout@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbH-000000005vi-0000" 1999-03-02 09:44:33 10HmbG-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbI-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for notreq@test.ex +1999-03-02 09:44:33 10HmbI-000000005vi-0000 tls_out_ver TLS1.3 1999-03-02 09:44:33 10HmbI-000000005vi-0000 tls_out_resumption not requested or offered 1999-03-02 09:44:33 10HmbI-000000005vi-0000 our cert subject 1999-03-02 09:44:33 10HmbI-000000005vi-0000 peer cert subject CN=server1.example.com @@ -65,11 +72,34 @@ 1999-03-02 09:44:33 10HmbI-000000005vi-0000 peer dn /CN=server1.example.com 1999-03-02 09:44:33 10HmbI-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 10HmbI-000000005vi-0000 bits 256 -1999-03-02 09:44:33 10HmbI-000000005vi-0000 => notreq@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbJ-000000005vi-0000" +1999-03-02 09:44:33 10HmbI-000000005vi-0000 => notreq@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbJ-000000005vi-0000" 1999-03-02 09:44:33 10HmbI-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbK-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for getticket@test.ex +1999-03-02 09:44:33 10HmbK-000000005vi-0000 tls_out_ver TLS1.3 +1999-03-02 09:44:33 10HmbK-000000005vi-0000 tls_out_resumption client requested new ticket, server provided +1999-03-02 09:44:33 10HmbK-000000005vi-0000 our cert subject +1999-03-02 09:44:33 10HmbK-000000005vi-0000 peer cert subject CN=server1.example.com +1999-03-02 09:44:33 10HmbK-000000005vi-0000 peer cert verified 1 +1999-03-02 09:44:33 10HmbK-000000005vi-0000 peer dn /CN=server1.example.com +1999-03-02 09:44:33 10HmbK-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx +1999-03-02 09:44:33 10HmbK-000000005vi-0000 bits 256 +1999-03-02 09:44:33 10HmbK-000000005vi-0000 => getticket@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D2 X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbL-000000005vi-0000" +1999-03-02 09:44:33 10HmbK-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbM-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for resume@test.ex +1999-03-02 09:44:33 10HmbM-000000005vi-0000 tls_out_ver TLS1.3 +1999-03-02 09:44:33 10HmbM-000000005vi-0000 tls_out_resumption session resumed, also new ticket +1999-03-02 09:44:33 10HmbM-000000005vi-0000 our cert subject +1999-03-02 09:44:33 10HmbM-000000005vi-0000 peer cert subject CN=server1.example.com +1999-03-02 09:44:33 10HmbM-000000005vi-0000 peer cert verified 1 +1999-03-02 09:44:33 10HmbM-000000005vi-0000 peer dn /CN=server1.example.com +1999-03-02 09:44:33 10HmbM-000000005vi-0000 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx +1999-03-02 09:44:33 10HmbM-000000005vi-0000 bits 256 +1999-03-02 09:44:33 10HmbM-000000005vi-0000 => resume@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1]:PORT_D2 X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=yes DN="/CN=server1.example.com" C="250 OK id=10HmbN-000000005vi-0000" +1999-03-02 09:44:33 10HmbM-000000005vi-0000 Completed ******** 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 exim x.yz daemon started: pid=p1234, no queue runs, listening for SMTP on port PORT_D and for SMTPS on port PORT_D2 +1999-03-02 09:44:33 tls_in_ver TLS1.3 1999-03-02 09:44:33 tls_in_resumption client requested new ticket, server provided 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -80,6 +110,7 @@ 1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaX-000000005vi-0000@myhost.test.ex for getticket@test.ex 1999-03-02 09:44:33 10HmaY-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmaY-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 1999-03-02 09:44:33 tls_in_resumption session resumed 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -91,6 +122,7 @@ 1999-03-02 09:44:33 10HmbA-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbA-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbA-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 1999-03-02 09:44:33 tls_in_resumption not requested or offered 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -98,9 +130,10 @@ 1999-03-02 09:44:33 peer dn 1999-03-02 09:44:33 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx 1999-03-02 09:44:33 bits 256 -1999-03-02 09:44:33 10HmbB-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaZ-000000005vi-0000@myhost.test.ex for abcd@test.ex -1999-03-02 09:44:33 10HmbB-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmbB-000000005vi-0000 <= CALLER@myhost.test.ex H=the.local.host.name (myhost.test.ex) [ip4.ip4.ip4.ip4] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmaZ-000000005vi-0000@myhost.test.ex for hostnotresume@test.ex +1999-03-02 09:44:33 10HmbB-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbB-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 1999-03-02 09:44:33 tls_in_resumption session resumed, also new ticket 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -111,6 +144,7 @@ 1999-03-02 09:44:33 10HmbD-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbC-000000005vi-0000@myhost.test.ex for renewal@test.ex 1999-03-02 09:44:33 10HmbD-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbD-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 1999-03-02 09:44:33 tls_in_resumption session resumed 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -121,6 +155,7 @@ 1999-03-02 09:44:33 10HmbF-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbE-000000005vi-0000@myhost.test.ex for postrenewal@test.ex 1999-03-02 09:44:33 10HmbF-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbF-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 1999-03-02 09:44:33 tls_in_resumption session resumed, also new ticket 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -131,6 +166,7 @@ 1999-03-02 09:44:33 10HmbH-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbG-000000005vi-0000@myhost.test.ex for timeout@test.ex 1999-03-02 09:44:33 10HmbH-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbH-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 1999-03-02 09:44:33 tls_in_resumption client requested new ticket, server provided 1999-03-02 09:44:33 our cert subject CN=server1.example.com 1999-03-02 09:44:33 peer cert subject @@ -141,3 +177,25 @@ 1999-03-02 09:44:33 10HmbJ-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbI-000000005vi-0000@myhost.test.ex for notreq@test.ex 1999-03-02 09:44:33 10HmbJ-000000005vi-0000 => :blackhole: R=server 1999-03-02 09:44:33 10HmbJ-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 +1999-03-02 09:44:33 tls_in_resumption client requested new ticket, server provided +1999-03-02 09:44:33 our cert subject CN=server1.example.com +1999-03-02 09:44:33 peer cert subject +1999-03-02 09:44:33 peer cert verified 0 +1999-03-02 09:44:33 peer dn +1999-03-02 09:44:33 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx +1999-03-02 09:44:33 bits 256 +1999-03-02 09:44:33 10HmbL-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] TFO* P=smtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbK-000000005vi-0000@myhost.test.ex for getticket@test.ex +1999-03-02 09:44:33 10HmbL-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmbL-000000005vi-0000 Completed +1999-03-02 09:44:33 tls_in_ver TLS1.3 +1999-03-02 09:44:33 tls_in_resumption session resumed, also new ticket +1999-03-02 09:44:33 our cert subject CN=server1.example.com +1999-03-02 09:44:33 peer cert subject +1999-03-02 09:44:33 peer cert verified 0 +1999-03-02 09:44:33 peer dn +1999-03-02 09:44:33 cipher TLS1.x:ke-RSA-AES256-SHAnnn:xxx +1999-03-02 09:44:33 bits 256 +1999-03-02 09:44:33 10HmbN-000000005vi-0000 <= CALLER@myhost.test.ex H=(helo.data.changed) [127.0.0.1] TFO* P=smtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx* CV=no S=sss id=E10HmbM-000000005vi-0000@myhost.test.ex for resume@test.ex +1999-03-02 09:44:33 10HmbN-000000005vi-0000 => :blackhole: R=server +1999-03-02 09:44:33 10HmbN-000000005vi-0000 Completed diff --git a/test/mail/0289.CALLER b/test/mail/0289.CALLER index 2ba67d12b..3dc4f79ba 100644 --- a/test/mail/0289.CALLER +++ b/test/mail/0289.CALLER @@ -21,3 +21,24 @@ From: me Body . +From MAILER-DAEMON Tue Mar 02 09:44:33 1999 +Received: from EXIMUSER by myhost.test.ex with local (Exim x.yz) + id 10HmaZ-000000005vi-0000 + for CALLER@myhost.test.ex; + Tue, 2 Mar 1999 09:44:33 +0000 +Auto-Submitted: auto-replied +From: Mail Delivery System +To: CALLER@myhost.test.ex +Subject: Mail failure - too many recipients +Message-Id: +Date: Tue, 2 Mar 1999 09:44:33 +0000 + +A message that you sent contained more recipients than allowed on this +system. It was not delivered to any recipients. + +------ This is a copy of your message, including all the headers. ------ + + +From: me +. + diff --git a/test/mail/0289.userx b/test/mail/0289.userx new file mode 100644 index 000000000..a789fc76e --- /dev/null +++ b/test/mail/0289.userx @@ -0,0 +1,10 @@ +From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999 +Received: from CALLER by myhost.test.ex with local (Exim x.yz) + (envelope-from ) + id 10HmaY-000000005vi-0000; + Tue, 2 Mar 1999 09:44:33 +0000 +From: me@myhost.test.ex +Message-Id: +Date: Tue, 2 Mar 1999 09:44:33 +0000 + + diff --git a/test/mail/0289.usery b/test/mail/0289.usery new file mode 100644 index 000000000..a789fc76e --- /dev/null +++ b/test/mail/0289.usery @@ -0,0 +1,10 @@ +From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999 +Received: from CALLER by myhost.test.ex with local (Exim x.yz) + (envelope-from ) + id 10HmaY-000000005vi-0000; + Tue, 2 Mar 1999 09:44:33 +0000 +From: me@myhost.test.ex +Message-Id: +Date: Tue, 2 Mar 1999 09:44:33 +0000 + + diff --git a/test/mail/0606.b b/test/mail/0606.b index cd4125850..5f9ac43a9 100644 --- a/test/mail/0606.b +++ b/test/mail/0606.b @@ -2,8 +2,7 @@ From bad_check@test.ex Tue Mar 02 09:44:33 1999 Envelope-to: a@test.ex Received: from CALLER by the.local.host.name with local (Exim x.yz) (envelope-from ) - id 10HmaX-000000005vi-0000 - for a@test.ex; + id 10HmaX-000000005vi-0000; Tue, 2 Mar 1999 09:44:33 +0000 Subject: foo Message-Id: diff --git a/test/mail/0906.a b/test/mail/0906.a deleted file mode 100644 index 0fcd96ad1..000000000 --- a/test/mail/0906.a +++ /dev/null @@ -1,111 +0,0 @@ -From MAILER-DAEMON Tue Mar 02 09:44:33 1999 -Return-path: <> -Received: from localhost ([127.0.0.1] helo=testhost.test.ex) - by testhost.test.ex with esmtp (Exim x.yz) - id 10HmaX-000000005vi-0000 - for a@test.ex; - Tue, 2 Mar 1999 09:44:33 +0000 -Received: from [127.0.0.1] (helo=test.com) - by testhost.test.ex with esmtp (Exim x.yz) - (envelope-from ) - id 10HmaY-000000005vi-0000 - for a@test.ex; - Tue, 2 Mar 1999 09:44:33 +0000 -Subject: foo -X-body-linecount: 0 -X-message-linecount: 12 -X-received-count: 2 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -.dot -tail - diff --git a/test/mail/0908.a b/test/mail/0908.a new file mode 100644 index 000000000..0fcd96ad1 --- /dev/null +++ b/test/mail/0908.a @@ -0,0 +1,111 @@ +From MAILER-DAEMON Tue Mar 02 09:44:33 1999 +Return-path: <> +Received: from localhost ([127.0.0.1] helo=testhost.test.ex) + by testhost.test.ex with esmtp (Exim x.yz) + id 10HmaX-000000005vi-0000 + for a@test.ex; + Tue, 2 Mar 1999 09:44:33 +0000 +Received: from [127.0.0.1] (helo=test.com) + by testhost.test.ex with esmtp (Exim x.yz) + (envelope-from ) + id 10HmaY-000000005vi-0000 + for a@test.ex; + Tue, 2 Mar 1999 09:44:33 +0000 +Subject: foo +X-body-linecount: 0 +X-message-linecount: 12 +X-received-count: 2 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +.dot +tail + diff --git a/test/mail/1157.userb b/test/mail/1157.userb index d84b01013..8f752e5b3 100644 --- a/test/mail/1157.userb +++ b/test/mail/1157.userb @@ -3,7 +3,7 @@ Received: from localhost ([127.0.0.1]:1112 helo=myhost.test.ex) by myhost.test.ex with esmtps (TLS1.x:ke-RSA-AES256-SHAnnn:xxx) (Exim x.yz) (envelope-from ) - id 10HmbI-000000005vi-0000 + id 10HmbH-000000005vi-0000 for userb@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 Received: from CALLER by myhost.test.ex with local (Exim x.yz) diff --git a/test/mail/1157.userc b/test/mail/1157.userc index ebc497b89..d623886f9 100644 --- a/test/mail/1157.userc +++ b/test/mail/1157.userc @@ -3,7 +3,7 @@ Received: from localhost ([127.0.0.1]:1112 helo=myhost.test.ex) by myhost.test.ex with esmtps (TLS1.x:ke-RSA-AES256-SHAnnn:xxx) (Exim x.yz) (envelope-from ) - id 10HmbH-000000005vi-0000 + id 10HmbI-000000005vi-0000 for userc@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 Received: from CALLER by myhost.test.ex with local (Exim x.yz) diff --git a/test/mail/1157.usery b/test/mail/1157.usery index b31c56188..723dfce1d 100644 --- a/test/mail/1157.usery +++ b/test/mail/1157.usery @@ -3,7 +3,7 @@ Received: from localhost ([127.0.0.1]:1111 helo=myhost.test.ex) by myhost.test.ex with esmtps (TLS1.x:ke-RSA-AES256-SHAnnn:xxx) (Exim x.yz) (envelope-from ) - id 10HmbC-000000005vi-0000 + id 10HmbB-000000005vi-0000 for usery@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 Received: from CALLER by myhost.test.ex with local (Exim x.yz) diff --git a/test/mail/1157.userz b/test/mail/1157.userz index 1e1f6e51e..90b41a78b 100644 --- a/test/mail/1157.userz +++ b/test/mail/1157.userz @@ -3,7 +3,7 @@ Received: from localhost ([127.0.0.1]:1111 helo=myhost.test.ex) by myhost.test.ex with esmtps (TLS1.x:ke-RSA-AES256-SHAnnn:xxx) (Exim x.yz) (envelope-from ) - id 10HmbB-000000005vi-0000 + id 10HmbC-000000005vi-0000 for userz@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 Received: from CALLER by myhost.test.ex with local (Exim x.yz) diff --git a/test/mail/1163.usery0 b/test/mail/1163.usery0 index 6d02deae0..3eb804f0e 100644 --- a/test/mail/1163.usery0 +++ b/test/mail/1163.usery0 @@ -1,9 +1,9 @@ From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999 -Received: from localhost ([127.0.0.1]:1112 helo=myhost.test.ex) +Received: from localhost ([127.0.0.1]:1111 helo=myhost.test.ex) by myhost.test.ex with esmtps (TLS1.x:ke-RSA-AES256-SHAnnn:xxx) (Exim x.yz) (envelope-from ) - id 10HmbE-000000005vi-0000 + id 10HmbC-000000005vi-0000 for usery0@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 Received: from CALLER by myhost.test.ex with local (Exim x.yz) diff --git a/test/mail/1163.usery1 b/test/mail/1163.usery1 index 9332d1a03..e51b5bb0e 100644 --- a/test/mail/1163.usery1 +++ b/test/mail/1163.usery1 @@ -1,9 +1,9 @@ From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999 -Received: from localhost ([127.0.0.1]:1112 helo=myhost.test.ex) +Received: from localhost ([127.0.0.1]:1111 helo=myhost.test.ex) by myhost.test.ex with esmtps (TLS1.x:ke-RSA-AES256-SHAnnn:xxx) (Exim x.yz) (envelope-from ) - id 10HmbF-000000005vi-0000 + id 10HmbD-000000005vi-0000 for usery1@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 Received: from CALLER by myhost.test.ex with local (Exim x.yz) diff --git a/test/mail/1163.userz0 b/test/mail/1163.userz0 index b5e1d22b0..c6f9774fa 100644 --- a/test/mail/1163.userz0 +++ b/test/mail/1163.userz0 @@ -1,9 +1,9 @@ From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999 -Received: from localhost ([127.0.0.1]:1111 helo=myhost.test.ex) +Received: from localhost ([127.0.0.1]:1112 helo=myhost.test.ex) by myhost.test.ex with esmtps (TLS1.x:ke-RSA-AES256-SHAnnn:xxx) (Exim x.yz) (envelope-from ) - id 10HmbC-000000005vi-0000 + id 10HmbE-000000005vi-0000 for userz0@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 Received: from CALLER by myhost.test.ex with local (Exim x.yz) diff --git a/test/mail/1163.userz1 b/test/mail/1163.userz1 index 98f8def24..13aced9ac 100644 --- a/test/mail/1163.userz1 +++ b/test/mail/1163.userz1 @@ -1,9 +1,9 @@ From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999 -Received: from localhost ([127.0.0.1]:1111 helo=myhost.test.ex) +Received: from localhost ([127.0.0.1]:1112 helo=myhost.test.ex) by myhost.test.ex with esmtps (TLS1.x:ke-RSA-AES256-SHAnnn:xxx) (Exim x.yz) (envelope-from ) - id 10HmbD-000000005vi-0000 + id 10HmbF-000000005vi-0000 for userz1@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 Received: from CALLER by myhost.test.ex with local (Exim x.yz) diff --git a/test/mail/4510.b02 b/test/mail/4510.b02 new file mode 100644 index 000000000..350ed832a --- /dev/null +++ b/test/mail/4510.b02 @@ -0,0 +1,22 @@ +From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999 +Received: from the.local.host.name ([ip4.ip4.ip4.ip4] helo=myhost.test.ex) + by myhost.test.ex with esmtp (Exim x.yz) + (envelope-from ) + id 10HmbD-000000005vi-0000 + for b02@test.ex; + Tue, 2 Mar 1999 09:44:33 +0000 +DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=test.ex; + s=sel; h=From:From; bh=/Ab0giHZitYQbDhFszoqQRUkgqueaX9zatJttIU/plc=; + t=T; b=bbbb; +Received: from CALLER by myhost.test.ex with local (Exim x.yz) + (envelope-from ) + id 10HmbC-000000005vi-0000 + for b02@test.ex; + Tue, 2 Mar 1999 09:44:33 +0000 +From: nobody@example.com +Message-Id: +Sender: CALLER_NAME +Date: Tue, 2 Mar 1999 09:44:33 +0000 + +content + diff --git a/test/mail/4510.b10 b/test/mail/4510.b10 index e5c3dc32b..440f57735 100644 --- a/test/mail/4510.b10 +++ b/test/mail/4510.b10 @@ -2,7 +2,7 @@ From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999 Received: from the.local.host.name ([ip4.ip4.ip4.ip4] helo=myhost.test.ex) by myhost.test.ex with esmtp (Exim x.yz) (envelope-from ) - id 10HmbD-000000005vi-0000 + id 10HmbF-000000005vi-0000 for b10@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=test.ex; @@ -12,11 +12,11 @@ DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=test.ex; hvI6IY=; Received: from CALLER by myhost.test.ex with local (Exim x.yz) (envelope-from ) - id 10HmbC-000000005vi-0000 + id 10HmbE-000000005vi-0000 for b10@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 From: nobody@example.com -Message-Id: +Message-Id: Sender: CALLER_NAME Date: Tue, 2 Mar 1999 09:44:33 +0000 diff --git a/test/mail/4510.b12 b/test/mail/4510.b12 index d0e83a150..3d0417d62 100644 --- a/test/mail/4510.b12 +++ b/test/mail/4510.b12 @@ -2,7 +2,7 @@ From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999 Received: from the.local.host.name ([ip4.ip4.ip4.ip4] helo=myhost.test.ex) by myhost.test.ex with esmtp (Exim x.yz) (envelope-from ) - id 10HmbF-000000005vi-0000 + id 10HmbH-000000005vi-0000 for b12@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=test.ex; @@ -12,13 +12,13 @@ DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=test.ex; 5ssCcfufIlOx4EQ9fQA=; Received: from CALLER by myhost.test.ex with local (Exim x.yz) (envelope-from ) - id 10HmbE-000000005vi-0000 + id 10HmbG-000000005vi-0000 for b12@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 From: nobody@example.com X-mine: one X-mine: two -Message-Id: +Message-Id: Sender: CALLER_NAME Date: Tue, 2 Mar 1999 09:44:33 +0000 diff --git a/test/mail/4510.b20 b/test/mail/4510.b20 index 3ac28acab..be7b99e78 100644 --- a/test/mail/4510.b20 +++ b/test/mail/4510.b20 @@ -2,7 +2,7 @@ From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999 Received: from the.local.host.name ([ip4.ip4.ip4.ip4] helo=myhost.test.ex) by myhost.test.ex with esmtp (Exim x.yz) (envelope-from ) - id 10HmbH-000000005vi-0000 + id 10HmbJ-000000005vi-0000 for b20@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=test.ex; @@ -12,11 +12,11 @@ DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=test.ex; d6xCVBLk=; Received: from CALLER by myhost.test.ex with local (Exim x.yz) (envelope-from ) - id 10HmbG-000000005vi-0000 + id 10HmbI-000000005vi-0000 for b20@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 From: nobody@example.com -Message-Id: +Message-Id: Sender: CALLER_NAME Date: Tue, 2 Mar 1999 09:44:33 +0000 diff --git a/test/mail/4510.b22 b/test/mail/4510.b22 index 33e308b31..7acb7f040 100644 --- a/test/mail/4510.b22 +++ b/test/mail/4510.b22 @@ -2,7 +2,7 @@ From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999 Received: from the.local.host.name ([ip4.ip4.ip4.ip4] helo=myhost.test.ex) by myhost.test.ex with esmtp (Exim x.yz) (envelope-from ) - id 10HmbJ-000000005vi-0000 + id 10HmbL-000000005vi-0000 for b22@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=test.ex; @@ -12,13 +12,13 @@ DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=test.ex; /Bzt2ejTfNt7cbQQYHDLajY/q/9W6bGzJm4fBzrWrYgqfvyeXpb8jp2QkwO9zmGMiqmI=; Received: from CALLER by myhost.test.ex with local (Exim x.yz) (envelope-from ) - id 10HmbI-000000005vi-0000 + id 10HmbK-000000005vi-0000 for b22@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 From: nobody@example.com X-mine: one X-mine: two -Message-Id: +Message-Id: Sender: CALLER_NAME Date: Tue, 2 Mar 1999 09:44:33 +0000 diff --git a/test/mail/4510.d b/test/mail/4510.d index 556249386..58b26dea5 100644 --- a/test/mail/4510.d +++ b/test/mail/4510.d @@ -2,7 +2,7 @@ From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999 Received: from the.local.host.name ([ip4.ip4.ip4.ip4] helo=myhost.test.ex) by myhost.test.ex with esmtp (Exim x.yz) (envelope-from ) - id 10HmbL-000000005vi-0000 + id 10HmbN-000000005vi-0000 for d@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=test.ex; @@ -12,11 +12,11 @@ DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=test.ex; QXXNtNEbKg=; Received: from CALLER by myhost.test.ex with local (Exim x.yz) (envelope-from ) - id 10HmbK-000000005vi-0000 + id 10HmbM-000000005vi-0000 for d@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 From: nobody@example.com -Message-Id: +Message-Id: Sender: CALLER_NAME Date: Tue, 2 Mar 1999 09:44:33 +0000 diff --git a/test/mail/4510.e b/test/mail/4510.e index b06c76e81..264e3d877 100644 --- a/test/mail/4510.e +++ b/test/mail/4510.e @@ -2,16 +2,16 @@ From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999 Received: from the.local.host.name ([ip4.ip4.ip4.ip4] helo=myhost.test.ex) by myhost.test.ex with esmtp (Exim x.yz) (envelope-from ) - id 10HmbN-000000005vi-0000 + id 10HmbP-000000005vi-0000 for e@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 Received: from CALLER by myhost.test.ex with local (Exim x.yz) (envelope-from ) - id 10HmbM-000000005vi-0000 + id 10HmbO-000000005vi-0000 for e@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 From: nobody@example.com -Message-Id: +Message-Id: Sender: CALLER_NAME Date: Tue, 2 Mar 1999 09:44:33 +0000 diff --git a/test/mail/4510.f b/test/mail/4510.f index 2cd115784..56e648b77 100644 --- a/test/mail/4510.f +++ b/test/mail/4510.f @@ -2,7 +2,7 @@ From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999 Received: from the.local.host.name ([ip4.ip4.ip4.ip4] helo=myhost.test.ex) by myhost.test.ex with esmtp (Exim x.yz) (envelope-from ) - id 10HmbP-000000005vi-0000 + id 10HmbR-000000005vi-0000 for f@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=test.ex; @@ -12,11 +12,11 @@ DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=test.ex; t2W/iI=; Received: from CALLER by myhost.test.ex with local (Exim x.yz) (envelope-from ) - id 10HmbO-000000005vi-0000 + id 10HmbQ-000000005vi-0000 for f@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 From: nobody@example.com -Message-Id: +Message-Id: Sender: CALLER_NAME Date: Tue, 2 Mar 1999 09:44:33 +0000 diff --git a/test/msglog/1157.10HmbN-000000005vi-0000 b/test/msglog/1157.10HmbN-000000005vi-0000 index 70e01c739..758332ea3 100644 --- a/test/msglog/1157.10HmbN-000000005vi-0000 +++ b/test/msglog/1157.10HmbN-000000005vi-0000 @@ -1 +1 @@ -1999-03-02 09:44:33 Received from CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1113 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbL-000000005vi-0000@myhost.test.ex +1999-03-02 09:44:33 Received from CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1113 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbK-000000005vi-0000@myhost.test.ex diff --git a/test/msglog/1157.10HmbO-000000005vi-0000 b/test/msglog/1157.10HmbO-000000005vi-0000 index 758332ea3..70e01c739 100644 --- a/test/msglog/1157.10HmbO-000000005vi-0000 +++ b/test/msglog/1157.10HmbO-000000005vi-0000 @@ -1 +1 @@ -1999-03-02 09:44:33 Received from CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1113 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbK-000000005vi-0000@myhost.test.ex +1999-03-02 09:44:33 Received from CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1113 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbL-000000005vi-0000@myhost.test.ex diff --git a/test/paniclog/0021 b/test/paniclog/0021 index e2745765c..80e5b4ef0 100644 --- a/test/paniclog/0021 +++ b/test/paniclog/0021 @@ -4,4 +4,4 @@ 1999-03-02 09:44:33 rcpt accepted C=MAIL,RCPT 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 1999-03-02 09:44:33 rcpt accepted C=EHLO,MAIL,RCPT -1999-03-02 09:44:33 10HmaX-000000005vi-0000 10HmaX-000000005vi-0000 no recipients found in headers +1999-03-02 09:44:33 10HmaX-000000005vi-0000 no recipients found in headers diff --git a/test/paniclog/0630 b/test/paniclog/0630 index cbfef06c1..f12f82e61 100644 --- a/test/paniclog/0630 +++ b/test/paniclog/0630 @@ -1,4 +1,4 @@ ******** SERVER ******** 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Tainted filename '/dest3' -1999-03-02 09:44:33 10HmaX-000000005vi-0000 failed to open /dest3 when checking "/$local_part": Permission denied (euid=uuuu egid=EXIM_GID) +1999-03-02 09:44:33 10HmaX-000000005vi-0000 failed to open /dest3 when checking local_parts: Permission denied (euid=uuuu egid=EXIM_GID) diff --git a/test/paniclog/2610 b/test/paniclog/2610 index 3573be261..917a0a801 100644 --- a/test/paniclog/2610 +++ b/test/paniclog/2610 @@ -1 +1 @@ -1999-03-02 09:44:33 10HmaX-000000005vi-0000 tainted search query is not properly quoted (router r1, TESTSUITE/test-config 66): select name from them where id='ph10' limit 1 +1999-03-02 09:44:33 10HmaX-000000005vi-0000 tainted search query is not properly quoted (router r1, TESTSUITE/test-config 68): select name from them where id='ph10' limit 1 diff --git a/test/rejectlog/0637 b/test/rejectlog/0637 new file mode 100644 index 000000000..9f539cd1d --- /dev/null +++ b/test/rejectlog/0637 @@ -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:", C=MAIL,MAIL,MAIL,MAIL) diff --git a/test/rejectlog/0905 b/test/rejectlog/0905 new file mode 100644 index 000000000..d1aa48b11 --- /dev/null +++ b/test/rejectlog/0905 @@ -0,0 +1,3 @@ + +******** SERVER ******** +2017-07-30 18:51:05.712 H=localhost (testhost.test.ex) [127.0.0.1] Ci=p1234 X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no F=<> rejected RCPT : 550 we really do not like you diff --git a/test/rejectlog/4040 b/test/rejectlog/4040 new file mode 100644 index 000000000..9d4ca3aa6 --- /dev/null +++ b/test/rejectlog/4040 @@ -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 diff --git a/test/rejectlog/5708 b/test/rejectlog/5708 new file mode 100644 index 000000000..98f38cd91 --- /dev/null +++ b/test/rejectlog/5708 @@ -0,0 +1,5 @@ + +******** SERVER ******** +1999-03-02 09:44:33 H=(nonexistent.test.ex) [127.0.0.1] F= rejected RCPT +1999-03-02 09:44:33 H=(badcname.test.ex) [127.0.0.1] F= rejected RCPT +1999-03-02 09:44:33 H=(test.again.dns) [127.0.0.1] F= rejected RCPT diff --git a/test/runtest b/test/runtest index ef202985a..7a642fc20 100755 --- a/test/runtest +++ b/test/runtest @@ -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 # @@ -18,7 +21,6 @@ #use strict; use v5.10.1; use warnings; -use if $^V >= v5.19.11, experimental => 'smartmatch'; use Errno; use FileHandle; @@ -116,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})/; + ############################################################################### ############################################################################### @@ -465,7 +475,7 @@ RESET_AFTER_EXTRA_LINE_READ: s/:[^:]+: while opening named pipe/: Error: while opening named pipe/; # Debugging output of lists of hosts may have different sort keys - s/sort=\S+/sort=xx/ if /^\S+ (?:\d+\.){3}\d+ mx=\S+ sort=\S+/; + s/^\s*\S+ (?:\d+\.){3}\d+ mx=\S+ sort=\K\S+/xx/; # Random local part in callout cache testing s/myhost.test.ex-\d+-testing/myhost.test.ex-dddddddd-testing/; @@ -501,7 +511,10 @@ RESET_AFTER_EXTRA_LINE_READ: s/T:(\S+)\s-22\s(\S+)\s/T:$1 -22 xxxx /; # port numbers in dumpdb output - s/T:([a-z.]+(:[0-9.]+)?):$parm_port_n /T:$1:PORT_N /; + s/T:([a-z0-9.]+(:[0-9.]+|:\[[^]]+])?):$parm_port_n /T:$1:PORT_N /; + s/T:([a-z0-9.[\]]+(:[0-9.]+|:\[[^]]+])?):$parm_port_s /T:$1:PORT_S /; + # and exinext + s/Transport: (?:[a-z0-9.]+|\[[^\]]+]) (?:[0-9.]+|\[[^\]]+]):\K$parm_port_s /PORT_S /; # port numbers in stderr s/^set_process_info: .*\]:\K$parm_port_d /PORT_D /; @@ -516,8 +529,18 @@ RESET_AFTER_EXTRA_LINE_READ: # time used was fixed when I first started running automatic Exim tests. # Date/time in header lines and SMTP responses - s/[A-Z][a-z]{2},\s\d\d?\s[A-Z][a-z]{2}\s\d{4}\s\d\d\:\d\d:\d\d\s[-+]\d{4} - /Tue, 2 Mar 1999 09:44:33 +0000/gx; + s/[A-Z][a-z]{2}, + (\s|\xE2\x96\x91) + \d\d? + (\s|\xE2\x96\x91) + [A-Z][a-z]{2} + (\s|\xE2\x96\x91) + \d{4} + (\s|\xE2\x96\x91) + \d\d\:\d\d:\d\d + (\s|\xE2\x96\x91) + [-+]\d{4} + /Tue,${1}2${2}Mar${3}1999${4}09:44:33${5}+0000/gx; # and in a French locale s/\S{4},\s\d\d?\s[^,]+\s\d{4}\s\d\d\:\d\d:\d\d\s[-+]\d{4} /dim., 10 f\xE9vr 2019 20:05:49 +0000/gx; @@ -536,8 +559,14 @@ RESET_AFTER_EXTRA_LINE_READ: s/((D|[RQD]T)=)\d\.\d{3}s/$1q.qqqs/g; # Date/time in message separators - s/(?:[A-Z][a-z]{2}\s){2}\d\d\s\d\d:\d\d:\d\d\s\d\d\d\d - /Tue Mar 02 09:44:33 1999/gx; + s/(?:[A-Z][a-z]{2} + (\s|\xE2\x96\x91) + ){2}\d\d + (\s|\xE2\x96\x91) + \d\d:\d\d:\d\d + (\s|\xE2\x96\x91) + \d\d\d\d + /Tue${1}Mar${1}02${2}09:44:33${3}1999/gx; # Date of message arrival in spool file as shown by -Mvh s/^\d{9,10}\s0$/ddddddddd 0/; @@ -546,10 +575,10 @@ RESET_AFTER_EXTRA_LINE_READ: s/\d\d-\w\w\w-\d\d\d\d\s\d\d:\d\d:\d\d\s[-+]\d\d\d\d,/06-Sep-1999 15:52:48 +0100,/gx; # Dates/times in debugging output for writing retry records - if (/^ first failed=(\d+) last try=(\d+) next try=(\d+) (.*)$/) + if (/^(\s+)first failed=(\d+) last try=(\d+) next try=(\d+) (.*)$/) { - my($next) = $3 - $2; - $_ = " first failed=dddd last try=dddd next try=+$next $4\n"; + my($next) = $4 - $3; + $_ = "$1first failed=dddd last try=dddd next try=+$next $5\n"; } s/^(\s*)now=\d+ first_failed=\d+ next_try=\d+ expired=(\w)/$1now=tttt first_failed=tttt next_try=tttt expired=$2/; s/^(\s*)received_time=\d+ diff=\d+ timeout=(\d+)/$1received_time=tttt diff=tttt timeout=$2/; @@ -695,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 @@ -805,11 +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/) - { - 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/; @@ -892,7 +922,7 @@ RESET_AFTER_EXTRA_LINE_READ: s/([\s,])S=\d+\b/$1S=sss/; s/:S\d+\b/:Ssss/; - s/^(\s*\d+[mhd]\s+)\d+(\s+(?:[a-z0-9-]{23}|[a-z0-9-]{18}) <)/TTT sss$2/i if $is_stdout; + s/^(\s*\d+[mhd]\s+)\d+(\s+(?:[[:alnum:]-]{23}|[[:alnum:]-]{16}) <)/TTT sss$2/i if $is_stdout; s/\sSIZE=\d+\b/ SIZE=ssss/; s/\ssize=\d+\b/ size=sss/ if $is_stderr; s/old size = \d+\b/old size = sssss/; @@ -1025,6 +1055,9 @@ RESET_AFTER_EXTRA_LINE_READ: # remote IPv6 addrs vary s/^(Connection request from) \[.*:.*:.*\]$/$1 \[ipv6\]/; + # Hints DB use of lockfiles is provider-dependent + s/Failed to open \K(?:DBM|database lock) file (.*\/spool\/db\/[^.]*)(?:.lockfile)?(?=(?: for reading)?: No such file or directory$)/hintsdb $1/; + # openssl version variances # Error lines on stdout from SSL contain process id values and file names. # They also contain a source file name and line number, which may vary from @@ -1042,6 +1075,9 @@ RESET_AFTER_EXTRA_LINE_READ: # gnutls version variances next if /^Error in the pull function./; + # Retry DB record gets truncated when TESTDIR is a long string + s/T:.*\(MTA-imposed quota exceeded while writing to\K.*$/ )/; + # optional IDN2 variant conversions. Accept either IDN1 or IDN2 s/conversion strasse.de/conversion xn--strae-oqa.de/; s/conversion: german.xn--strae-oqa.de/conversion: german.straße.de/; @@ -1065,6 +1101,9 @@ RESET_AFTER_EXTRA_LINE_READ: # LIMITS is not always supported by the build next if /^limits_advertise_hosts =/; + # PRDR + next if /^hosts_try_prdr = \*$/; + # TLS resumption is not always supported by the build next if /^tls_resumption_hosts =/; next if /^-tls_resumption/; @@ -1074,7 +1113,9 @@ RESET_AFTER_EXTRA_LINE_READ: s/250-AUTH ANONYMOUS PLAIN SCRAM-SHA-1\K SCRAM-SHA-256//; # mailq times change with when the run is done, vs. static-source spoolfiles - s/\s*\d*[hd](?= 317 [0-9A-Za-z\-]{23} )/DDd/; + s/\s*\d*[hd](?= 317 (?:[-0-9A-Za-z]{23}|[-0-9A-Za-z]{16}) )/DDd/; + # mailq sizes change with caller running the test + s/\s[01]m [34]\d\d(?= (?:[-0-9A-Za-z]{23}|[-0-9A-Za-z]{16}) )/ 1m 396/; # Not all builds include EXPERIMENTAL_DSN_INFO (1 of 2) if (/^X-Exim-Diagnostic:/) @@ -1097,9 +1138,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: @@ -1114,6 +1155,10 @@ RESET_AFTER_EXTRA_LINE_READ: ) /x; + # Hints DB use of lockfiles is provider-dependent + next if /lock(?:ing|ed) .*\/spool\/db\/[^.]+\.lockfile$/; + s/closed hints database\K and lockfile$//; + # Lines with a leading pid. Only handle >= 4-digit PIDs to avoid converting SMTP respose codes s/^\s*(\d{4,})\s(?!(?:previous message|in\s|bytes remain in|SMTP accept process running))/new_value($1, "p%s", \$next_pid) . ' '/e; @@ -1202,8 +1247,8 @@ RESET_AFTER_EXTRA_LINE_READ: next if /^TLS: not preloading (CA bundle|cipher list) for server$/; next if /^TLS: not preloading server certs$/; - # some plaatforms are missing the standard CA bundle file - next if /^tls_set_watch\(\) fail on '\/usr\/lib\/ssl\/cert.pem': No such file or directory$/; + # some platforms are missing the standard CA bundle file + next if /^tls_set_watch\(\) fail on '\/usr\/(?:lib\/ssl|local\/openssl3\/etc\/pki\/tls)\/cert.pem': No such file or directory$/; # drop lookups next if /^$time_pid?(?: Lookups\ \(built-in\): @@ -1253,20 +1298,30 @@ 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 TIOCOUTome do not + # Some platforms have TIOCOUT, some do not next if /\d+ bytes remain in socket output buffer$/; # Various other IPv6 lines must be omitted too next if /using host_fake_gethostbyname for \S+ \(IPv6\)/; next if /get\[host\|ipnode\]byname\[2\]\(af=inet6\)/; next if /DNS lookup of \S+ \(AAAA\) using fakens/; - next if / in dns_ipv4_lookup?/; next if / writing neg-cache entry for .*AAAA/; - next if /^faking res_search\(AAAA\) response length as 65535/; + next if /^ *faking res_search\(AAAA\) response length as 65535/; + if (/ in dns_ipv4_lookup\?$/) + { + $_= ; + if (/ list element: \*$/) + { + $_= ; + next if / in dns_ipv4_lookup\? yes \(matched "\*"\)/; + } + goto RESET_AFTER_EXTRA_LINE_READ; + } if (/DNS lookup of \S+ \(AAAA\) gave NO_DATA/) { $_= ; # Gets "returning DNS_NODATA" @@ -1348,7 +1403,7 @@ RESET_AFTER_EXTRA_LINE_READ: s/unexpected disconnection while reading SMTP command from \[127.0.0.1\] \K\(error: Connection reset by peer\) //; # Platform-dependent resolver option bits - s/^ (?:writing|update) neg-cache entry for [^,]+-\K[0-9a-f]+, ttl/xxxx, ttl/; + s/(?:writing|update) neg-cache entry for [^,]+-\K[0-9a-f]+, ttl/xxxx, ttl/; # timing variance, run-to-run s/^time on queue = \K1s/0s/; @@ -1374,14 +1429,20 @@ RESET_AFTER_EXTRA_LINE_READ: } # Different builds will have different lookup types included - s/^\s*search_type \K\d+ \((\w+)\) quoting -1 \(none\)$/NN ($1) quoting -1 (none)/; + s/search_type \K\d+ \((\w+)\) quoting -1 \(none\)$/NN ($1) quoting -1 (none)/; # and different numbers of lookup types result in different type-code letters, # so convert them all to "0" s%(?> Body data for hash, canonicalized/; # Not all platforms build with SPF enabled - next if /^(spf_conn_init|SPF_dns_exim_new|spf_compile\.c)/; + next if /(^spf_conn_init|^SPF_dns_exim_new|spf_compile\.c)/; + next if /try option spf_smtp_comment_template$/; # Not all platforms have sendfile support next if /^cannot use sendfile for body: no support$/; @@ -1455,37 +1520,36 @@ RESET_AFTER_EXTRA_LINE_READ: next if /^DKIM \[[^[]+\] (Header hash|b) computed:/; # Not all platforms support TCP Fast Open, and the compile omits the check - if (s/\S+ in hosts_try_fastopen\? (no \(option unset\)|no \(end of list\)|yes \(matched "\*"\))\n$//) - { - chomp; - $_ .= ; - s/ \.\.\. >>> / ... /; + next if /\S+ in hosts_try_fastopen\? (no \(option unset\)|no \(end of list\)|yes \(matched "\*"\))\n$/ ; + +# if (s/\S+ in hosts_try_fastopen\? (no \(option unset\)|no \(end of list\)|yes \(matched "\*"\))\n$//) +# { +# chomp; +# $_ .= ; +# s/ \.\.\. >>> / ... /; if (s/ non-TFO mode connection attempt to 224.0.0.0, 0 data\b$//) { chomp; $_ .= ; } s/Address family not supported by protocol family/Network Error/; s/Network(?: is)? unreachable/Network Error/; - } +# } next if /^(ppppp |\d+ )?setsockopt FASTOPEN: Protocol not available$/; - s/^(Connecting to .* \.\.\. sending) \d+ (nonTFO early-data)$/$1 dd $2/; + s/^(sending) \d+ (nonTFO early-data)$/$1 dd $2/; - if (/^([0-9: ]* # possible timestamp - Connecting\ to\ [^ ]+\ [^ ]+(\ from\ [^ ]+)?)\ \.\.\. + if (/^[0-9: ]* # possible timestamp \ .*TFO\ mode\x20 (sendto,\ no\ data:\ EINPROGRESS # Linux |connection\ attempt\ to\ [^,]+,\ 0\ data) # MacOS & no-support $/x) { - $_ = $1 . " ... " . ; - s/^(.* \.\.\.) [0-9: ]*connected$/$1 connected/; - - if (/^Connecting to .* \.\.\. connected$/) + $_ = ; + if (/^connected$/) { $_ .= ; - if (/^(Connecting to .* \.\.\. )connected\n\s+SMTP(\(close\)>>|\(Connection refused\)<<)$/) + if (/^connected\n\s+SMTP(\(close\)>>|\(Connection refused\)<<)$/) { - $_ = $1 . "failed: Connection refused\n" . ; - s/^(Connecting .*)\n\s+SMTP\(close\)>>$/$1/; + $_ = "failed: Connection refused\n" . ; + s/^\n\s+SMTP\(close\)>>$/$1/; } - elsif (/^(Connecting to .* \.\.\. connected\n)read response data: size=/) + elsif (/^(connected\n)read response data: size=/) { $_ = $1; } # Date/time in SMTP banner @@ -1564,7 +1628,7 @@ RESET_AFTER_EXTRA_LINE_READ: next if / Berkeley DB error: /; # CHUNKING: exact sizes depend on hostnames in headers - s/(=>.* K C="250- \d)\d+ (byte chunk, total \d)\d+/$1nn $2nn/; + s/(=>.* K (?:DKIM=\S+ )?C="250- \d)\d+ (byte chunk, total \d)\d+/$1nn $2nn/; # OpenSSL version variances s/(TLS error on connection [^:]*: error:)[0-9A-F]{8}(:system library):(?:fopen|func\(4095\)|):(No such file or directory)$/$1xxxxxxxx$2:fopen:$3/; @@ -1593,11 +1657,13 @@ RESET_AFTER_EXTRA_LINE_READ: s/ARC: AMS signing: privkey PEM-block import: error:\K[0-9A-F]{8}:PEM routines:PEM_read_bio:no start line$/1E08010C:DECODER routines::unsupported/; # DKIM timestamps - if ( /(DKIM: d=.*) t=([0-9]*) x=([0-9]*) / ) + if ( /(DKIM: d=.*) t=([0-9]*) x=([0-9]*) \[/ ) { my ($prefix, $t_diff) = ($1, $3 - $2); s/DKIM: d=.* t=[0-9]* x=[0-9]* /${prefix} t=T x=T+${t_diff} /; } + else + { s/DKIM: d=.* \Kt=[0-9]* \[/t=T [/; } # GnuTLS reports a different keysize vs. OpenSSL, for ed25519 keys s/signer: [^ ]* bits:\K 256/ 253/; s/public key too short:\K 256 bits/ 253 bits/; @@ -1626,6 +1692,9 @@ RESET_AFTER_EXTRA_LINE_READ: s/TLS error on connection from .*\K(SSL_accept: TCP connection closed by peer|\(gnutls_handshake\): The TLS connection was non-properly terminated.)/(tls lib accept fn): TCP connection closed by peer/; s/TLS session: \K\(gnutls_handshake\): rxd alert: No supported application protocol could be negotiated/(SSL_connect): error: <>/; s/\(gnutls_handshake\): No common application protocol could be negotiated./(SSL_accept): error: <>/; + + # Not all buildfarm animals have ipv6 + next if / $/ ; } # ======== mail ======== @@ -1640,6 +1709,13 @@ RESET_AFTER_EXTRA_LINE_READ: ; ; } + elsif ( /^(\s+)t=([0-9]*); b=[A-Za-z0-9+\/]+$/ ) + { + my $indent = $1; + s/.*/${indent}t=T; b=bbbb;/; + ; + ; + } # Not all builds include EXPERIMENTAL_DSN_INFO (2 of 2) if (/^X-Exim-Diagnostic:/) @@ -2043,7 +2119,7 @@ $munges = 'timeout_errno' => # actual errno differs Solaris vs. Linux { 'mainlog' => 's/((?:host|message) deferral .* errno) <\d+> /$1 /' }, - 'peer_terminated_conn' => # actual error differs FreedBSD vs. Linux + 'peer_terminated_conn' => # actual error differs FreedBS/Solaris vs. Linux { 'stderr' => 's/^( SMTP\()Connection reset by peer(\)<<)$/$1closed$2/' }, 'perl_variants' => # result of hash-in-scalar-context changed from bucket-fill to keycount @@ -3302,7 +3378,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"; @@ -3400,6 +3476,7 @@ GetOptions( print "Exim binary is `$parm_exim'\n" if defined $parm_exim; +my %wanted; my @wanted = sort numerically uniq @tests_wanted ? @tests_wanted : (), @range_wanted ? $range_wanted[0] .. $range_wanted[1] : (), @@ -3408,6 +3485,7 @@ my @wanted = sort numerically uniq 0+$ARGV[0]..0+$ARGV[1] # add 0 to cope with test numbers starting with zero : (); @wanted = 1..TEST_TOP if not @wanted; +map { $wanted{sprintf("%04d",$_)}= $_; } @wanted; ################################################## # Check for sudo access to root # @@ -3601,7 +3679,7 @@ while () } elsif (/^Support for: (.*)/) - { + { # Compile-time features - exim -bV print; @temp = split /(\s+)/, $1; push(@temp, ' '); @@ -4168,7 +4246,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"; @@ -4220,7 +4298,8 @@ DIR: for (my $i = 0; $i < @test_dirs; $i++) # We want the tests from this subdirectory, provided they are in the # range that was selected. - @testlist = grep { $_ ~~ @wanted } grep { /^\d+(?:\.\d+)?$/ } map { basename $_ } glob "scripts/$testdir/*"; + undef @testlist; + map { push @testlist, $_ if exists $wanted{$_} } grep { /^\d+(?:\.\d+)?$/ } map { basename $_ } glob "scripts/$testdir/*"; tests_exit(-1, "Failed to read test scripts from `scripts/$testdir/*': $!") if not @testlist; @@ -4880,4 +4959,5 @@ Start Exim wrapped by I. (default: don't use valgrind) =cut +# vi: aw ai sw=2 # End of runtest script diff --git a/test/scripts/0000-Basic/0002 b/test/scripts/0000-Basic/0002 index b4f2341bb..a90e7ee9c 100644 --- a/test/scripts/0000-Basic/0002 +++ b/test/scripts/0000-Basic/0002 @@ -418,7 +418,7 @@ mask: ${if eq {1}{2}{${mask:invalid}}{NO}} 5>3m: ${if >{5 } {3m }{y}{n}} 5>3z: ${if >{5 } {3z }{y}{n}} 5>a: ${if >{ 5 } {a}{y}{n}} -5>bad: ${if >{5 } {${lookup{trick}lsearch{DIR/aux-fixed/0002.lsearch}}} {y}{n}} +5>bad: ${if >{5 } {${lookup{trick}lsearch{DIR/aux-fixed/TESTNUM.lsearch}}} {y}{n}} >0: ${if > {}{0}{y}{n}} =: ${if = {}{}{y}{n}} @@ -458,6 +458,7 @@ ge: ${if ge{ABC}{abc}{y}{n}} gei: ${if gei{ABC}{abc}{y}{n}} isip: ${if isip {1.2.3.4}{y}{n}} 1.2.3.4 +isip: ${if isip {1.2.3}{y}{n}} 1.2.3 isip4: ${if isip4{1.2.3.4}{y}{n}} 1.2.3.4 isip6: ${if isip6{1.2.3.4}{y}{n}} 1.2.3.4 isip: ${if isip {::1.2.3.256}{y}{n}} ::1.2.3.256 @@ -471,10 +472,14 @@ isip6: ${if isip6{::1}{y}{n}} ::1 isip: ${if isip {fe80::a00:20ff:fe86:a061}{y}{n}} fe80::a00:20ff:fe86:a061 isip4: ${if isip4{fe80::a00:20ff:fe86:a061}{y}{n}} fe80::a00:20ff:fe86:a061 isip6: ${if isip6{fe80::a00:20ff:fe86:a061}{y}{n}} fe80::a00:20ff:fe86:a061 +isip6: ${if isip6{fe80:a00:20ff:fe86:a061}{y}{n}} fe80:a00:20ff:fe86:a061 isip: ${if isip {fe80::1.2.3.4}{y}{n}} fe80::1.2.3.4 isip: ${if isip {rhubarb}{y}{n}} rhubarb isip4: ${if isip4{rhubarb}{y}{n}} rhubarb isip6: ${if isip6{rhubarb}{y}{n}} rhubarb +isip6: ${if isip6{::/100}{y}{n}} ::/100 +isip6: ${if isip6{::/foo}{y}{n}} ::/foo +isip6: ${if isip6{::/f o}{y}{n}} ::/f o match: ${if match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} match: ${if match{abcd}{^\N([ab]+)(\w+)$\N}{$2$1}fail} @@ -523,10 +528,10 @@ match_ip: 08 ${if match_ip{V4NET.11.12.13}{+hlist}} match_ip: 09 ${if match_ip{V4NET.11.12.14}{+hlist}} match_ip: 10 ${if match_ip{192.168.3.4}{+hlist}} match_ip: 11 ${if match_ip{somename}{+hlist}} -match_ip: 12 ${if match_ip{1.2.3.4}{lsearch;DIR/aux-fixed/0002.matchip}} -match_ip: 13 ${if match_ip{1.2.3.4}{net-lsearch;DIR/aux-fixed/0002.matchip}} -match_ip: 14 ${if match_ip{5.6.7.8}{net24-lsearch;DIR/aux-fixed/0002.matchip}} -match_ip: 15 ${if match_ip{abcd::dcba}{net-iplsearch;DIR/aux-fixed/0002.matchip}} +match_ip: 12 ${if match_ip{1.2.3.4}{lsearch;DIR/aux-fixed/TESTNUM.matchip}} +match_ip: 13 ${if match_ip{1.2.3.4}{net-lsearch;DIR/aux-fixed/TESTNUM.matchip}} +match_ip: 14 ${if match_ip{5.6.7.8}{net24-lsearch;DIR/aux-fixed/TESTNUM.matchip}} +match_ip: 15 ${if match_ip{abcd::dcba}{net-iplsearch;DIR/aux-fixed/TESTNUM.matchip}} queue_running: ${if queue_running{y}{n}} first_delivery: ${if first_delivery{y}{n}} @@ -548,126 +553,126 @@ acl if: ${if acl {{a_defer}{argN}{arg2}} {Y:$value}{N:$value}} # Lookups: DIR is the testing directory. In this test we can only use the # lookups that are required in all cases. -${lookup{postmaster}lsearch {DIR/aux-fixed/0002.aliases}{$value}fail} -${lookup{postmaster}lsearch,ret=full{DIR/aux-fixed/0002.aliases}{$value}fail} - -${lookup{x@y}lsearch*@{DIR/aux-fixed/0002.starat}{$value}fail} -${lookup{x@z}lsearch* {DIR/aux-fixed/0002.starat}{$value}fail} -${lookup{x@z}lsearch*@{DIR/aux-fixed/0002.starat}{$value}fail} -${lookup{x@w}lsearch*@{DIR/aux-fixed/0002.starat}{$value}fail} - -${lookup{x@y}lsearch*@,ret=full {DIR/aux-fixed/0002.starat}{$value}fail} -${lookup{x@z}lsearch*,ret=full {DIR/aux-fixed/0002.starat}{$value}fail} -${lookup{x@z}lsearch*@,ret=full {DIR/aux-fixed/0002.starat}{$value}fail} -${lookup{x@w}lsearch*@,ret=full {DIR/aux-fixed/0002.starat}{$value}fail} - -${lookup{a.b.c.d} partial-lsearch {DIR/aux-fixed/0002.domains}{$value}fail} -${lookup{x.y.z} partial-lsearch {DIR/aux-fixed/0002.domains}{$value}{failed x.y.z}} -${lookup{p.q} partial-lsearch {DIR/aux-fixed/0002.domains}{$value}fail} -${lookup{o.p.q} partial-lsearch {DIR/aux-fixed/0002.domains}{$value}fail} -${lookup{m.n.o.p.q}partial-lsearch {DIR/aux-fixed/0002.domains}{$value}fail} -${lookup{x.y.z} partial1-lsearch{DIR/aux-fixed/0002.domains}{$value}fail} -${lookup{x.y.z} partial0-lsearch{DIR/aux-fixed/0002.domains}{$value}fail} - -${lookup{a.b.c.d} partial-lsearch,ret=full {DIR/aux-fixed/0002.domains}{$value}fail} -${lookup{x.y.z} partial-lsearch,ret=full {DIR/aux-fixed/0002.domains}{$value}{failed x.y.z}} -${lookup{p.q} partial-lsearch,ret=full {DIR/aux-fixed/0002.domains}{$value}fail} -${lookup{o.p.q} partial-lsearch,ret=full {DIR/aux-fixed/0002.domains}{$value}fail} -${lookup{m.n.o.p.q}partial-lsearch,ret=full {DIR/aux-fixed/0002.domains}{$value}fail} -${lookup{x.y.z} partial1-lsearch,ret=full{DIR/aux-fixed/0002.domains}{$value}fail} -${lookup{x.y.z} partial0-lsearch,ret=full{DIR/aux-fixed/0002.domains}{$value}fail} - -q1: ${lookup{abc} lsearch{DIR/aux-fixed/0002.quoted}} -q2: ${lookup{xyz} lsearch{DIR/aux-fixed/0002.quoted}} -q3: ${lookup{pqr} lsearch{DIR/aux-fixed/0002.quoted}} -q4: ${lookup{a:b} lsearch{DIR/aux-fixed/0002.quoted}} -q5: ${lookup{"quoted"} lsearch{DIR/aux-fixed/0002.quoted}} -q6: ${lookup{white space}lsearch{DIR/aux-fixed/0002.quoted}} -q7: ${lookup{b\\s} lsearch{DIR/aux-fixed/0002.quoted}} - -q1f: ${lookup{abc} lsearch,ret=full{DIR/aux-fixed/0002.quoted}} -q2f: ${lookup{xyz} lsearch,ret=full{DIR/aux-fixed/0002.quoted}} -q3f: ${lookup{pqr} lsearch,ret=full{DIR/aux-fixed/0002.quoted}} -q4f: ${lookup{a:b} lsearch,ret=full{DIR/aux-fixed/0002.quoted}} -q5f: ${lookup{"quoted"} lsearch,ret=full{DIR/aux-fixed/0002.quoted}} -q6f: ${lookup{white space}lsearch,ret=full{DIR/aux-fixed/0002.quoted}} -q7f: ${lookup{b\\s} lsearch,ret=full{DIR/aux-fixed/0002.quoted}} - -abc: ${lookup{abc}wildlsearch{DIR/aux-var/0002.wild}} -a.b.c: ${lookup{a.b.c}wildlsearch{DIR/aux-var/0002.wild}} -ab.c: ${lookup{ab.c}wildlsearch{DIR/aux-var/0002.wild}} -xyz: ${lookup{xyz}wildlsearch{DIR/aux-var/0002.wild}} -.Xyz: ${lookup{Xyz}wildlsearch{DIR/aux-var/0002.wild}} -.Zyz: ${lookup{Zyz}wildlsearch{DIR/aux-var/0002.wild}} -a b: ${lookup{a b}wildlsearch{DIR/aux-var/0002.wild}} -a b: ${lookup{a b}wildlsearch{DIR/aux-var/0002.wild}} -a:b: ${lookup{a:b}wildlsearch{DIR/aux-var/0002.wild}} -a.b: ${lookup{a.b}wildlsearch{DIR/aux-var/0002.wild}} -a..b: ${lookup{a..b}wildlsearch{DIR/aux-var/0002.wild}} -a9b: ${lookup{a9b}wildlsearch{DIR/aux-var/0002.wild}} -a99b: ${lookup{a99b}wildlsearch{DIR/aux-var/0002.wild}} +${lookup{postmaster}lsearch {DIR/aux-fixed/TESTNUM.aliases}{$value}fail} +${lookup{postmaster}lsearch,ret=full{DIR/aux-fixed/TESTNUM.aliases}{$value}fail} + +${lookup{x@y}lsearch*@{DIR/aux-fixed/TESTNUM.starat}{$value}fail} +${lookup{x@z}lsearch* {DIR/aux-fixed/TESTNUM.starat}{$value}fail} +${lookup{x@z}lsearch*@{DIR/aux-fixed/TESTNUM.starat}{$value}fail} +${lookup{x@w}lsearch*@{DIR/aux-fixed/TESTNUM.starat}{$value}fail} + +${lookup{x@y}lsearch*@,ret=full {DIR/aux-fixed/TESTNUM.starat}{$value}fail} +${lookup{x@z}lsearch*,ret=full {DIR/aux-fixed/TESTNUM.starat}{$value}fail} +${lookup{x@z}lsearch*@,ret=full {DIR/aux-fixed/TESTNUM.starat}{$value}fail} +${lookup{x@w}lsearch*@,ret=full {DIR/aux-fixed/TESTNUM.starat}{$value}fail} + +${lookup{a.b.c.d} partial-lsearch {DIR/aux-fixed/TESTNUM.domains}{$value}fail} +${lookup{x.y.z} partial-lsearch {DIR/aux-fixed/TESTNUM.domains}{$value}{failed x.y.z}} +${lookup{p.q} partial-lsearch {DIR/aux-fixed/TESTNUM.domains}{$value}fail} +${lookup{o.p.q} partial-lsearch {DIR/aux-fixed/TESTNUM.domains}{$value}fail} +${lookup{m.n.o.p.q}partial-lsearch {DIR/aux-fixed/TESTNUM.domains}{$value}fail} +${lookup{x.y.z} partial1-lsearch{DIR/aux-fixed/TESTNUM.domains}{$value}fail} +${lookup{x.y.z} partial0-lsearch{DIR/aux-fixed/TESTNUM.domains}{$value}fail} + +${lookup{a.b.c.d} partial-lsearch,ret=full {DIR/aux-fixed/TESTNUM.domains}{$value}fail} +${lookup{x.y.z} partial-lsearch,ret=full {DIR/aux-fixed/TESTNUM.domains}{$value}{failed x.y.z}} +${lookup{p.q} partial-lsearch,ret=full {DIR/aux-fixed/TESTNUM.domains}{$value}fail} +${lookup{o.p.q} partial-lsearch,ret=full {DIR/aux-fixed/TESTNUM.domains}{$value}fail} +${lookup{m.n.o.p.q}partial-lsearch,ret=full {DIR/aux-fixed/TESTNUM.domains}{$value}fail} +${lookup{x.y.z} partial1-lsearch,ret=full{DIR/aux-fixed/TESTNUM.domains}{$value}fail} +${lookup{x.y.z} partial0-lsearch,ret=full{DIR/aux-fixed/TESTNUM.domains}{$value}fail} + +q1: ${lookup{abc} lsearch{DIR/aux-fixed/TESTNUM.quoted}} +q2: ${lookup{xyz} lsearch{DIR/aux-fixed/TESTNUM.quoted}} +q3: ${lookup{pqr} lsearch{DIR/aux-fixed/TESTNUM.quoted}} +q4: ${lookup{a:b} lsearch{DIR/aux-fixed/TESTNUM.quoted}} +q5: ${lookup{"quoted"} lsearch{DIR/aux-fixed/TESTNUM.quoted}} +q6: ${lookup{white space}lsearch{DIR/aux-fixed/TESTNUM.quoted}} +q7: ${lookup{b\\s} lsearch{DIR/aux-fixed/TESTNUM.quoted}} + +q1f: ${lookup{abc} lsearch,ret=full{DIR/aux-fixed/TESTNUM.quoted}} +q2f: ${lookup{xyz} lsearch,ret=full{DIR/aux-fixed/TESTNUM.quoted}} +q3f: ${lookup{pqr} lsearch,ret=full{DIR/aux-fixed/TESTNUM.quoted}} +q4f: ${lookup{a:b} lsearch,ret=full{DIR/aux-fixed/TESTNUM.quoted}} +q5f: ${lookup{"quoted"} lsearch,ret=full{DIR/aux-fixed/TESTNUM.quoted}} +q6f: ${lookup{white space}lsearch,ret=full{DIR/aux-fixed/TESTNUM.quoted}} +q7f: ${lookup{b\\s} lsearch,ret=full{DIR/aux-fixed/TESTNUM.quoted}} + +abc: ${lookup{abc}wildlsearch{DIR/aux-var/TESTNUM.wild}} +a.b.c: ${lookup{a.b.c}wildlsearch{DIR/aux-var/TESTNUM.wild}} +ab.c: ${lookup{ab.c}wildlsearch{DIR/aux-var/TESTNUM.wild}} +xyz: ${lookup{xyz}wildlsearch{DIR/aux-var/TESTNUM.wild}} +.Xyz: ${lookup{Xyz}wildlsearch{DIR/aux-var/TESTNUM.wild}} +.Zyz: ${lookup{Zyz}wildlsearch{DIR/aux-var/TESTNUM.wild}} +a b: ${lookup{a b}wildlsearch{DIR/aux-var/TESTNUM.wild}} +a b: ${lookup{a b}wildlsearch{DIR/aux-var/TESTNUM.wild}} +a:b: ${lookup{a:b}wildlsearch{DIR/aux-var/TESTNUM.wild}} +a.b: ${lookup{a.b}wildlsearch{DIR/aux-var/TESTNUM.wild}} +a..b: ${lookup{a..b}wildlsearch{DIR/aux-var/TESTNUM.wild}} +a9b: ${lookup{a9b}wildlsearch{DIR/aux-var/TESTNUM.wild}} +a99b: ${lookup{a99b}wildlsearch{DIR/aux-var/TESTNUM.wild}} # Should give the same results as above because expansion does nothing -abc: ${lookup{abc}nwildlsearch{DIR/aux-var/0002.wild}} -a.b.c: ${lookup{a.b.c}nwildlsearch{DIR/aux-var/0002.wild}} -ab.c: ${lookup{ab.c}nwildlsearch{DIR/aux-var/0002.wild}} -xyz: ${lookup{xyz}nwildlsearch{DIR/aux-var/0002.wild}} -.Xyz: ${lookup{Xyz}nwildlsearch{DIR/aux-var/0002.wild}} -.Zyz: ${lookup{Zyz}nwildlsearch{DIR/aux-var/0002.wild}} -a b: ${lookup{a b}nwildlsearch{DIR/aux-var/0002.wild}} -a b: ${lookup{a b}nwildlsearch{DIR/aux-var/0002.wild}} -a:b: ${lookup{a:b}nwildlsearch{DIR/aux-var/0002.wild}} +abc: ${lookup{abc}nwildlsearch{DIR/aux-var/TESTNUM.wild}} +a.b.c: ${lookup{a.b.c}nwildlsearch{DIR/aux-var/TESTNUM.wild}} +ab.c: ${lookup{ab.c}nwildlsearch{DIR/aux-var/TESTNUM.wild}} +xyz: ${lookup{xyz}nwildlsearch{DIR/aux-var/TESTNUM.wild}} +.Xyz: ${lookup{Xyz}nwildlsearch{DIR/aux-var/TESTNUM.wild}} +.Zyz: ${lookup{Zyz}nwildlsearch{DIR/aux-var/TESTNUM.wild}} +a b: ${lookup{a b}nwildlsearch{DIR/aux-var/TESTNUM.wild}} +a b: ${lookup{a b}nwildlsearch{DIR/aux-var/TESTNUM.wild}} +a:b: ${lookup{a:b}nwildlsearch{DIR/aux-var/TESTNUM.wild}} # Should fail because of no expansion -a.b: ${lookup{a.b}nwildlsearch{DIR/aux-var/0002.wild}{$value}{NO}} -a..b: ${lookup{a..b}nwildlsearch{DIR/aux-var/0002.wild}{$value}{NO}} -a9b: ${lookup{a9b}nwildlsearch{DIR/aux-var/0002.wild}{$value}{NO}} -a99b: ${lookup{a99b}nwildlsearch{DIR/aux-var/0002.wild}{$value}{NO}} +a.b: ${lookup{a.b}nwildlsearch{DIR/aux-var/TESTNUM.wild}{$value}{NO}} +a..b: ${lookup{a..b}nwildlsearch{DIR/aux-var/TESTNUM.wild}{$value}{NO}} +a9b: ${lookup{a9b}nwildlsearch{DIR/aux-var/TESTNUM.wild}{$value}{NO}} +a99b: ${lookup{a99b}nwildlsearch{DIR/aux-var/TESTNUM.wild}{$value}{NO}} # But these should succeed -a\\:b: ${lookup{a\\:b}nwildlsearch{DIR/aux-var/0002.wild}} -a\\:Xb: ${lookup{a\\:Xb}nwildlsearch{DIR/aux-var/0002.wild}} +a\\:b: ${lookup{a\\:b}nwildlsearch{DIR/aux-var/TESTNUM.wild}} +a\\:Xb: ${lookup{a\\:Xb}nwildlsearch{DIR/aux-var/TESTNUM.wild}} # Some tests of case-(in)dependence -.MiXeD-CD: ${lookup{MiXeD-CD}nwildlsearch{DIR/aux-var/0002.wild}{$value}{NOT FOUND}} -.MixeD-CD: ${lookup{MixeD-CD}nwildlsearch{DIR/aux-var/0002.wild}{$value}{NOT FOUND}} -.MiXeD-Ncd: ${lookup{MiXeD-Ncd}nwildlsearch{DIR/aux-var/0002.wild}{$value}{NOT FOUND}} -.MixeD-Ncd: ${lookup{MixeD-Ncd}nwildlsearch{DIR/aux-var/0002.wild}{$value}{NOT FOUND}} +.MiXeD-CD: ${lookup{MiXeD-CD}nwildlsearch{DIR/aux-var/TESTNUM.wild}{$value}{NOT FOUND}} +.MixeD-CD: ${lookup{MixeD-CD}nwildlsearch{DIR/aux-var/TESTNUM.wild}{$value}{NOT FOUND}} +.MiXeD-Ncd: ${lookup{MiXeD-Ncd}nwildlsearch{DIR/aux-var/TESTNUM.wild}{$value}{NOT FOUND}} +.MixeD-Ncd: ${lookup{MixeD-Ncd}nwildlsearch{DIR/aux-var/TESTNUM.wild}{$value}{NOT FOUND}} # IP address (CIDR) lookups -1.2.3.4: ${lookup{1.2.3.4}iplsearch{DIR/aux-fixed/0002.iplsearch}} -1.2.3.5: ${lookup{1.2.3.5}iplsearch{DIR/aux-fixed/0002.iplsearch}} -1.2.3.5: ${lookup{1.2.3.5}iplsearch*{DIR/aux-fixed/0002.iplsearch}} -abcd::cdab: ${lookup{abcd::cdab}iplsearch{DIR/aux-fixed/0002.iplsearch}} -192.168.1.2: ${lookup{192.168.1.2}iplsearch{DIR/aux-fixed/0002.iplsearch}} -192.168.5.6: ${lookup{192.168.5.6}iplsearch{DIR/aux-fixed/0002.iplsearch}} -abcd:abcd:: ${lookup{abcd:abcd::}iplsearch{DIR/aux-fixed/0002.iplsearch}} -abcd:abcd:1:: ${lookup{abcd:abcd:1::}iplsearch{DIR/aux-fixed/0002.iplsearch}} -abcd:abcd::3 ${lookup{abcd:abcd::3}iplsearch{DIR/aux-fixed/0002.iplsearch}} -rhubarb ${lookup{rhubarb}iplsearch{DIR/aux-fixed/0002.iplsearch}} +1.2.3.4: ${lookup{1.2.3.4}iplsearch{DIR/aux-fixed/TESTNUM.iplsearch}} +1.2.3.5: ${lookup{1.2.3.5}iplsearch{DIR/aux-fixed/TESTNUM.iplsearch}} +1.2.3.5: ${lookup{1.2.3.5}iplsearch*{DIR/aux-fixed/TESTNUM.iplsearch}} +abcd::cdab: ${lookup{abcd::cdab}iplsearch{DIR/aux-fixed/TESTNUM.iplsearch}} +192.168.1.2: ${lookup{192.168.1.2}iplsearch{DIR/aux-fixed/TESTNUM.iplsearch}} +192.168.5.6: ${lookup{192.168.5.6}iplsearch{DIR/aux-fixed/TESTNUM.iplsearch}} +abcd:abcd:: ${lookup{abcd:abcd::}iplsearch{DIR/aux-fixed/TESTNUM.iplsearch}} +abcd:abcd:1:: ${lookup{abcd:abcd:1::}iplsearch{DIR/aux-fixed/TESTNUM.iplsearch}} +abcd:abcd::3 ${lookup{abcd:abcd::3}iplsearch{DIR/aux-fixed/TESTNUM.iplsearch}} +rhubarb ${lookup{rhubarb}iplsearch{DIR/aux-fixed/TESTNUM.iplsearch}} # Nested Lookups - style 1 -${lookup{${lookup{key1}lsearch{DIR/aux-fixed/0002.rec}{$value}{key1f}}}lsearch{DIR/aux-fixed/0002.rec}{$value}fail} -${lookup{${lookup{key3}lsearch{DIR/aux-fixed/0002.rec}{$value}{key1f}}}lsearch{DIR/aux-fixed/0002.rec}{$value}fail} +${lookup{${lookup{key1}lsearch{DIR/aux-fixed/TESTNUM.rec}{$value}{key1f}}}lsearch{DIR/aux-fixed/TESTNUM.rec}{$value}fail} +${lookup{${lookup{key3}lsearch{DIR/aux-fixed/TESTNUM.rec}{$value}{key1f}}}lsearch{DIR/aux-fixed/TESTNUM.rec}{$value}fail} # Nested Lookups - style 2 -${lookup{key1}lsearch{DIR/aux-fixed/0002.rec}{${lookup{$value}lsearch{DIR/aux-fixed/0002.rec}{$value}{failed for $value}}}{failed for key1}} -${lookup{key3}lsearch{DIR/aux-fixed/0002.rec}{${lookup{$value}lsearch{DIR/aux-fixed/0002.rec}{$value}{failed for $value}}}{failed for key1}} +${lookup{key1}lsearch{DIR/aux-fixed/TESTNUM.rec}{${lookup{$value}lsearch{DIR/aux-fixed/TESTNUM.rec}{$value}{failed for $value}}}{failed for key1}} +${lookup{key3}lsearch{DIR/aux-fixed/TESTNUM.rec}{${lookup{$value}lsearch{DIR/aux-fixed/TESTNUM.rec}{$value}{failed for $value}}}{failed for key1}} # Other nesting tests -${lookup{one}lsearch{DIR/aux-fixed/0002.alias1}{$value${lookup{one}lsearch{DIR/aux-fixed/0002.alias2}{,$value}}}{${lookup{one}lsearch{DIR/aux-fixed/0002.alias2}{$value}fail}}} -${lookup{two}lsearch{DIR/aux-fixed/0002.alias1}{$value${lookup{two}lsearch{DIR/aux-fixed/0002.alias2}{,$value}}}{${lookup{two}lsearch{DIR/aux-fixed/0002.alias2}{$value}fail}}} -${lookup{both}lsearch{DIR/aux-fixed/0002.alias1}{$value${lookup{both}lsearch{DIR/aux-fixed/0002.alias2}{,$value}}}{${lookup{both}lsearch{DIR/aux-fixed/0002.alias2}{$value}fail}}} -${lookup{neither}lsearch{DIR/aux-fixed/0002.alias1}{$value${lookup{neither}lsearch{DIR/aux-fixed/0002.alias2}{,$value}}}{${lookup{neither}lsearch{DIR/aux-fixed/0002.alias2}{$value}fail}}} +${lookup{one}lsearch{DIR/aux-fixed/TESTNUM.alias1}{$value${lookup{one}lsearch{DIR/aux-fixed/TESTNUM.alias2}{,$value}}}{${lookup{one}lsearch{DIR/aux-fixed/TESTNUM.alias2}{$value}fail}}} +${lookup{two}lsearch{DIR/aux-fixed/TESTNUM.alias1}{$value${lookup{two}lsearch{DIR/aux-fixed/TESTNUM.alias2}{,$value}}}{${lookup{two}lsearch{DIR/aux-fixed/TESTNUM.alias2}{$value}fail}}} +${lookup{both}lsearch{DIR/aux-fixed/TESTNUM.alias1}{$value${lookup{both}lsearch{DIR/aux-fixed/TESTNUM.alias2}{,$value}}}{${lookup{both}lsearch{DIR/aux-fixed/TESTNUM.alias2}{$value}fail}}} +${lookup{neither}lsearch{DIR/aux-fixed/TESTNUM.alias1}{$value${lookup{neither}lsearch{DIR/aux-fixed/TESTNUM.alias2}{,$value}}}{${lookup{neither}lsearch{DIR/aux-fixed/TESTNUM.alias2}{$value}fail}}} # Lookup quotes for standardly expected lookups @@ -794,26 +799,26 @@ toobig ${from_utf8:aĀd} # File insertion ${readfile} -${readfile{DIR/aux-fixed/0002.readfile}} -${readfile{DIR/aux-fixed/0002.readfile}{}} -${readfile{DIR/aux-fixed/0002.readfile}{:}} -${readfile{DIR/aux-fixed/0002.readfile}{ - }} +${readfile{DIR/aux-fixed/TESTNUM.readfile}} +${readfile{DIR/aux-fixed/TESTNUM.readfile}{}} +${readfile{DIR/aux-fixed/TESTNUM.readfile}{:}} +${readfile{DIR/aux-fixed/TESTNUM.readfile}{ - }} ${readfile{/non/exist/file}} ${if exists{/non/exist/file}{${readfile{/non/exist/file}}}{non-exist}} ->${readfile{DIR/aux-fixed/0002.readfile}{!}}\ +>${readfile{DIR/aux-fixed/TESTNUM.readfile}{!}}\ < # Calling a command -${run{DIR/aux-fixed/0002.runfile 0}} +${run{DIR/aux-fixed/TESTNUM.runfile 0}} rc=$runrc -${run{DIR/aux-fixed/0002.runfile 0}{1}{2}} +${run{DIR/aux-fixed/TESTNUM.runfile 0}{1}{2}} rc=$runrc -${run{DIR/aux-fixed/0002.runfile 0}{$value}{2}} +${run{DIR/aux-fixed/TESTNUM.runfile 0}{$value}{2}} rc=$runrc -${run{DIR/aux-fixed/0002.runfile 1}{$value}{2}} +${run{DIR/aux-fixed/TESTNUM.runfile 1}{$value}{2}} rc=$runrc -${run{DIR/aux-fixed/0002.runfile 1}{$value}{$value}} +${run{DIR/aux-fixed/TESTNUM.runfile 1}{$value}{$value}} rc=$runrc ${run{DIR/test-nonexist}{Y}{N}} rc=$runrc @@ -821,9 +826,9 @@ rc=$runrc rc=$runrc ${if eq{1}{2}{${run{/non/exist}}}{1!=2}} rc=$runrc -${run,preexpand {DIR/aux-fixed/0002.runfile 0}} +${run,preexpand {DIR/aux-fixed/TESTNUM.runfile 0}} rc=$runrc -${run{DIR/aux-fixed/0002.runfile ${quote:1}}{$value}{2}} +${run{DIR/aux-fixed/TESTNUM.runfile ${quote:1}}{$value}{2}} rc=$runrc # PRVS @@ -1006,6 +1011,7 @@ match: ${if match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} match: ${if match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail} ${if eq {1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}} match_address: ${if match_address{a.b.c}{a.b.c}{yes}{no}} +protected: ${expand:\N \N} **** exim -d-all+expand+noutf8 -be primary_hostname: $primary_hostname @@ -1013,6 +1019,7 @@ match: ${if match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} match: ${if match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail} ${if eq {1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}} match_address: ${if match_address{a.b.c}{a.b.c}{yes}{no}} +protected: ${expand:\N \N} **** # Sender host name and address etc, all unset exim -be @@ -1134,10 +1141,11 @@ Subject: =?iso-8859-8?Q?_here_we_go=3A_a_string_that_is_going_to_be_encoded=3A_i . quit **** -# Certain kind of error +# Bad IP addresses exim -d -be match_ip: 15 ${if match_ip{1.2.3.4}{1.2.3}} match_ip: 16 ${if match_ip{1.2.3.4}{1.2.3.4/abc}} +match_ip: 17 ${if match_ip{::1}{<; aaaa:bbbb}} **** # Operation of inlist and negated inlist exim -be diff --git a/test/scripts/0000-Basic/0035 b/test/scripts/0000-Basic/0035 index 147c8e7e2..3894de6fe 100644 --- a/test/scripts/0000-Basic/0035 +++ b/test/scripts/0000-Basic/0035 @@ -7,10 +7,11 @@ client 127.0.0.1 PORT_D ??? 220 ehlo rhu.barb ??? 250- -??? 250- -??? 250- -??? 250- -??? 250 +??? 250-SIZE +??? 250-LIMITS +??? 250-8BITMIME +??? 250-PIPELINING +??? 250 HELP mail from: ??? 250 rcpt to: @@ -68,6 +69,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 @@ -93,6 +95,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 diff --git a/test/scripts/0000-Basic/0038 b/test/scripts/0000-Basic/0038 index 4d87755a2..5f6fd60c3 100644 --- a/test/scripts/0000-Basic/0038 +++ b/test/scripts/0000-Basic/0038 @@ -7,7 +7,7 @@ data Here is some data. . quit -**** +**** exim -bh V4NET.9.8.7 ehlo test.ex mail from:<> @@ -16,7 +16,7 @@ data Here is some data. . quit -**** +**** exim -bh V4NET.9.8.7 -DRRATELIMIT=0/1h/per_conn/strict -DDRATELIMIT=0/1h/per_conn/strict ehlo test.ex mail from:<> diff --git a/test/scripts/0000-Basic/0121 b/test/scripts/0000-Basic/0121 index 85392b6a6..ce16b584a 100644 --- a/test/scripts/0000-Basic/0121 +++ b/test/scripts/0000-Basic/0121 @@ -43,8 +43,5 @@ mail from:<"a b"@localhost3> SIZE=1234 rset ehlo foo.bar mail from:"a b"@localhost4 SIZE=1234 -rset -ehlo foo.bar -mail from:<"a b"@localhost5> PRDR quit **** diff --git a/test/scripts/0000-Basic/0159 b/test/scripts/0000-Basic/0159 index b30ca90d6..252e85c9b 100644 --- a/test/scripts/0000-Basic/0159 +++ b/test/scripts/0000-Basic/0159 @@ -12,6 +12,7 @@ ehlo [HOSTIPV4] ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from:<> ??? 250 @@ -29,6 +30,7 @@ ehlo [IPV4:HOSTIPV4] ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from:<> ??? 250 @@ -46,6 +48,7 @@ ehlo HOSTIPV4 ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from:<> ??? 250 @@ -63,6 +66,7 @@ ehlo [V4NET.1.2.3] ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from:<> ??? 250 diff --git a/test/scripts/0000-Basic/0217 b/test/scripts/0000-Basic/0217 index db793b065..dceb1d2a9 100644 --- a/test/scripts/0000-Basic/0217 +++ b/test/scripts/0000-Basic/0217 @@ -1,4 +1,5 @@ # PIPELINING (client: errors, etc) +munge peer_terminated_conn need_ipv4 # server PORT_S diff --git a/test/scripts/0000-Basic/0249 b/test/scripts/0000-Basic/0249 index 2394cd76b..9196060c6 100644 --- a/test/scripts/0000-Basic/0249 +++ b/test/scripts/0000-Basic/0249 @@ -3,3 +3,21 @@ exim -brw User@a.domain **** exim -d-all+rewrite -brw User@c.domain **** +# +# +# +# Check logging for a malformed address being rewritten +exim -bh 127.0.0.1 +HELO tester +MAIL FROM: +RCPT TO: +DATA +Subject: test +From: someone@some.domain +Date: Tue, 2 Mar 1999 09:44:33 +0000 +Reply-To: a@b@c + +body +. +QUIT +**** diff --git a/test/scripts/0000-Basic/0282 b/test/scripts/0000-Basic/0282 index d19464e12..8015586ac 100644 --- a/test/scripts/0000-Basic/0282 +++ b/test/scripts/0000-Basic/0282 @@ -10,6 +10,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 @@ -30,6 +31,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 diff --git a/test/scripts/0000-Basic/0287 b/test/scripts/0000-Basic/0287 index 9aa9f52e2..8a260794e 100644 --- a/test/scripts/0000-Basic/0287 +++ b/test/scripts/0000-Basic/0287 @@ -7,11 +7,12 @@ client 127.0.0.1 PORT_D ??? 220 ehlo rhu.barb ??? 250- -??? 250- -??? 250- -??? 250- -??? 250- -??? 250 +??? 250-SIZE +??? 250-LIMITS +??? 250-8BITMIME +??? 250-ETRN +??? 250-PIPELINING +??? 250 HELP ETRN one ??? 250 ETRN one diff --git a/test/scripts/0000-Basic/0289 b/test/scripts/0000-Basic/0289 index 2483b3706..f768b80d0 100644 --- a/test/scripts/0000-Basic/0289 +++ b/test/scripts/0000-Basic/0289 @@ -13,3 +13,14 @@ From: me Body . **** +# +# recipients_max should be expanded (here, for non-SMTP) +exim -DDYNAMIC_OPTION -odi userx usery +From: me +. +**** +1 +exim -odi -DDYNAMIC_OPTION userx usery userz +From: me +. +**** diff --git a/test/scripts/0000-Basic/0300 b/test/scripts/0000-Basic/0300 index 920f12b5d..abc8fd14c 100644 --- a/test/scripts/0000-Basic/0300 +++ b/test/scripts/0000-Basic/0300 @@ -18,6 +18,7 @@ ehlo abcd ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 rset\r\nmail from:\r\nrcpt to:\r\ndata ??? 250 @@ -49,6 +50,7 @@ ehlo abcd ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from:\r\nrcpt to: ??? 554 @@ -69,6 +71,7 @@ ehlo abcd ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 rset\r\nquit ??? 250 @@ -81,6 +84,7 @@ ehlo abcd ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 rset\r\nquit ??? 554 @@ -93,6 +97,7 @@ ehlo dis.able ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from:\r\nrcpt to:\r\ndata\r\nthe message\r\nsecond line . diff --git a/test/scripts/0000-Basic/0301 b/test/scripts/0000-Basic/0301 index 45a824285..d7a57c330 100644 --- a/test/scripts/0000-Basic/0301 +++ b/test/scripts/0000-Basic/0301 @@ -11,6 +11,7 @@ ehlo abcd\r\nmail from: ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 ??? 250 quit @@ -23,6 +24,7 @@ ehlo abcd ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from:\r\nrcpt to:\r\ndata ??? 250 @@ -47,6 +49,7 @@ ehlo en.force ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from:\r\nrcpt to:\r\ndata\r\nthe message . diff --git a/test/scripts/0000-Basic/0458 b/test/scripts/0000-Basic/0458 index 062dec500..6e55ba08f 100644 --- a/test/scripts/0000-Basic/0458 +++ b/test/scripts/0000-Basic/0458 @@ -10,6 +10,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 @@ -44,6 +45,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 550 @@ -78,6 +80,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 @@ -120,6 +123,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 rcpt to: ??? 503 diff --git a/test/scripts/0000-Basic/0460 b/test/scripts/0000-Basic/0460 index 953641b10..014871c06 100644 --- a/test/scripts/0000-Basic/0460 +++ b/test/scripts/0000-Basic/0460 @@ -10,6 +10,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 diff --git a/test/scripts/0000-Basic/0475 b/test/scripts/0000-Basic/0475 index 5008c8768..05f3a70e4 100644 --- a/test/scripts/0000-Basic/0475 +++ b/test/scripts/0000-Basic/0475 @@ -4,5 +4,7 @@ helo test mail from:<> rcpt to: rcpt to: +rcpt to: +rcpt to: quit **** diff --git a/test/scripts/0000-Basic/0502 b/test/scripts/0000-Basic/0502 index 1c0bc6afc..e51ac277d 100644 --- a/test/scripts/0000-Basic/0502 +++ b/test/scripts/0000-Basic/0502 @@ -36,6 +36,7 @@ EHLO test.ex ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 HELP QUIT ??? 221 diff --git a/test/scripts/0000-Basic/0547 b/test/scripts/0000-Basic/0547 index a645802a1..df409eac2 100644 --- a/test/scripts/0000-Basic/0547 +++ b/test/scripts/0000-Basic/0547 @@ -19,6 +19,7 @@ client 127.0.0.1 PORT_D ehlo x.y.z ??? 250 ??? 250 +??? 250- ??? 250 ??? 250 ??? 250 @@ -33,6 +34,7 @@ ehlo x.y.z ??? 250 ??? 250 ??? 250 +??? 250- ??? 250 ??? 250 MAIL FROM:<> diff --git a/test/scripts/0000-Basic/0549 b/test/scripts/0000-Basic/0549 index 4126ae73f..5eda56613 100644 --- a/test/scripts/0000-Basic/0549 +++ b/test/scripts/0000-Basic/0549 @@ -9,6 +9,7 @@ ehlo abcd ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 quit ??? 221 @@ -20,6 +21,7 @@ ehlo abcd ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 quit ??? 221 diff --git a/test/scripts/0000-Basic/0556 b/test/scripts/0000-Basic/0556 index 2283c69b0..fead086d4 100644 --- a/test/scripts/0000-Basic/0556 +++ b/test/scripts/0000-Basic/0556 @@ -14,6 +14,7 @@ ehlo abcd ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 rset\r\nmail from:\r\nrcpt to:\r\ndata +++ 1 @@ -35,6 +36,7 @@ ehlo abcd ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: +++ 1 @@ -47,6 +49,7 @@ ehlo abcd ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 diff --git a/test/scripts/0000-Basic/0559 b/test/scripts/0000-Basic/0559 index 7ebc64d34..8a68c708c 100644 --- a/test/scripts/0000-Basic/0559 +++ b/test/scripts/0000-Basic/0559 @@ -10,6 +10,7 @@ ehlo abcd ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from:\r\nrcpt to:\r\ndata ??? 250 diff --git a/test/scripts/0000-Basic/0562 b/test/scripts/0000-Basic/0562 index b829dff30..9b089681e 100644 --- a/test/scripts/0000-Basic/0562 +++ b/test/scripts/0000-Basic/0562 @@ -10,6 +10,7 @@ ehlo abcd ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from:\r\nrcpt to:\r\ndata ??? 250 @@ -56,6 +57,7 @@ ehlo abcd ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from:\r\nrcpt to:\r\ndata ??? 250 diff --git a/test/scripts/0000-Basic/0579 b/test/scripts/0000-Basic/0579 index 7a5f3ff6f..5c50c8a85 100644 --- a/test/scripts/0000-Basic/0579 +++ b/test/scripts/0000-Basic/0579 @@ -10,6 +10,7 @@ EHLO test ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 HELP MAIL FROM:<> ??? 250 diff --git a/test/scripts/0000-Basic/0581 b/test/scripts/0000-Basic/0581 index a2053a8d4..1253ddd27 100644 --- a/test/scripts/0000-Basic/0581 +++ b/test/scripts/0000-Basic/0581 @@ -29,6 +29,7 @@ EHLO test.ex ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 MAIL FROM: ??? 250 @@ -77,6 +78,7 @@ EHLO test.ex ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 MAIL FROM: ??? 250 @@ -139,6 +141,7 @@ EHLO test.ex ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 MAIL FROM: ??? 250 @@ -205,6 +208,7 @@ EHLO test.ex ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 MAIL FROM: ??? 250 @@ -254,6 +258,7 @@ EHLO test.ex ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 MAIL FROM: ??? 250 diff --git a/test/scripts/0000-Basic/0583 b/test/scripts/0000-Basic/0583 index 8cea367eb..cb5d18926 100644 --- a/test/scripts/0000-Basic/0583 +++ b/test/scripts/0000-Basic/0583 @@ -7,6 +7,7 @@ client 127.0.0.1 PORT_D EHLO test ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250 HELP diff --git a/test/scripts/0000-Basic/0606 b/test/scripts/0000-Basic/0606 index 96d598834..5bac064d3 100644 --- a/test/scripts/0000-Basic/0606 +++ b/test/scripts/0000-Basic/0606 @@ -1,5 +1,5 @@ # router variables -exim -odi a +exim -odi a bad Subject: foo body diff --git a/test/scripts/0000-Basic/0611 b/test/scripts/0000-Basic/0611 index 40d08fcf1..d032d6616 100644 --- a/test/scripts/0000-Basic/0611 +++ b/test/scripts/0000-Basic/0611 @@ -1,4 +1,4 @@ -# max_parallel on transport +# max_parallel on transport; exiqgrep need_ipv4 # # Remote transport: diff --git a/test/scripts/0000-Basic/0612 b/test/scripts/0000-Basic/0612 index c5e3bfba1..f9f283dcb 100644 --- a/test/scripts/0000-Basic/0612 +++ b/test/scripts/0000-Basic/0612 @@ -8,6 +8,7 @@ client 127.0.0.1 PORT_D EHLO testclient ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250 HELP **** killdaemon @@ -23,6 +24,7 @@ client HOSTIPV4 PORT_D EHLO testclient ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-DSN ??? 250 HELP MAIL FROM: @@ -50,6 +52,7 @@ client HOSTIPV4 PORT_D EHLO testclient ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-DSN ??? 250 HELP MAIL FROM: @@ -84,6 +87,7 @@ client HOSTIPV4 PORT_D EHLO testclient ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-DSN ??? 250 HELP MAIL FROM: @@ -121,6 +125,7 @@ client HOSTIPV4 PORT_D EHLO testclient ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-DSN ??? 250 HELP MAIL FROM: @@ -146,6 +151,7 @@ client HOSTIPV4 PORT_D EHLO testclient ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-DSN ??? 250 HELP MAIL FROM: @@ -186,6 +192,7 @@ client HOSTIPV4 PORT_D EHLO testclient ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-DSN ??? 250 HELP MAIL FROM: diff --git a/test/scripts/0000-Basic/0615 b/test/scripts/0000-Basic/0615 index 1712c888f..b6f2663d7 100644 --- a/test/scripts/0000-Basic/0615 +++ b/test/scripts/0000-Basic/0615 @@ -2,10 +2,14 @@ # Exim test configuration 0604 # echo Note this takes 3 minutes to run +# Build with -DMEASURE_TIMING if a performance test is wanted, +# to lose the deliberate testsuite-mode delays. +# Also, if a real 2-phase qrun is wanted, lose the queue_run_in_order # exim -DSERVER=server -bd -oX PORT_D **** # +# Queue up 80 messages exim -bs helo test mail from:ralph@dustyshoes.tld @@ -665,4 +669,3 @@ exim -qq # killdaemon no_msglog_check - diff --git a/test/scripts/0000-Basic/0628 b/test/scripts/0000-Basic/0628 index 3748e075f..1c76f0735 100644 --- a/test/scripts/0000-Basic/0628 +++ b/test/scripts/0000-Basic/0628 @@ -12,6 +12,7 @@ EHLO test.ex ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 MAIL FROM: ??? 250 @@ -41,6 +42,7 @@ EHLO test.ex ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 MAIL FROM: ??? 250 diff --git a/test/scripts/0000-Basic/0629 b/test/scripts/0000-Basic/0629 index 8ca41aeae..14a3f9ce6 100644 --- a/test/scripts/0000-Basic/0629 +++ b/test/scripts/0000-Basic/0629 @@ -10,6 +10,7 @@ EHLO test.ex ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 MAIL FROM: ??? 250 diff --git a/test/scripts/0000-Basic/0630 b/test/scripts/0000-Basic/0630 index fff689051..7228d94c4 100644 --- a/test/scripts/0000-Basic/0630 +++ b/test/scripts/0000-Basic/0630 @@ -10,6 +10,7 @@ EHLO test.ex ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 MAIL FROM: ??? 250 diff --git a/test/scripts/0000-Basic/0631 b/test/scripts/0000-Basic/0631 index 32d6dc0fc..1adb80971 100644 --- a/test/scripts/0000-Basic/0631 +++ b/test/scripts/0000-Basic/0631 @@ -10,6 +10,7 @@ EHLO test.ex ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 MAIL FROM: ??? 250 diff --git a/test/scripts/0000-Basic/0633 b/test/scripts/0000-Basic/0633 index c4afc2c97..070010d0f 100644 --- a/test/scripts/0000-Basic/0633 +++ b/test/scripts/0000-Basic/0633 @@ -1,5 +1,6 @@ -# Log buffer fill +# Log buffer overfill # +# Feed using an ACL logwrite exim -bh V4NET.0.0.0 helo test mail from:<> @@ -7,3 +8,951 @@ rcpt to: data . **** +# +# Feed using log received_recipients +exim -bh V4NET.0.0.0 +helo test +mail from:<> +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +rcpt to: +data +. +**** diff --git a/test/scripts/0000-Basic/0637 b/test/scripts/0000-Basic/0637 new file mode 100644 index 000000000..7ed9b3cbe --- /dev/null +++ b/test/scripts/0000-Basic/0637 @@ -0,0 +1,18 @@ +# mail before ehlo +exim -bd -DSERVER=server -oX PORT_D +**** +client 127.0.0.1 PORT_D +??? 220 +mail from: +??? 503 HELO or EHLO required +mail from: +??? 503 +mail from: +??? 503 +mail from: +??? 503- +??? 503 Too many +???* +**** +killdaemon +no_stderr_check diff --git a/test/scripts/0000-Basic/0699 b/test/scripts/0000-Basic/0699 index 5dbcd38b8..7bc0ecbe2 100644 --- a/test/scripts/0000-Basic/0699 +++ b/test/scripts/0000-Basic/0699 @@ -1,6 +1,6 @@ # message ID format manipulation # This testcase is for the 4.97 message-id format changeover -# should can be dropped after a few further releases. +# should be dropped after a few further releases. # # Ensure spooldir exists sudo mkdir -p DIR/spool/input @@ -9,6 +9,8 @@ sudo mkdir -p DIR/spool/input sudo cp DIR/aux-fixed/TESTNUM/* DIR/spool/input/ sudo chown -R EXIMUSER:EXIMGROUP DIR/spool/input/ sudo chmod -R 640 DIR/spool/input/* +exim -bp +**** exim -q **** # @@ -39,3 +41,4 @@ exim -q # ### done no_msglog_check +no_stderr_check diff --git a/test/scripts/0000-Basic/0900 b/test/scripts/0000-Basic/0900 index 4edc82952..49959a96f 100644 --- a/test/scripts/0000-Basic/0900 +++ b/test/scripts/0000-Basic/0900 @@ -373,6 +373,39 @@ quit ??? 221 **** # +# Test for smtp-smuggling. Accepting only one message is good; two is bad. +client 127.0.0.1 PORT_D +??? 220 +ehlo smuggler +??? 250- +??? 250-SIZE +??? 250-8BITMIME +??? 250-PIPELINING +??? 250-CHUNKING +??? 250 HELP +MAIL FROM: +??? 250 +RCPT TO: +??? 250 +DATA +??? 354 +Subject: test of smuggled smtp + +This is body for initial message +The next line is a bogus end-of-data attempt, followed by a try at a smuggled message: +>>> .\n +mail from: +rcpt to: +bdat 86 last +Subject: send me all your money! + +All your base are belong to us. Send Bitcoins. +QUIT +. +??? 250 +QUIT +??? 221 +**** # killdaemon no_msglog_check diff --git a/test/scripts/0000-Basic/0904 b/test/scripts/0000-Basic/0904 index b505836d3..3b5a79dac 100644 --- a/test/scripts/0000-Basic/0904 +++ b/test/scripts/0000-Basic/0904 @@ -1,6 +1,4 @@ -# CHUNKING transmission, short messages -# -# Start with non-pipelined cases +# CHUNKING transmission, short messages, no PIPELINING # # Basic short message server PORT_S @@ -165,249 +163,6 @@ RCPT TO: DATA Subject: foo -data -. -QUIT -**** -# -# -################################################### -# -# Pipelined cases -# -# Basic short message -server PORT_S -220 Greetings -EHLO -250-Hello there -250-PIPELINING -250 CHUNKING -MAIL FROM -RCPT TO -BDAT 345 LAST -*data 345 -250 OK mail -250 OK rcpt -250 OK bdat -QUIT -225 OK -*eof -**** -sudo exim -odf -bS -EHLO test -MAIL FROM: -RCPT TO: -DATA -Subject: foo - -data -. -QUIT -**** -# -# Error case: server wrongly expected more data, client gets timeout for data-ack -# XXX This is a problem with data/quit pipelining. The succeeding SMTP command cannot -# be distinguished from the data, by the errroneous server. -# Of course, we could avoid such pipelining on the client side, when BDAT is used. -# But - is this any worse than a server failing to spot the data-dot under DATA? -# I think not; both are culpable, and there is only so much the client can do. -#server PORT_S -#220 Greetings -#EHLO -#250-Hello there -#250-PIPELINING -#250 CHUNKING -#MAIL FROM -#RCPT TO -#BDAT 345 LAST -#*data 346 -#250 good mail cmd -#**** -#sudo exim -odf -bS -#EHLO test -#MAIL FROM: -#RCPT TO: -#DATA -#Subject: foo -# -#data -#. -#QUIT -#**** -# -# Error case: server wrongly expected less data -# client get the data-ack, sends quit - but server -# sees a munged quit due to the outstanding data tail -server PORT_S -220 Greetings -EHLO -250-Hello there -250-PIPELINING -250 CHUNKING -MAIL FROM -RCPT TO -BDAT 345 LAST -*data 344 -250 OK mail -250 OK rcpt -250 OK bdat -QUIT -225 OK -**** -sudo exim -odf -bS -EHLO test -MAIL FROM: -RCPT TO: -DATA -Subject: foo - -data -. -QUIT -**** -# -# server rejects MAIL cmd -# transport coding does not handle the possible RSET-and-another transaction, -# but always QUITs -server PORT_S -220 Greetings -EHLO -250-Hello there -250-PIPELINING -250 CHUNKING -MAIL FROM -RCPT TO -BDAT 345 LAST -*data 345 -550 unacceptable mail-from -550 rcpt ungood lacking mail-from -500 bdat ungood lacking mail-from -QUIT -225 OK -**** -sudo exim -odf -bS -EHLO test -MAIL FROM: -RCPT TO: -DATA -Subject: foo - -data -. -QUIT -**** -# -# server tmp-rejects MAIL cmd -server PORT_S -220 Greetings -EHLO -250-Hello there -250-PIPELINING -250 CHUNKING -MAIL FROM -RCPT TO -BDAT 346 LAST -*data 346 -450 greylisted mail-from -550 rcpt ungood lacking mail-from -500 bdat ungood lacking mail-from -QUIT -225 OK -**** -sudo exim -odf -bS -EHLO test -MAIL FROM: -RCPT TO: -DATA -Subject: foo - -data -. -QUIT -**** -# -# server rejects RCPT cmd -server PORT_S -220 Greetings -EHLO -250-Hello there -250-PIPELINING -250 CHUNKING -MAIL FROM -RCPT TO -BDAT 345 LAST -*data 345 -250 OK mail -550 no such recipient -500 oops bdat -QUIT -225 OK -**** -sudo exim -odf -bS -EHLO test -MAIL FROM: -RCPT TO: -DATA -Subject: foo - -data -. -QUIT -**** -# -# server rejects BDAT cmd -server PORT_S -220 Greetings -EHLO -250-Hello there -250-PIPELINING -250 CHUNKING -MAIL FROM -RCPT TO -BDAT 345 LAST -*data 345 -250 OK mail -250 OK rcpt -500 oops bdat -QUIT -225 OK -**** -sudo exim -odf -bS -EHLO test -MAIL FROM: -RCPT TO: -DATA -Subject: foo - -data -. -QUIT -**** -# -# server tmp-rejects BDAT cmd -server PORT_S -220 Greetings -EHLO -250-Hello there -250-PIPELINING -250 CHUNKING -MAIL FROM -RCPT TO -BDAT 345 LAST -*data 345 -250 OK mail -250 OK rcpt -400 not right now bdat -QUIT -225 OK -**** -sudo exim -odf -bS -EHLO test -MAIL FROM: -RCPT TO: -DATA -Subject: foo - data . QUIT diff --git a/test/scripts/0000-Basic/0905 b/test/scripts/0000-Basic/0905 index a8c08eaaa..390b19c2e 100644 --- a/test/scripts/0000-Basic/0905 +++ b/test/scripts/0000-Basic/0905 @@ -1,252 +1,70 @@ -# CHUNKING transmission, long messages +# CHUNKING transmission, short messages, PIPELINING # -# Start with non-pipelined cases +# Pipelined cases # -# Basic long message +# Basic short message server PORT_S 220 Greetings EHLO 250-Hello there +250-PIPELINING 250 CHUNKING MAIL FROM -250 OK RCPT TO -250 OK -BDAT 311 -*data 311 -250 OK nonlast bdat -BDAT 8380 LAST -*data 8380 +BDAT 345 LAST +*data 345 +250 OK mail +250 OK rcpt 250 OK bdat QUIT 225 OK *eof **** sudo exim -odf -bS -EHLO -MAIL FROM: +EHLO test +MAIL FROM: RCPT TO: DATA Subject: foo -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -. -QUIT -**** -# -# -# server rejects BDAT cmd -server PORT_S -220 Greetings -EHLO -250-Hello there -250 CHUNKING -MAIL FROM -250 OK -RCPT TO -250 OK -BDAT 311 -*data 311 -500 oops bdat-nonlast -QUIT -225 OK -**** -sudo exim -odf -bS -EHLO -MAIL FROM: -RCPT TO: -DATA -Subject: foo - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +data . QUIT **** # +# Error case: server wrongly expected more data, client gets timeout for data-ack +# XXX This is a problem with data/quit pipelining. The succeeding SMTP command cannot +# be distinguished from the data, by the errroneous server. +# Of course, we could avoid such pipelining on the client side, when BDAT is used. +# But - is this any worse than a server failing to spot the data-dot under DATA? +# I think not; both are culpable, and there is only so much the client can do. +#server PORT_S +#220 Greetings +#EHLO +#250-Hello there +#250-PIPELINING +#250 CHUNKING +#MAIL FROM +#RCPT TO +#BDAT 345 LAST +#*data 346 +#250 good mail cmd +#**** +#sudo exim -odf -bS +#EHLO test +#MAIL FROM: +#RCPT TO: +#DATA +#Subject: foo # -################################################### -# -# Pipelined cases +#data +#. +#QUIT +#**** # -# Basic long message +# Error case: server wrongly expected less data +# client get the data-ack, sends quit - but server +# sees a munged quit due to the outstanding data tail server PORT_S 220 Greetings EHLO @@ -255,115 +73,22 @@ EHLO 250 CHUNKING MAIL FROM RCPT TO -BDAT 311 +BDAT 345 LAST +*data 344 250 OK mail 250 OK rcpt -*data 311 -250 OK nonlast bdat -BDAT 8380 LAST -*data 8380 250 OK bdat QUIT 225 OK -*eof **** sudo exim -odf -bS -EHLO -MAIL FROM: -RCPT TO: +EHLO test +MAIL FROM: +RCPT TO: DATA Subject: foo -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +data . QUIT **** @@ -371,7 +96,6 @@ QUIT # server rejects MAIL cmd # transport coding does not handle the possible RSET-and-another transaction, # but always QUITs -# server PORT_S 220 Greetings EHLO @@ -380,116 +104,27 @@ EHLO 250 CHUNKING MAIL FROM RCPT TO -BDAT 311 -*data 311 +BDAT 345 LAST +*data 345 550 unacceptable mail-from 550 rcpt ungood lacking mail-from -500 bdat (nonlast) ungood lacking mail-from +500 bdat ungood lacking mail-from QUIT 225 OK **** sudo exim -odf -bS -EHLO -MAIL FROM: -RCPT TO: +EHLO test +MAIL FROM: +RCPT TO: DATA Subject: foo -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +data . QUIT **** # -# server rejects RCPT cmd +# server tmp-rejects MAIL cmd server PORT_S 220 Greetings EHLO @@ -498,116 +133,27 @@ EHLO 250 CHUNKING MAIL FROM RCPT TO -BDAT 311 -*data 311 -250 OK mail -550 no such recipient -500 oops nonlast bdat - no rcpt +BDAT 346 LAST +*data 346 +450 greylisted mail-from +550 rcpt ungood lacking mail-from +500 bdat ungood lacking mail-from QUIT 225 OK **** sudo exim -odf -bS -EHLO -MAIL FROM: -RCPT TO: +EHLO test +MAIL FROM: +RCPT TO: DATA Subject: foo -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +data . QUIT **** # -# server rejects 1st RCPT cmd of two +# server rejects RCPT cmd server PORT_S 220 Greetings EHLO @@ -616,240 +162,62 @@ EHLO 250 CHUNKING MAIL FROM RCPT TO -RCPT TO -BDAT 295 -*data 295 +BDAT 345 LAST +*data 345 250 OK mail 550 no such recipient -250 good recipient -200 OK nonlast bdat -BDAT 8380 LAST -*data 8380 -250 OK bdat +500 oops bdat QUIT 225 OK **** sudo exim -odf -bS -EHLO -MAIL FROM: -RCPT TO: -RCPT TO: +EHLO test +MAIL FROM: +RCPT TO: DATA Subject: foo -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +data . QUIT **** # -# server rejects initial BDAT cmd -server PORT_S -220 Greetings -EHLO -250-Hello there -250-PIPELINING -250 CHUNKING -MAIL FROM -RCPT TO -BDAT 311 -*data 311 -250 OK mail -250 OK rcpt -500 oops nonlast bdat -QUIT -225 OK +# server rejects RCPT cmd, and immediately drops the TCP conn +sudo rm DIR/spool/db/retry +exim -bd -DSERVER=server -DRETRY2 -DSRV=tls -oX PORT_S **** -sudo exim -odf -bS -EHLO -MAIL FROM: -RCPT TO: +sudo exim -DRETRY2 -odf -bS +EHLO test +MAIL FROM: +RCPT TO: DATA Subject: foo - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 +BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 +BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 +BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 +BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 +BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 +BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 +BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 +BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 +BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 +BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 +BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 +BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 +BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 +BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 +BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 +BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 +BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 + +data . QUIT **** +killdaemon # -# server rejects final BDAT cmd +# server rejects BDAT cmd server PORT_S 220 Greetings EHLO @@ -858,119 +226,27 @@ EHLO 250 CHUNKING MAIL FROM RCPT TO -BDAT 311 -*data 311 +BDAT 345 LAST +*data 345 250 OK mail 250 OK rcpt -250 OK nonlast bdat -BDAT 8380 LAST -*data 8380 500 oops bdat QUIT 225 OK **** sudo exim -odf -bS -EHLO -MAIL FROM: -RCPT TO: +EHLO test +MAIL FROM: +RCPT TO: DATA Subject: foo -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +data . QUIT **** # -# server temp-rejects initial BDAT cmd +# server tmp-rejects BDAT cmd server PORT_S 220 Greetings EHLO @@ -979,238 +255,22 @@ EHLO 250 CHUNKING MAIL FROM RCPT TO -BDAT 311 -*data 311 +BDAT 345 LAST +*data 345 250 OK mail 250 OK rcpt -400 oops nonlast bdat +400 not right now bdat QUIT 225 OK **** sudo exim -odf -bS -EHLO -MAIL FROM: -RCPT TO: -DATA -Subject: foo - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -. -QUIT -**** -# -# -# message with long headers -server PORT_S -220 Greetings -EHLO -250-Hello there -250-PIPELINING -250 CHUNKING -MAIL FROM -RCPT TO -BDAT 8191 -250 OK mail -250 OK rcpt -*data 8191 -250 OK nonlast bdat -BDAT 823 LAST -*data 823 -250 OK bdat -QUIT -225 OK -*eof -**** -sudo exim -odf -bS -EHLO -MAIL FROM: -RCPT TO: +EHLO test +MAIL FROM: +RCPT TO: DATA Subject: foo -X-long_hdr: 0 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 2 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 3 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 4 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 5 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 6 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 7 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 8 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -body -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +data . QUIT **** diff --git a/test/scripts/0000-Basic/0906 b/test/scripts/0000-Basic/0906 index 18ab5bb54..a8c08eaaa 100644 --- a/test/scripts/0000-Basic/0906 +++ b/test/scripts/0000-Basic/0906 @@ -1,23 +1,277 @@ -# CHUNKING, spool_wireformat +# CHUNKING transmission, long messages # -exim -bd -DSERVER=server -oX PORT_D:PORT_S -**** +# Start with non-pipelined cases # # Basic long message -client 127.0.0.1 PORT_S -??? 220 -EHLO test.com -??? 250- -??? 250- -??? 250- -??? 250- -??? 250- -??? 250 +server PORT_S +220 Greetings +EHLO +250-Hello there +250 CHUNKING +MAIL FROM +250 OK +RCPT TO +250 OK +BDAT 311 +*data 311 +250 OK nonlast bdat +BDAT 8380 LAST +*data 8380 +250 OK bdat +QUIT +225 OK +*eof +**** +sudo exim -odf -bS +EHLO MAIL FROM: -??? 250 RCPT TO: -??? 250 -BDAT 8408 LAST +DATA +Subject: foo + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +. +QUIT +**** +# +# +# server rejects BDAT cmd +server PORT_S +220 Greetings +EHLO +250-Hello there +250 CHUNKING +MAIL FROM +250 OK +RCPT TO +250 OK +BDAT 311 +*data 311 +500 oops bdat-nonlast +QUIT +225 OK +**** +sudo exim -odf -bS +EHLO +MAIL FROM: +RCPT TO: +DATA +Subject: foo + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +. +QUIT +**** +# +# +################################################### +# +# Pipelined cases +# +# Basic long message +server PORT_S +220 Greetings +EHLO +250-Hello there +250-PIPELINING +250 CHUNKING +MAIL FROM +RCPT TO +BDAT 311 +250 OK mail +250 OK rcpt +*data 311 +250 OK nonlast bdat +BDAT 8380 LAST +*data 8380 +250 OK bdat +QUIT +225 OK +*eof +**** +sudo exim -odf -bS +EHLO +MAIL FROM: +RCPT TO: +DATA Subject: foo 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 @@ -110,15 +364,856 @@ Subject: foo 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -.dot -tail -??? 250- -??? 250 +. QUIT **** # -sleep 1 -killdaemon -exim -q +# server rejects MAIL cmd +# transport coding does not handle the possible RSET-and-another transaction, +# but always QUITs +# +server PORT_S +220 Greetings +EHLO +250-Hello there +250-PIPELINING +250 CHUNKING +MAIL FROM +RCPT TO +BDAT 311 +*data 311 +550 unacceptable mail-from +550 rcpt ungood lacking mail-from +500 bdat (nonlast) ungood lacking mail-from +QUIT +225 OK **** +sudo exim -odf -bS +EHLO +MAIL FROM: +RCPT TO: +DATA +Subject: foo + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +. +QUIT +**** +# +# server rejects RCPT cmd +server PORT_S +220 Greetings +EHLO +250-Hello there +250-PIPELINING +250 CHUNKING +MAIL FROM +RCPT TO +BDAT 311 +*data 311 +250 OK mail +550 no such recipient +500 oops nonlast bdat - no rcpt +QUIT +225 OK +**** +sudo exim -odf -bS +EHLO +MAIL FROM: +RCPT TO: +DATA +Subject: foo + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +. +QUIT +**** +# +# server rejects 1st RCPT cmd of two +server PORT_S +220 Greetings +EHLO +250-Hello there +250-PIPELINING +250 CHUNKING +MAIL FROM +RCPT TO +RCPT TO +BDAT 295 +*data 295 +250 OK mail +550 no such recipient +250 good recipient +200 OK nonlast bdat +BDAT 8380 LAST +*data 8380 +250 OK bdat +QUIT +225 OK +**** +sudo exim -odf -bS +EHLO +MAIL FROM: +RCPT TO: +RCPT TO: +DATA +Subject: foo + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +. +QUIT +**** +# +# server rejects initial BDAT cmd +server PORT_S +220 Greetings +EHLO +250-Hello there +250-PIPELINING +250 CHUNKING +MAIL FROM +RCPT TO +BDAT 311 +*data 311 +250 OK mail +250 OK rcpt +500 oops nonlast bdat +QUIT +225 OK +**** +sudo exim -odf -bS +EHLO +MAIL FROM: +RCPT TO: +DATA +Subject: foo + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +. +QUIT +**** +# +# server rejects final BDAT cmd +server PORT_S +220 Greetings +EHLO +250-Hello there +250-PIPELINING +250 CHUNKING +MAIL FROM +RCPT TO +BDAT 311 +*data 311 +250 OK mail +250 OK rcpt +250 OK nonlast bdat +BDAT 8380 LAST +*data 8380 +500 oops bdat +QUIT +225 OK +**** +sudo exim -odf -bS +EHLO +MAIL FROM: +RCPT TO: +DATA +Subject: foo + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +. +QUIT +**** +# +# server temp-rejects initial BDAT cmd +server PORT_S +220 Greetings +EHLO +250-Hello there +250-PIPELINING +250 CHUNKING +MAIL FROM +RCPT TO +BDAT 311 +*data 311 +250 OK mail +250 OK rcpt +400 oops nonlast bdat +QUIT +225 OK +**** +sudo exim -odf -bS +EHLO +MAIL FROM: +RCPT TO: +DATA +Subject: foo + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +. +QUIT +**** +# +# +# message with long headers +server PORT_S +220 Greetings +EHLO +250-Hello there +250-PIPELINING +250 CHUNKING +MAIL FROM +RCPT TO +BDAT 8191 +250 OK mail +250 OK rcpt +*data 8191 +250 OK nonlast bdat +BDAT 823 LAST +*data 823 +250 OK bdat +QUIT +225 OK +*eof +**** +sudo exim -odf -bS +EHLO +MAIL FROM: +RCPT TO: +DATA +Subject: foo +X-long_hdr: 0 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 2 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 3 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 4 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 5 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 6 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 7 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 8 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +body +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +. +QUIT +**** +# +# no_msglog_check diff --git a/test/scripts/0000-Basic/0907 b/test/scripts/0000-Basic/0907 deleted file mode 100644 index 341a63f48..000000000 --- a/test/scripts/0000-Basic/0907 +++ /dev/null @@ -1,4 +0,0 @@ -# check for BOM in an included config file (0908) -# -1 -exim -bP config diff --git a/test/scripts/0000-Basic/0908 b/test/scripts/0000-Basic/0908 deleted file mode 120000 index 8cc1a8c6e..000000000 --- a/test/scripts/0000-Basic/0908 +++ /dev/null @@ -1 +0,0 @@ -0907 \ No newline at end of file diff --git a/test/scripts/0000-Basic/0908 b/test/scripts/0000-Basic/0908 new file mode 100644 index 000000000..677b8e10a --- /dev/null +++ b/test/scripts/0000-Basic/0908 @@ -0,0 +1,125 @@ +# CHUNKING, spool_wireformat +# +exim -bd -DSERVER=server -oX PORT_D:PORT_S +**** +# +# Basic long message +client 127.0.0.1 PORT_S +??? 220 +EHLO test.com +??? 250- +??? 250- +??? 250- +??? 250- +??? 250- +??? 250- +??? 250 +MAIL FROM: +??? 250 +RCPT TO: +??? 250 +BDAT 8408 LAST +Subject: foo + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 + +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +.dot +tail +??? 250- +??? 250 +QUIT +**** +# +sleep 1 +killdaemon +exim -q +**** +no_msglog_check diff --git a/test/scripts/0000-Basic/0909 b/test/scripts/0000-Basic/0909 new file mode 100644 index 000000000..522e06cb0 --- /dev/null +++ b/test/scripts/0000-Basic/0909 @@ -0,0 +1,142 @@ +# CHUNKING and PIPELINING of QUIT +need_ipv4 +# +# Chunking Baseline: no error. Check the QUIT arrived befre we ack message-data +server PORT_D +220 Server ready +EHLO +250-hi there +250-PIPELINING +250-CHUNKING +250 OK +MAIL FROM +RCPT TO +BDAT 329 LAST +250 OK mail +250 OK rcpt +*data 329 +QUIT +250 OK chunked message data +221 Closing connection +**** +sudo exim -d-all+transport -odi -bs +helo tester +mail from: +rcpt to: +data +. +quit +**** +# +# QUIT-pipeliining should not be done when PIPELINING not advertised +server PORT_D +220 Server ready +EHLO +250-hi there +250-CHUNKING +250 OK +MAIL FROM +250 OK mail +RCPT TO +250 OK rcpt +BDAT 331 LAST +*data 331 +250 OK chunked message data +QUIT +221 Closing connection +**** +sudo exim -d-all+transport -odi -bs +helo tester +mail from: +rcpt to: +data +. +quit +**** +# +# Temp-error response to message-data +# Check specifically for a close, and no repeated command +# Also check Exim's list of commands sent +server PORT_D +220 Server ready +EHLO +250-hi there +250-PIPELINING +250-CHUNKING +250 OK +MAIL FROM +250 OK mail +RCPT TO +250 OK rcpt +BDAT 335 LAST +*data 335 +QUIT +451 Service not available +221 Closing connection +*eof +**** +sudo exim -d-all+transport -odi -bs +helo tester +mail from: +rcpt to: +data +. +quit +**** +exim -Mrm $msg1 +**** +# +# Perm-error response to message-data +server PORT_D +220 Server ready +EHLO +250-hi there +250-PIPELINING +250-CHUNKING +250 OK +MAIL FROM +250 OK mail +RCPT TO +250 OK rcpt +BDAT 335 LAST +*data 335 +QUIT +550 content rejected +221 Closing connection +*eof +**** +sudo exim -d-all+transport -odi -bs +helo tester +mail from: +rcpt to: +data +. +quit +**** +# +# Channel-close response to message-data +server PORT_D +220 Server ready +EHLO +250-hi there +250-PIPELINING +250-CHUNKING +250 OK +MAIL FROM +250 OK mail +RCPT TO +250 OK rcpt +BDAT 333 LAST +*data 333 +>*eof +**** +sudo exim -d-all+transport -odi -bs +helo tester +mail from: +rcpt to: +data +. +quit +**** +exim -Mrm $msg1 +**** diff --git a/test/scripts/0000-Basic/0911 b/test/scripts/0000-Basic/0911 deleted file mode 100644 index 522e06cb0..000000000 --- a/test/scripts/0000-Basic/0911 +++ /dev/null @@ -1,142 +0,0 @@ -# CHUNKING and PIPELINING of QUIT -need_ipv4 -# -# Chunking Baseline: no error. Check the QUIT arrived befre we ack message-data -server PORT_D -220 Server ready -EHLO -250-hi there -250-PIPELINING -250-CHUNKING -250 OK -MAIL FROM -RCPT TO -BDAT 329 LAST -250 OK mail -250 OK rcpt -*data 329 -QUIT -250 OK chunked message data -221 Closing connection -**** -sudo exim -d-all+transport -odi -bs -helo tester -mail from: -rcpt to: -data -. -quit -**** -# -# QUIT-pipeliining should not be done when PIPELINING not advertised -server PORT_D -220 Server ready -EHLO -250-hi there -250-CHUNKING -250 OK -MAIL FROM -250 OK mail -RCPT TO -250 OK rcpt -BDAT 331 LAST -*data 331 -250 OK chunked message data -QUIT -221 Closing connection -**** -sudo exim -d-all+transport -odi -bs -helo tester -mail from: -rcpt to: -data -. -quit -**** -# -# Temp-error response to message-data -# Check specifically for a close, and no repeated command -# Also check Exim's list of commands sent -server PORT_D -220 Server ready -EHLO -250-hi there -250-PIPELINING -250-CHUNKING -250 OK -MAIL FROM -250 OK mail -RCPT TO -250 OK rcpt -BDAT 335 LAST -*data 335 -QUIT -451 Service not available -221 Closing connection -*eof -**** -sudo exim -d-all+transport -odi -bs -helo tester -mail from: -rcpt to: -data -. -quit -**** -exim -Mrm $msg1 -**** -# -# Perm-error response to message-data -server PORT_D -220 Server ready -EHLO -250-hi there -250-PIPELINING -250-CHUNKING -250 OK -MAIL FROM -250 OK mail -RCPT TO -250 OK rcpt -BDAT 335 LAST -*data 335 -QUIT -550 content rejected -221 Closing connection -*eof -**** -sudo exim -d-all+transport -odi -bs -helo tester -mail from: -rcpt to: -data -. -quit -**** -# -# Channel-close response to message-data -server PORT_D -220 Server ready -EHLO -250-hi there -250-PIPELINING -250-CHUNKING -250 OK -MAIL FROM -250 OK mail -RCPT TO -250 OK rcpt -BDAT 333 LAST -*data 333 ->*eof -**** -sudo exim -d-all+transport -odi -bs -helo tester -mail from: -rcpt to: -data -. -quit -**** -exim -Mrm $msg1 -**** diff --git a/test/scripts/0000-Basic/0951 b/test/scripts/0000-Basic/0951 new file mode 100644 index 000000000..46349a859 --- /dev/null +++ b/test/scripts/0000-Basic/0951 @@ -0,0 +1,4 @@ +# check for BOM in an included config file (0951) +# +1 +exim -bP config diff --git a/test/scripts/0000-Basic/0952 b/test/scripts/0000-Basic/0952 new file mode 120000 index 000000000..9817580ce --- /dev/null +++ b/test/scripts/0000-Basic/0952 @@ -0,0 +1 @@ +0951 \ No newline at end of file diff --git a/test/scripts/1000-Basic-ipv6/1001 b/test/scripts/1000-Basic-ipv6/1001 index d0a71a6cd..3170647e2 100644 --- a/test/scripts/1000-Basic-ipv6/1001 +++ b/test/scripts/1000-Basic-ipv6/1001 @@ -12,6 +12,7 @@ ehlo [HOSTIPV6] ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from:<> ??? 250 @@ -29,6 +30,7 @@ ehlo [IPV6:HOSTIPV6] ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from:<> ??? 250 @@ -46,6 +48,7 @@ ehlo [IPV6:V6NET:0:12:1:a00:20ff:fe86:a062] ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from:<> ??? 250 diff --git a/test/scripts/1100-Basic-TLS/1103 b/test/scripts/1100-Basic-TLS/1103 index 734780f4d..5d0907e21 100644 --- a/test/scripts/1100-Basic-TLS/1103 +++ b/test/scripts/1100-Basic-TLS/1103 @@ -10,6 +10,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -18,6 +19,7 @@ ehlo test ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 @@ -34,6 +36,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 diff --git a/test/scripts/1100-Basic-TLS/1104 b/test/scripts/1100-Basic-TLS/1104 index 4a3af17ee..ec4e08997 100644 --- a/test/scripts/1100-Basic-TLS/1104 +++ b/test/scripts/1100-Basic-TLS/1104 @@ -10,6 +10,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 @@ -26,6 +27,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 diff --git a/test/scripts/1100-Basic-TLS/1105 b/test/scripts/1100-Basic-TLS/1105 index 01f911329..76387c1a9 100644 --- a/test/scripts/1100-Basic-TLS/1105 +++ b/test/scripts/1100-Basic-TLS/1105 @@ -16,6 +16,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -24,6 +25,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 diff --git a/test/scripts/1100-Basic-TLS/1106 b/test/scripts/1100-Basic-TLS/1106 index 1b8438f7e..14a0fd794 100644 --- a/test/scripts/1100-Basic-TLS/1106 +++ b/test/scripts/1100-Basic-TLS/1106 @@ -10,6 +10,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 diff --git a/test/scripts/1100-Basic-TLS/1107 b/test/scripts/1100-Basic-TLS/1107 index 79d412d70..e1459242b 100644 --- a/test/scripts/1100-Basic-TLS/1107 +++ b/test/scripts/1100-Basic-TLS/1107 @@ -10,6 +10,7 @@ ehlo timeout.rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls_wait ??? 220 @@ -24,6 +25,7 @@ ehlo close.rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls_wait ??? 220 diff --git a/test/scripts/1100-Basic-TLS/1108 b/test/scripts/1100-Basic-TLS/1108 index 4e85dc586..8f5caf82f 100644 --- a/test/scripts/1100-Basic-TLS/1108 +++ b/test/scripts/1100-Basic-TLS/1108 @@ -10,6 +10,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -18,6 +19,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 @@ -39,6 +41,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 diff --git a/test/scripts/1100-Basic-TLS/1110 b/test/scripts/1100-Basic-TLS/1110 index f81b7d8c7..2fb331e6b 100644 --- a/test/scripts/1100-Basic-TLS/1110 +++ b/test/scripts/1100-Basic-TLS/1110 @@ -9,6 +9,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 diff --git a/test/scripts/1100-Basic-TLS/1111 b/test/scripts/1100-Basic-TLS/1111 index f36360d8f..3decc0c8b 100644 --- a/test/scripts/1100-Basic-TLS/1111 +++ b/test/scripts/1100-Basic-TLS/1111 @@ -10,6 +10,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 diff --git a/test/scripts/1100-Basic-TLS/1112 b/test/scripts/1100-Basic-TLS/1112 index 396ee3fef..8554ea25f 100644 --- a/test/scripts/1100-Basic-TLS/1112 +++ b/test/scripts/1100-Basic-TLS/1112 @@ -12,6 +12,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -25,6 +26,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 quit ??? 221 diff --git a/test/scripts/1100-Basic-TLS/1115 b/test/scripts/1100-Basic-TLS/1115 new file mode 100644 index 000000000..fe53cb15d --- /dev/null +++ b/test/scripts/1100-Basic-TLS/1115 @@ -0,0 +1,7 @@ +# server: tls_on_connect and log_reject_target empty +exim -bd -DSERVER=server -oX PORT_D2 +**** +client-anytls -tls-on-connect 127.0.0.1 PORT_D2 +???* +**** +killdaemon diff --git a/test/scripts/1100-Basic-TLS/1157 b/test/scripts/1100-Basic-TLS/1157 index 1a271e2a2..22652da9b 100644 --- a/test/scripts/1100-Basic-TLS/1157 +++ b/test/scripts/1100-Basic-TLS/1157 @@ -28,7 +28,7 @@ Test message 2 exim userc@test.ex Test message 3 **** -exim -DEQUIRE -d-all+acl -qqf +exim -DREQUIRE -d-all+acl -qqf **** killdaemon exim -DSERVER=server -DNOTDAEMON -qf diff --git a/test/scripts/1190-TLS-ALPN/1190 b/test/scripts/1190-TLS-ALPN/1190 index bd873c391..ddb6dd097 100644 --- a/test/scripts/1190-TLS-ALPN/1190 +++ b/test/scripts/1190-TLS-ALPN/1190 @@ -38,6 +38,7 @@ client 127.0.0.1 PORT_D EHLO IOTtester ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS diff --git a/test/scripts/2000-GnuTLS/2002 b/test/scripts/2000-GnuTLS/2002 index 2cf6b3329..cdaf56d68 100644 --- a/test/scripts/2000-GnuTLS/2002 +++ b/test/scripts/2000-GnuTLS/2002 @@ -21,6 +21,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -29,6 +30,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 @@ -50,6 +52,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -74,6 +77,7 @@ client-gnutls -p NONE:+SIGN-RSA-SHA256:+SIGN-ECDSA-SHA512:+VERS-TLS1.2:+ECDHE-RS ehlo rhu.barb ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS @@ -99,6 +103,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -131,6 +136,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -160,6 +166,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 diff --git a/test/scripts/2000-GnuTLS/2014 b/test/scripts/2000-GnuTLS/2014 index 6ecfeccfc..5fdb361ce 100644 --- a/test/scripts/2000-GnuTLS/2014 +++ b/test/scripts/2000-GnuTLS/2014 @@ -12,6 +12,7 @@ ehlo rhu1.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -27,6 +28,7 @@ ehlo rhu2.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -48,6 +50,7 @@ ehlo rhu3.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -69,6 +72,7 @@ ehlo rhu4.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -92,6 +96,7 @@ ehlo rhu5.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -108,6 +113,7 @@ ehlo rhu6.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -144,6 +150,7 @@ ehlo rhu7.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 STARTTLS ??? 220 @@ -161,6 +168,7 @@ ehlo rhu8.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -182,6 +190,7 @@ ehlo rhu9.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 diff --git a/test/scripts/2000-GnuTLS/2024 b/test/scripts/2000-GnuTLS/2024 index 307fde706..33448738c 100644 --- a/test/scripts/2000-GnuTLS/2024 +++ b/test/scripts/2000-GnuTLS/2024 @@ -17,6 +17,7 @@ ehlo rhu1.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -36,6 +37,7 @@ ehlo rhu2.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 454 diff --git a/test/scripts/2000-GnuTLS/2029 b/test/scripts/2000-GnuTLS/2029 index bc59e220d..19ab63183 100644 --- a/test/scripts/2000-GnuTLS/2029 +++ b/test/scripts/2000-GnuTLS/2029 @@ -14,6 +14,7 @@ ehlo abcd ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 diff --git a/test/scripts/2000-GnuTLS/2034 b/test/scripts/2000-GnuTLS/2034 index c8654f1aa..8278c436b 100644 --- a/test/scripts/2000-GnuTLS/2034 +++ b/test/scripts/2000-GnuTLS/2034 @@ -11,6 +11,7 @@ ehlo rhu1.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -26,6 +27,7 @@ ehlo rhu2.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 diff --git a/test/scripts/2000-GnuTLS/2036 b/test/scripts/2000-GnuTLS/2036 index cd6e9a121..b16b082d7 100644 --- a/test/scripts/2000-GnuTLS/2036 +++ b/test/scripts/2000-GnuTLS/2036 @@ -17,6 +17,7 @@ EHLO test.ex ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 MAIL FROM: ??? 250 @@ -50,6 +51,7 @@ EHLO test.ex ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 MAIL FROM: ??? 250 diff --git a/test/scripts/2100-OpenSSL/2102 b/test/scripts/2100-OpenSSL/2102 index 290db16f8..baebe5eb1 100644 --- a/test/scripts/2100-OpenSSL/2102 +++ b/test/scripts/2100-OpenSSL/2102 @@ -19,6 +19,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -27,6 +28,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 @@ -48,6 +50,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -56,6 +59,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from:<"name with spaces"@test.ex> ??? 250 @@ -78,6 +82,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 TLS go ahead @@ -93,6 +98,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -101,6 +107,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 @@ -130,6 +137,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -138,6 +146,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 mail from: ??? 250 diff --git a/test/scripts/2100-OpenSSL/2114 b/test/scripts/2100-OpenSSL/2114 index b5245fd37..8d2b17445 100644 --- a/test/scripts/2100-OpenSSL/2114 +++ b/test/scripts/2100-OpenSSL/2114 @@ -10,6 +10,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -31,6 +32,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -52,6 +54,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -73,6 +76,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -94,6 +98,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -111,6 +116,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -139,6 +145,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -156,6 +163,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -177,6 +185,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 diff --git a/test/scripts/2100-OpenSSL/2124 b/test/scripts/2100-OpenSSL/2124 index 6649ed968..dd5994008 100644 --- a/test/scripts/2100-OpenSSL/2124 +++ b/test/scripts/2100-OpenSSL/2124 @@ -9,6 +9,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -28,6 +29,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 454 diff --git a/test/scripts/2100-OpenSSL/2132 b/test/scripts/2100-OpenSSL/2132 index 9aa4c1a8c..ec0ccc6f8 100644 --- a/test/scripts/2100-OpenSSL/2132 +++ b/test/scripts/2100-OpenSSL/2132 @@ -11,6 +11,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -37,6 +38,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -63,6 +65,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -80,6 +83,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 diff --git a/test/scripts/2100-OpenSSL/2136 b/test/scripts/2100-OpenSSL/2136 index 396075cc1..e8d4d3261 100644 --- a/test/scripts/2100-OpenSSL/2136 +++ b/test/scripts/2100-OpenSSL/2136 @@ -16,6 +16,7 @@ EHLO test.ex ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 MAIL FROM: ??? 250 @@ -49,6 +50,7 @@ EHLO test.ex ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 MAIL FROM: ??? 250 diff --git a/test/scripts/2100-OpenSSL/2150 b/test/scripts/2100-OpenSSL/2150 index 162436e29..c25aad854 100644 --- a/test/scripts/2100-OpenSSL/2150 +++ b/test/scripts/2100-OpenSSL/2150 @@ -12,6 +12,7 @@ ehlo abcd ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 diff --git a/test/scripts/2200-dnsdb/2200 b/test/scripts/2200-dnsdb/2200 index 96c8dc7ec..3d78a2639 100644 --- a/test/scripts/2200-dnsdb/2200 +++ b/test/scripts/2200-dnsdb/2200 @@ -4,6 +4,15 @@ exim -be test.ex ${lookup dnsdb{test.ex}{$value}fail} s/lash.test.ex ${lookup dnsdb{s/lash.test.ex}{$value}fail} txt=test.ex ${lookup dnsdb{txt=test.ex}{$value}fail} +>X txt=test.ex ${lookup dnsdb{txt=test.ex}{$value}fail} +>X; txt=test.ex ${lookup dnsdb{txt=test.ex}{$value}fail} +>X, txt=test.ex ${lookup dnsdb{txt=test.ex}{$value}fail} +>X, txt=test.ex ${lookup dnsdb{txt=test.ex}{$value}fail} +txt=long.test.ex ${lookup dnsdb{ txt=long.test.ex}{$value}fail} +>X txt=long.test.ex ${lookup dnsdb{>X txt=long.test.ex}{$value}fail} +>X; txt=long.test.ex ${lookup dnsdb{>X; txt=long.test.ex}{$value}fail} +>X, txt=long.test.ex ${lookup dnsdb{>X, txt=long.test.ex}{$value}fail} +>X,Z txt=long.test.ex ${lookup dnsdb{>X,Z txt=long.test.ex}{$value}fail} a=black-1.test.ex ${lookup dnsdb{a=black-1.test.ex}{$value}fail} xxx=test.ex ${lookup dnsdb{xxx=test.ex}{$value}fail} a=localhost.test.ex ${lookup dnsdb{a=localhost.test.ex}{$value}fail} diff --git a/test/scripts/2300-DBM/2301 b/test/scripts/2300-DBM/2301 deleted file mode 100644 index 9ba0c5079..000000000 --- a/test/scripts/2300-DBM/2301 +++ /dev/null @@ -1,5 +0,0 @@ -# lookup dbmjz -# -exim -be -${lookup{testid:test.example.invalid:userPassword}dbmjz{DIR/aux-fixed/TESTNUM.testsasldb}{$value}fail} -**** diff --git a/test/scripts/2301-DBM-BDB/2301 b/test/scripts/2301-DBM-BDB/2301 new file mode 100644 index 000000000..82ec19da7 --- /dev/null +++ b/test/scripts/2301-DBM-BDB/2301 @@ -0,0 +1,7 @@ +# lookup dbmjz +# NB: the reference DB file is a Berkeley DB; +# builds for other hints-DB interface will fail +# +exim -be +${lookup{testid:test.example.invalid:userPassword}dbmjz{DIR/aux-fixed/TESTNUM.testsasldb}{$value}fail} +**** diff --git a/test/scripts/2301-DBM-BDB/2302 b/test/scripts/2301-DBM-BDB/2302 new file mode 100644 index 000000000..4c8b7958b --- /dev/null +++ b/test/scripts/2301-DBM-BDB/2302 @@ -0,0 +1,6 @@ +# lookup dbmnz +# NB: the reference DB file is a Berkeley DB; +# builds for other hints-DB interface will fail +# +exim -be '[${lookup{test}dbmnz{DIR/aux-fixed/TESTNUM.emptydbmnzlookup}}]' +**** diff --git a/test/scripts/2301-DBM-BDB/REQUIRES b/test/scripts/2301-DBM-BDB/REQUIRES new file mode 100644 index 000000000..b96ff3144 --- /dev/null +++ b/test/scripts/2301-DBM-BDB/REQUIRES @@ -0,0 +1,2 @@ +lookup dbm +feature _HAVE_HINTS_BDB diff --git a/test/scripts/2500-dsearch/2500 b/test/scripts/2500-dsearch/2500 index f3937ec91..ba524105d 100644 --- a/test/scripts/2500-dsearch/2500 +++ b/test/scripts/2500-dsearch/2500 @@ -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/2610-MySQL/2610 b/test/scripts/2610-MySQL/2610 index 91a3f6be3..597504a59 100644 --- a/test/scripts/2610-MySQL/2610 +++ b/test/scripts/2610-MySQL/2610 @@ -81,7 +81,7 @@ ${lookup mysql {SELECT name FROM them WHERE id IN ('ph10', 'aaaa');}} ${lookup mysql {SELECT * FROM them WHERE id IN ('ph10', 'aaaa');}} ${lookup mysql {delete from them where id='aaaa'}} **** -exim -d -bh 10.0.0.0 +exim -d+all -bh 10.0.0.0 helo test mail from: rcpt to: diff --git a/test/scripts/3400-plaintext/3415 b/test/scripts/3400-plaintext/3415 index d5bcc33be..590a55c96 100644 --- a/test/scripts/3400-plaintext/3415 +++ b/test/scripts/3400-plaintext/3415 @@ -11,6 +11,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 auth plain AHVzZXJuYW1lAG15c2VjcmV0 ??? 235 @@ -46,6 +47,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 auth plain AHVzZXJuYW1lAG15c2VjcmV0 ??? 235 @@ -73,6 +75,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 auth plain AHVzZXJuYW1lAG15c2VjcmV0 ??? 235 @@ -100,6 +103,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 auth plain AHVzZXJuYW1lAG15c2VjcmV0 ??? 235 diff --git a/test/scripts/3450-plaintext-GnuTLS/3450 b/test/scripts/3450-plaintext-GnuTLS/3450 index d18387eb4..5f7d23bde 100644 --- a/test/scripts/3450-plaintext-GnuTLS/3450 +++ b/test/scripts/3450-plaintext-GnuTLS/3450 @@ -11,6 +11,7 @@ ehlo foobar ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 auth plain AHVzZXJ4AHNlY3JldA== ??? 235 @@ -26,6 +27,7 @@ ehlo foobar ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 auth plain AHVzZXJ4AHNlY3JldA== ??? 503 @@ -37,6 +39,7 @@ ehlo foobar ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 auth plain AHVzZXJ4AHNlY3JldA== ??? 235 diff --git a/test/scripts/3450-plaintext-GnuTLS/3453 b/test/scripts/3450-plaintext-GnuTLS/3453 index a88f49f3d..27c56b7fc 100644 --- a/test/scripts/3450-plaintext-GnuTLS/3453 +++ b/test/scripts/3450-plaintext-GnuTLS/3453 @@ -11,6 +11,7 @@ ehlo foobar ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -33,6 +34,7 @@ ehlo foobar ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 diff --git a/test/scripts/3450-plaintext-GnuTLS/3454 b/test/scripts/3450-plaintext-GnuTLS/3454 index c867ef540..a417f3bb3 100644 --- a/test/scripts/3450-plaintext-GnuTLS/3454 +++ b/test/scripts/3450-plaintext-GnuTLS/3454 @@ -7,6 +7,7 @@ client-gnutls 127.0.0.1 PORT_D ehlo foobar ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-AUTH @@ -22,6 +23,7 @@ client-gnutls 127.0.0.1 PORT_D ehlo foobar ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-AUTH @@ -32,6 +34,7 @@ starttls ehlo foobar ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-AUTH diff --git a/test/scripts/3460-plaintext-OpenSSL/3460 b/test/scripts/3460-plaintext-OpenSSL/3460 index 98c7219cd..c06ddc83b 100644 --- a/test/scripts/3460-plaintext-OpenSSL/3460 +++ b/test/scripts/3460-plaintext-OpenSSL/3460 @@ -10,6 +10,7 @@ ehlo foobar ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 auth plain AHVzZXJ4AHNlY3JldA== ??? 235 @@ -25,6 +26,7 @@ ehlo foobar ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 auth plain AHVzZXJ4AHNlY3JldA== ??? 503 @@ -36,6 +38,7 @@ ehlo foobar ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 auth plain AHVzZXJ4AHNlY3JldA== ??? 235 diff --git a/test/scripts/3460-plaintext-OpenSSL/3463 b/test/scripts/3460-plaintext-OpenSSL/3463 index dd83449a9..8e4843e4f 100644 --- a/test/scripts/3460-plaintext-OpenSSL/3463 +++ b/test/scripts/3460-plaintext-OpenSSL/3463 @@ -10,6 +10,7 @@ ehlo foobar ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -32,6 +33,7 @@ ehlo foobar ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 diff --git a/test/scripts/3460-plaintext-OpenSSL/3464 b/test/scripts/3460-plaintext-OpenSSL/3464 index 997ae3056..6ec446234 100644 --- a/test/scripts/3460-plaintext-OpenSSL/3464 +++ b/test/scripts/3460-plaintext-OpenSSL/3464 @@ -10,6 +10,7 @@ ehlo foobar ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -25,6 +26,7 @@ ehlo foobar ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -34,6 +36,7 @@ ehlo foobar ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 auth plain AHVzZXJ4AHNlY3JldA== ??? 235 diff --git a/test/scripts/3600-SPA/3600 b/test/scripts/3600-SPA/3600 index 9f4f38941..78b7bd3a3 100644 --- a/test/scripts/3600-SPA/3600 +++ b/test/scripts/3600-SPA/3600 @@ -17,6 +17,7 @@ EHLO xxxx ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 AUTH NTLM ??? 334 @@ -33,6 +34,7 @@ EHLO xxxx ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 AUTH NTLM ??? 334 diff --git a/test/scripts/3720-external-auth-GnuTLS/3720 b/test/scripts/3720-external-auth-GnuTLS/3720 index 1b932e69b..af0ad7963 100644 --- a/test/scripts/3720-external-auth-GnuTLS/3720 +++ b/test/scripts/3720-external-auth-GnuTLS/3720 @@ -12,6 +12,7 @@ EHLO tester ??? 250- ??? 250- ??? 250- +??? 250- ??? 250-STARTTLS ??? 250 HELP STARTTLS @@ -21,6 +22,7 @@ EHLO tester ??? 250- ??? 250- ??? 250- +??? 250- ??? 250-AUTH EXTERNAL ??? 250 HELP AUTH EXTERNAL c2VydmVyMi5leGFtcGxlLm9yZw== diff --git a/test/scripts/3721-external-auth-OpenSSL/3721 b/test/scripts/3721-external-auth-OpenSSL/3721 index 35cc11bd4..32ea8f4da 100644 --- a/test/scripts/3721-external-auth-OpenSSL/3721 +++ b/test/scripts/3721-external-auth-OpenSSL/3721 @@ -12,6 +12,7 @@ EHLO tester ??? 250- ??? 250- ??? 250- +??? 250- ??? 250-STARTTLS ??? 250 HELP STARTTLS @@ -21,6 +22,7 @@ EHLO tester ??? 250- ??? 250- ??? 250- +??? 250- ??? 250-AUTH EXTERNAL ??? 250 HELP AUTH EXTERNAL c2VydmVyMi5leGFtcGxlLm9yZw== diff --git a/test/scripts/3800-Cyrus-SASL/3800 b/test/scripts/3800-Cyrus-SASL/3800 index a033ea0c6..9c44f5f2c 100644 --- a/test/scripts/3800-Cyrus-SASL/3800 +++ b/test/scripts/3800-Cyrus-SASL/3800 @@ -9,6 +9,7 @@ EHLO xxxx ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 AUTH PLAIN AHBoMTAAc2VjcmV0 ??? 535 diff --git a/test/scripts/3820-Gnu-SASL/3820 b/test/scripts/3820-Gnu-SASL/3820 index 83ade6316..8ac1b5099 100644 --- a/test/scripts/3820-Gnu-SASL/3820 +++ b/test/scripts/3820-Gnu-SASL/3820 @@ -14,6 +14,7 @@ EHLO xxxx ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 AUTH PLAIN AHBoMTAAc2VjcmV0 ??? 535 diff --git a/test/scripts/4032-xclient/4032 b/test/scripts/4032-xclient/4032 index fa0d0b8c3..2b78b909a 100644 --- a/test/scripts/4032-xclient/4032 +++ b/test/scripts/4032-xclient/4032 @@ -11,6 +11,7 @@ client 127.0.0.1 PORT_D EHLO plainclient ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250 HELP @@ -37,6 +38,7 @@ client HOSTIPV4 PORT_D EHLO xclientproxy ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-XCLIENT @@ -46,6 +48,7 @@ XCLIENT NAME=proxylookedupname.net ADDR=127.0.0.2 PORT=4242 DESTADDR=10.42.42.42 EHLO clienthelo ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-XCLIENT @@ -66,6 +69,7 @@ XCLIENT NAME=[TEMPUNAVAIL] ADDR=127.0.0.3 PORT=4243 LOGIN=[UNAVAILABLE] EHLO anotherhelo ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-XCLIENT @@ -101,6 +105,7 @@ client HOSTIPV4 PORT_D EHLO xclientproxy ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-XCLIENT @@ -123,6 +128,7 @@ client HOSTIPV4 PORT_D EHLO xclientproxy ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-XCLIENT diff --git a/test/scripts/4034-xclient-tls/4034 b/test/scripts/4034-xclient-tls/4034 index fa58c7eeb..9cc6f84a0 100644 --- a/test/scripts/4034-xclient-tls/4034 +++ b/test/scripts/4034-xclient-tls/4034 @@ -11,6 +11,7 @@ client-anytls 127.0.0.1 PORT_D EHLO plainclient ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS @@ -20,6 +21,7 @@ STARTTLS EHLO plainclient ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250 HELP @@ -46,6 +48,7 @@ client-anytls HOSTIPV4 PORT_D EHLO xclientproxy ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS @@ -56,6 +59,7 @@ STARTTLS EHLO xclientproxy ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-XCLIENT @@ -65,6 +69,7 @@ XCLIENT NAME=proxylookedupname.net ADDR=127.0.0.2 PORT=4242 DESTADDR=10.42.42.42 EHLO clienthelo ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-XCLIENT @@ -85,6 +90,7 @@ XCLIENT NAME=[TEMPUNAVAIL] ADDR=127.0.0.3 PORT=4243 LOGIN=[UNAVAILABLE] EHLO anotherhelo ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-XCLIENT @@ -120,6 +126,7 @@ client-anytls HOSTIPV4 PORT_D EHLO xclientproxy ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS @@ -130,6 +137,7 @@ STARTTLS EHLO xclientproxy ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-XCLIENT @@ -152,6 +160,7 @@ client-anytls HOSTIPV4 PORT_D EHLO xclientproxy ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS @@ -162,6 +171,7 @@ STARTTLS EHLO xclientproxy ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-XCLIENT diff --git a/test/scripts/4040-wellknown/4040 b/test/scripts/4040-wellknown/4040 new file mode 100644 index 000000000..8ca40306f --- /dev/null +++ b/test/scripts/4040-wellknown/4040 @@ -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 index 000000000..457fc5f74 --- /dev/null +++ b/test/scripts/4040-wellknown/REQUIRES @@ -0,0 +1 @@ +support ESMTP_Wellknown diff --git a/test/scripts/4200-International/4201 b/test/scripts/4200-International/4201 index 5a591fdea..27a977552 100644 --- a/test/scripts/4200-International/4201 +++ b/test/scripts/4200-International/4201 @@ -11,6 +11,7 @@ client 127.0.0.1 PORT_D EHLO client ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-SMTPUTF8 @@ -37,6 +38,7 @@ client 127.0.0.1 PORT_D EHLO client ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-SMTPUTF8 @@ -94,6 +96,7 @@ client 127.0.0.1 PORT_D EHLO client ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250 HELP diff --git a/test/scripts/4210-GnuTLS-International/4211 b/test/scripts/4210-GnuTLS-International/4211 index 8fa9fd3bc..526ff6ea8 100644 --- a/test/scripts/4210-GnuTLS-International/4211 +++ b/test/scripts/4210-GnuTLS-International/4211 @@ -12,6 +12,7 @@ client 127.0.0.1 PORT_D EHLO client ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS @@ -39,6 +40,7 @@ client 127.0.0.1 PORT_D EHLO client ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS diff --git a/test/scripts/4220-OpenSSL-International/4221 b/test/scripts/4220-OpenSSL-International/4221 index 6146d8b3b..3833b8045 100644 --- a/test/scripts/4220-OpenSSL-International/4221 +++ b/test/scripts/4220-OpenSSL-International/4221 @@ -11,6 +11,7 @@ client 127.0.0.1 PORT_D EHLO client ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS @@ -38,6 +39,7 @@ client 127.0.0.1 PORT_D EHLO client ??? 250- ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS diff --git a/test/scripts/4500-DKIM/4510 b/test/scripts/4500-DKIM/4510 index f073be9d3..f4cc6eba3 100644 --- a/test/scripts/4500-DKIM/4510 +++ b/test/scripts/4500-DKIM/4510 @@ -15,6 +15,12 @@ content exim -DOPT=From:From -DTIMES=10 -odf b@test.ex From: nobody@example.com +content +**** +# single header, oversigned, with only t= timestamp; no expiry x= +exim -DOPT=From:From -DTIMES=0 -odf b02@test.ex +From: nobody@example.com + content **** # diff --git a/test/scripts/4500-DKIM/4519 b/test/scripts/4500-DKIM/4519 index fb98e5564..9996f3915 100644 --- a/test/scripts/4500-DKIM/4519 +++ b/test/scripts/4500-DKIM/4519 @@ -13,6 +13,7 @@ EHLO xxx ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 MAIL FROM: ??? 250 @@ -43,6 +44,7 @@ EHLO xxx ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 MAIL FROM: ??? 250 diff --git a/test/scripts/4520-TLS-DKIM/4520 b/test/scripts/4520-TLS-DKIM/4520 index 665fd909b..ec40c28fe 100644 --- a/test/scripts/4520-TLS-DKIM/4520 +++ b/test/scripts/4520-TLS-DKIM/4520 @@ -12,6 +12,7 @@ client-anytls 127.0.0.1 PORT_D EHLO test ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS @@ -57,6 +58,7 @@ EHLO test ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 STARTTLS ??? 220 @@ -98,6 +100,7 @@ EHLO test ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 STARTTLS ??? 220 @@ -142,6 +145,7 @@ EHLO test ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 STARTTLS ??? 220 @@ -189,6 +193,7 @@ EHLO test ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 STARTTLS ??? 220 @@ -239,6 +244,7 @@ EHLO test ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 STARTTLS ??? 220 diff --git a/test/scripts/4520-TLS-DKIM/4521 b/test/scripts/4520-TLS-DKIM/4521 index da17c30a1..d4d74c902 100644 --- a/test/scripts/4520-TLS-DKIM/4521 +++ b/test/scripts/4520-TLS-DKIM/4521 @@ -14,6 +14,7 @@ EHLO test ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 STARTTLS ??? 220 @@ -57,6 +58,7 @@ EHLO test ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 STARTTLS ??? 220 diff --git a/test/scripts/4520-TLS-DKIM/4522 b/test/scripts/4520-TLS-DKIM/4522 index e636930af..a0b1a33b9 100644 --- a/test/scripts/4520-TLS-DKIM/4522 +++ b/test/scripts/4520-TLS-DKIM/4522 @@ -14,6 +14,7 @@ EHLO test ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 STARTTLS ??? 220 @@ -70,6 +71,7 @@ EHLO test ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 STARTTLS ??? 220 @@ -120,6 +122,7 @@ EHLO test ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 STARTTLS ??? 220 @@ -168,6 +171,7 @@ EHLO test ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 STARTTLS ??? 220 diff --git a/test/scripts/4520-TLS-DKIM/4523 b/test/scripts/4520-TLS-DKIM/4523 index 4d63cd107..16ba690ba 100644 --- a/test/scripts/4520-TLS-DKIM/4523 +++ b/test/scripts/4520-TLS-DKIM/4523 @@ -17,6 +17,7 @@ client-anytls 127.0.0.1 PORT_D EHLO test ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS diff --git a/test/scripts/4520-TLS-DKIM/4524 b/test/scripts/4520-TLS-DKIM/4524 index 7eabb37ad..5c5739da2 100644 --- a/test/scripts/4520-TLS-DKIM/4524 +++ b/test/scripts/4520-TLS-DKIM/4524 @@ -17,6 +17,7 @@ client-anytls 127.0.0.1 PORT_D EHLO test ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS diff --git a/test/scripts/4520-TLS-DKIM/4526 b/test/scripts/4520-TLS-DKIM/4526 index d687e22a7..ba56bbb1a 100644 --- a/test/scripts/4520-TLS-DKIM/4526 +++ b/test/scripts/4520-TLS-DKIM/4526 @@ -12,6 +12,7 @@ client-anytls 127.0.0.1 PORT_D EHLO test ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS @@ -51,6 +52,7 @@ client-anytls 127.0.0.1 PORT_D EHLO test ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS @@ -93,6 +95,7 @@ client-anytls 127.0.0.1 PORT_D EHLO test ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS @@ -136,6 +139,7 @@ client-anytls 127.0.0.1 PORT_D EHLO test ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS @@ -182,6 +186,7 @@ client-anytls 127.0.0.1 PORT_D EHLO test ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS @@ -223,6 +228,7 @@ client-anytls 127.0.0.1 PORT_D EHLO test ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS @@ -6304,6 +6310,7 @@ client-anytls 127.0.0.1 PORT_D EHLO test ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS @@ -6349,6 +6356,7 @@ client-anytls 127.0.0.1 PORT_D EHLO test ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS diff --git a/test/scripts/4520-TLS-DKIM/4528 b/test/scripts/4520-TLS-DKIM/4528 index 117535bae..450ecb1de 100644 --- a/test/scripts/4520-TLS-DKIM/4528 +++ b/test/scripts/4520-TLS-DKIM/4528 @@ -13,6 +13,7 @@ client-anytls 127.0.0.1 PORT_D EHLO test ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS @@ -58,6 +59,7 @@ client-anytls 127.0.0.1 PORT_D EHLO test ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS @@ -103,6 +105,7 @@ client-anytls 127.0.0.1 PORT_D EHLO test ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS @@ -148,6 +151,7 @@ client-anytls 127.0.0.1 PORT_D EHLO test ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS diff --git a/test/scripts/4520-TLS-DKIM/4529 b/test/scripts/4520-TLS-DKIM/4529 index 4be58fccd..3e14636ce 100644 --- a/test/scripts/4520-TLS-DKIM/4529 +++ b/test/scripts/4520-TLS-DKIM/4529 @@ -12,6 +12,7 @@ client-anytls 127.0.0.1 PORT_D EHLO test ??? 250-myhost ??? 250-SIZE +??? 250-LIMITS ??? 250-8BITMIME ??? 250-PIPELINING ??? 250-STARTTLS diff --git a/test/scripts/4520-TLS-DKIM/4539 b/test/scripts/4520-TLS-DKIM/4539 index 93214275d..56309f515 100644 --- a/test/scripts/4520-TLS-DKIM/4539 +++ b/test/scripts/4520-TLS-DKIM/4539 @@ -14,6 +14,7 @@ EHLO xxx ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 STARTTLS ??? 220 @@ -50,6 +51,7 @@ EHLO xxx ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 STARTTLS ??? 220 diff --git a/test/scripts/4710-esmtp-limits/4710 b/test/scripts/4710-esmtp-limits/4710 index 875613cab..a5b9a6a6c 100644 --- a/test/scripts/4710-esmtp-limits/4710 +++ b/test/scripts/4710-esmtp-limits/4710 @@ -84,3 +84,26 @@ EHLO tester ??? 250 **** killdaemon +# recipients_max is expanded (at least for smtp) +exim -DSERVER=server -DRCPT_MSG='${if eq {$sender_host_address}{HOSTIPV4}{4}{100}}' -bd -oX PORT_D +**** +client HOSTIPV4 PORT_D +??? 220 +EHLO tester +??? 250- +??? 250-SIZE +??? 250-LIMITS MAILMAX=1000 RCPTMAX=4 +??? 250 +**** +killdaemon +exim -DSERVER=server -DRCPT_MSG='${if eq {$sender_host_address}{HOSTIPV4}{4}{100}}' -bd -oX PORT_D +**** +client 127.0.0.1 PORT_D +??? 220 +EHLO tester +??? 250- +??? 250-SIZE +??? 250-LIMITS MAILMAX=1000 RCPTMAX=100 +??? 250 +**** +killdaemon diff --git a/test/scripts/4710-esmtp-limits/4714 b/test/scripts/4710-esmtp-limits/4714 index f97d989e8..ff308c265 100644 --- a/test/scripts/4710-esmtp-limits/4714 +++ b/test/scripts/4710-esmtp-limits/4714 @@ -1,6 +1,6 @@ # ESMTP LIMITS extension, client continued-connection # -# queue up 3 messages each with 2 recipients +# queue up 4 messages each with 2 recipients exim -odq r1_1.test.ex r1_2.test.ex Subject: message 1 **** @@ -11,10 +11,15 @@ exim -odq r3_1.test.ex r3_2.test.ex Subject: message 3 **** # +exim -odq r4_1.test.ex r4_2.test.ex +Subject: message 4 +**** +# # Handed limits of 5 MAIL, 1 RCPT, expect to use 5 transactions in a one connection -# when the client does a 2-phase queue run, followed by one transaction in one connection +# when the client does a 2-phase queue run, followed by three transactions in one connection # from the same queue run. -# The second pair and third initial should be from continued-connection trasports, flagged by the log lines. +# The second pair and third initial, completing the first connecttion, should be from +# continued-connection trasports, flagged by the log lines. server PORT_D 2 220 Hi there EHLO @@ -66,7 +71,7 @@ QUIT 220 Hi there EHLO 250-yeah mate -250 +250 LIMITS MAILMAX=5 RCPTMAX=1 MAIL FROM 250 mail cmd 1 good RCPT TO @@ -75,6 +80,22 @@ DATA 352 go ahead . 250 message 6 received +MAIL FROM +250 mail cmd 2 good +RCPT TO +250 rcpt cmd good +DATA +352 go ahead +. +250 message 7 received +MAIL FROM +250 mail cmd 3 good +RCPT TO +250 rcpt cmd good +DATA +352 go ahead +. +250 message 8 received QUIT 221 bye *eof diff --git a/test/scripts/4710-esmtp-limits/REQUIRES b/test/scripts/4710-esmtp-limits/REQUIRES index 4817265b8..d2d4d21bf 100644 --- a/test/scripts/4710-esmtp-limits/REQUIRES +++ b/test/scripts/4710-esmtp-limits/REQUIRES @@ -1 +1 @@ -support Experimental_ESMTP_Limits +support ESMTP_Limits diff --git a/test/scripts/5500-PRDR/5500 b/test/scripts/5500-PRDR/5500 index 1c6c344fe..73aaa977c 100644 --- a/test/scripts/5500-PRDR/5500 +++ b/test/scripts/5500-PRDR/5500 @@ -13,6 +13,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250-PRDR ??? 250 mail from:<> PRDR @@ -46,6 +47,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250-PRDR ??? 250 mail from:<> PRDR @@ -77,6 +79,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250-PRDR ??? 250 mail from:<> PRDR @@ -101,6 +104,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250-PRDR ??? 250 mail from:<> PRDR @@ -130,6 +134,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250-PRDR ??? 250 mail from:<> PRDR @@ -159,6 +164,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250-PRDR ??? 250 mail from:<> diff --git a/test/scripts/5600-OCSP-OpenSSL/5600 b/test/scripts/5600-OCSP-OpenSSL/5600 index d8ae8eabf..8c9939a05 100644 --- a/test/scripts/5600-OCSP-OpenSSL/5600 +++ b/test/scripts/5600-OCSP-OpenSSL/5600 @@ -17,6 +17,7 @@ ehlo rhu1.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -48,6 +49,7 @@ ehlo rhu2.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -73,6 +75,7 @@ ehlo rhu3.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -98,6 +101,7 @@ ehlo rhu4.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -106,6 +110,7 @@ ehlo rhu5.barb.tls ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 quit **** diff --git a/test/scripts/5600-OCSP-OpenSSL/5610 b/test/scripts/5600-OCSP-OpenSSL/5610 index 73b13b4b9..6058daf54 100644 --- a/test/scripts/5600-OCSP-OpenSSL/5610 +++ b/test/scripts/5600-OCSP-OpenSSL/5610 @@ -17,6 +17,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -48,6 +49,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -73,6 +75,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -98,6 +101,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -106,6 +110,7 @@ ehlo rhu.barb.tls ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 quit **** diff --git a/test/scripts/5650-OCSP-GnuTLS/5650 b/test/scripts/5650-OCSP-GnuTLS/5650 index ee4b4f028..e2259c7ed 100644 --- a/test/scripts/5650-OCSP-GnuTLS/5650 +++ b/test/scripts/5650-OCSP-GnuTLS/5650 @@ -18,6 +18,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -49,6 +50,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 454 @@ -76,6 +78,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 454 @@ -102,6 +105,7 @@ ehlo rhu.barb ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 starttls ??? 220 @@ -110,6 +114,7 @@ ehlo rhu.barb.tls ??? 250- ??? 250- ??? 250- +??? 250- ??? 250 quit **** diff --git a/test/scripts/5700-events/5700 b/test/scripts/5700-events/5700 index c6b6e76ff..bb62c1991 100644 --- a/test/scripts/5700-events/5700 +++ b/test/scripts/5700-events/5700 @@ -1,5 +1,4 @@ -# Arbitrary expansion after transport -# (EXPERIMENTAL_EVENT) +# Events # need_ipv4 munge timeout_errno diff --git a/test/scripts/5700-events/5708 b/test/scripts/5700-events/5708 new file mode 100644 index 000000000..9cb9508fe --- /dev/null +++ b/test/scripts/5700-events/5708 @@ -0,0 +1,62 @@ +# event on dns lookup fail + +exim -bd -DSERVER=server -oX PORT_D +**** +# +# no A record +client 127.0.0.1 PORT_D +??? 220 +HELO nonexistent.test.ex +??? 250 +MAIL FROM: +??? 250 +RCPT TO: +??? 550 +QUIT +??? 221 +**** +# CNAME to no-A-record +client 127.0.0.1 PORT_D +??? 220 +HELO badcname.test.ex +??? 250 +MAIL FROM: +??? 250 +RCPT TO: +??? 550 +QUIT +??? 221 +**** +# defer from dns lookup +client 127.0.0.1 PORT_D +??? 220 +HELO test.again.dns +??? 250 +MAIL FROM: +??? 250 +RCPT TO: +??? 550 +QUIT +??? 221 +**** +# success in RCPT ACL; no-A in transport +client 127.0.0.1 PORT_D +??? 220 +HELO localhost +??? 250 +MAIL FROM: +??? 250 +RCPT TO: +??? 250 Accepted +DATA +??? 354 +Subject: test +. +??? 250 +QUIT +??? 221 +**** +# +sleep 1 +killdaemon +no_msglog_check diff --git a/test/scripts/5709_dnsdb_events/5709 b/test/scripts/5709_dnsdb_events/5709 new file mode 100644 index 000000000..583df5f1a --- /dev/null +++ b/test/scripts/5709_dnsdb_events/5709 @@ -0,0 +1,19 @@ +# event on dnsdb lookup fail +# +exim -bd -DSERVER=server -oX PORT_D +**** +client 127.0.0.1 PORT_D +??? 220 +HELO nonexistent.test.ex +??? 250 +HELO badcname.test.ex +??? 250 +HELO test.again.dns +??? 250 +HELO localhost +??? 250 +QUIT +??? 221 +**** +killdaemon +no_stderr_check diff --git a/test/scripts/5709_dnsdb_events/REQUIRES b/test/scripts/5709_dnsdb_events/REQUIRES new file mode 100644 index 000000000..22e09781c --- /dev/null +++ b/test/scripts/5709_dnsdb_events/REQUIRES @@ -0,0 +1,2 @@ +lookup dnsdb +support Event diff --git a/test/scripts/5800-DANE/5803 b/test/scripts/5800-DANE/5803 new file mode 100644 index 000000000..f217e6297 --- /dev/null +++ b/test/scripts/5800-DANE/5803 @@ -0,0 +1,8 @@ +# DANE Rverify, TLSA SERVFAIL +# +exim -odf -bs +HELO test +MAIL FROM: +RCPT TO: +QUIT +**** diff --git a/test/scripts/5890-Resume-GnuTLS/5890 b/test/scripts/5890-Resume-GnuTLS/5890 index d129da2db..3395218fa 100644 --- a/test/scripts/5890-Resume-GnuTLS/5890 +++ b/test/scripts/5890-Resume-GnuTLS/5890 @@ -6,12 +6,12 @@ gnutls # SSLKEYLOGFILE=/home/jgh/git/exim/test/foo sudo exim -DSERVER=server -bd -oX PORT_D # ### TLS1.2 -exim -DSERVER=server -DOPTION=NORMAL:!VERS-TLS1.3 -bd -oX PORT_D +exim -DSERVER=server -DOPTION=NORMAL:!VERS-TLS1.3 -bd -oX PORT_D:PORT_D2 **** exim -DVALUE=resume -odf getticket@test.ex Test message. Contains FF: ÿ **** -exim -DVALUE=resume -odf resume@test.ex abcd@test.ex xyz@test.ex +exim -DVALUE=resume -odf resume@test.ex hostnotresume@test.ex xyz@test.ex Test message to two different hosts, one does not support resume **** # allow time for ticket to hit renewal time @@ -36,18 +36,25 @@ Dest on this means the server cert will not verify (but try_verify will permit i exim -odf -DVALUE=resume noverify_resume@test.ex Dest on this means the server cert will not verify (but try_verify will permit it) **** +# Test TLS-on-connect +exim -DVALUE=resume -odf resume@test.ex +**** +exim -DVALUE=resume -DSELECTOR=smtps -odf getticket@test.ex +**** +exim -DVALUE=resume -DSELECTOR=smtps -odf resume@test.ex +**** killdaemon sleep 1 sudo rm -f DIR/spool/db/tls # # ### TLS1.3 -exim -DSERVER=server -DOPTION=NORMAL -bd -oX PORT_D +exim -DSERVER=server -DOPTION=NORMAL -bd -oX PORT_D:PORT_D2 **** exim -DVALUE=resume -odf getticket@test.ex Test message. Contains FF: ÿ **** -exim -DVALUE=resume -odf resume@test.ex abcd@test.ex xyz@test.ex +exim -DVALUE=resume -odf resume@test.ex hostnotresume@test.ex xyz@test.ex Test message to two different hosts, one does not support resume **** # allow time for ticket to hit renewal time @@ -78,6 +85,11 @@ exim -DVALUE=resume -DHELO_MSG=differenthost -odf resume@test.ex **** exim -DVALUE=resume -odf resume@test.ex **** +# Test TLS-on-connect +exim -DVALUE=resume -DSELECTOR=smtps -odf getticket@test.ex +**** +exim -DVALUE=resume -DSELECTOR=smtps -odf resume@test.ex +**** # killdaemon no_msglog_check diff --git a/test/scripts/5892-Resume-OpenSSL/5892 b/test/scripts/5892-Resume-OpenSSL/5892 index 77b93704b..92eed04d2 100644 --- a/test/scripts/5892-Resume-OpenSSL/5892 +++ b/test/scripts/5892-Resume-OpenSSL/5892 @@ -1,7 +1,7 @@ # TLSv1.2 session resumption # ### TLS1.2 -exim -DSERVER=server -DOPTION=+no_tlsv1_3 -bd -oX PORT_D +exim -DSERVER=server -DOPTION=+no_tlsv1_3 -bd -oX PORT_D:PORT_D2 **** exim -DVALUE=resume -odf getticket@test.ex Test message. @@ -46,6 +46,12 @@ exim -DVALUE=resume -DHELO_MSG=differenthost -odf resume@test.ex exim -DVALUE=resume -odf resume@test.ex **** # +# Test TLS-on-connect +exim -DVALUE=resume -DSELECTOR=smtps -odf getticket@test.ex +**** +exim -DVALUE=resume -DSELECTOR=smtps -odf resume@test.ex +**** +# # Check the -k (key only) option on dumpdb perl system 'DIR/eximdir/exim_dumpdb -k DIR/spool tls'; diff --git a/test/scripts/5894-Resume-OpenSSL-TLS1.3/5894 b/test/scripts/5894-Resume-OpenSSL-TLS1.3/5894 index 722bc9b08..b85351bd5 100644 --- a/test/scripts/5894-Resume-OpenSSL-TLS1.3/5894 +++ b/test/scripts/5894-Resume-OpenSSL-TLS1.3/5894 @@ -1,12 +1,12 @@ # TLSv1.3 session resumption # ### TLS1.3 -exim -DSERVER=server -bd -oX PORT_D +exim -DSERVER=server -DOPTION=+no_tlsv1_3 -bd -oX PORT_D:PORT_D2 **** exim -DVALUE=resume -odf getticket@test.ex Test message. Contains FF: ÿ **** -exim -DVALUE=resume -odf resume@test.ex abcd@test.ex xyz@test.ex +exim -DVALUE=resume -odf resume@test.ex hostnotresume@test.ex xyz@test.ex Test message to two different hosts, one does not support resume **** # allow time for ticket to hit renewal time @@ -24,5 +24,12 @@ Test message. exim -odf notreq@test.ex Test message, not requesting resumption. **** +# +# Test TLS-on-connect +exim -DVALUE=resume -DSELECTOR=smtps -odf getticket@test.ex +**** +exim -DVALUE=resume -DSELECTOR=smtps -odf resume@test.ex +**** +# killdaemon no_msglog_check diff --git a/test/src/fakens.c b/test/src/fakens.c index 2c82c5a82..3d6f513fc 100644 --- a/test/src/fakens.c +++ b/test/src/fakens.c @@ -329,7 +329,7 @@ int domainlen = Ustrlen(domain); BOOL pass_on_not_found = FALSE; tlist *typeptr; uschar *pk = *pkptr; -uschar buffer[256]; +uschar buffer[512]; uschar rrdomain[256]; uschar RRdomain[256]; @@ -536,10 +536,15 @@ while (fgets(CS buffer, sizeof(buffer), f) != NULL) break; case ns_t_txt: - pp = pk++; - if (*p == '"') p++; /* Should always be the case */ - while (*p != 0 && *p != '"') *pk++ = *p++; - *pp = pk - pp - 1; + while (*p) + { + pp = pk++; /* Skip the size byte in output */ + if (*p == '"') p++; /* Should always be the case */ + while (*p && *p != '"') *pk++ = *p++; + *pp = pk - pp - 1; /* fill in the size */ + p++; /* skip the closing doublequote */ + while (isspace(*p)) p++; /* next chunk start */ + } break; case ns_t_tlsa: diff --git a/test/stderr/0002 b/test/stderr/0002 index a74e98c11..2b8eed427 100644 --- a/test/stderr/0002 +++ b/test/stderr/0002 @@ -1,35 +1,39 @@ Exim version x.yz .... +Hints DB: environment after trimming: USER=CALLER configuration file is TESTSUITE/test-config admin user dropping to exim gid; retaining priv uid - ╭considering: primary_hostname: $primary_hostname - ├───────text: primary_hostname: +try option gecos_pattern +try option gecos_name +try option unknown_login + ╭considering: primary_hostname:░$primary_hostname + ├───────text: primary_hostname:░ ├considering: $primary_hostname ├──────value: myhost.test.ex - ├──expanding: primary_hostname: $primary_hostname - ╰─────result: primary_hostname: myhost.test.ex - ╭considering: sender_address: $sender_address - ├───────text: sender_address: + ├───expanded: primary_hostname:░$primary_hostname + ╰─────result: primary_hostname:░myhost.test.ex + ╭considering: sender_address:░$sender_address + ├───────text: sender_address:░ ├considering: $sender_address ├──────value: sndr@dom ╰──(tainted) - ├──expanding: sender_address: $sender_address - ╰─────result: sender_address: sndr@dom + ├───expanded: sender_address:░$sender_address + ╰─────result: sender_address:░sndr@dom ╰──(tainted) - ╭considering: match: ${if match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} - ├───────text: match: - ├considering: ${if match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} + ╭considering: match:░░${if░match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} + ├───────text: match:░░ + ├considering: ${if░match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} ╭considering: abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} ├───────text: abcd ├considering: }{\N^([ab]+)(\w+)$\N}{$2$1}fail} - ├──expanding: abcd + ├───expanded: abcd ╰─────result: abcd ╭considering: \N^([ab]+)(\w+)$\N}{$2$1}fail} ├──protected: ^([ab]+)(\w+)$ ├considering: }{$2$1}fail} - ├──expanding: \N^([ab]+)(\w+)$\N + ├───expanded: \N^([ab]+)(\w+)$\N ╰─────result: ^([ab]+)(\w+)$ compiled RE '^([ab]+)(\w+)$' not found in local cache compiling RE '^([ab]+)(\w+)$' @@ -41,23 +45,23 @@ dropping to exim gid; retaining priv uid ├considering: $1}fail} ├──────value: ab ├considering: }fail} - ├──expanding: $2$1 + ├───expanded: $2$1 ╰─────result: cdab ├───item-res: cdab - ├──expanding: match: ${if match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} - ╰─────result: match: cdab - ╭considering: match: ${if match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail} - ├───────text: match: - ├considering: ${if match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail} + ├───expanded: match:░░${if░match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} + ╰─────result: match:░░cdab + ╭considering: match:░░${if░match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail} + ├───────text: match:░░ + ├considering: ${if░match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail} ╭considering: wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail} ├───────text: wxyz ├considering: }{\N^([ab]+)(\w+)$\N}{$2$1}fail} - ├──expanding: wxyz + ├───expanded: wxyz ╰─────result: wxyz ╭considering: \N^([ab]+)(\w+)$\N}{$2$1}fail} ├──protected: ^([ab]+)(\w+)$ ├considering: }{$2$1}fail} - ├──expanding: \N^([ab]+)(\w+)$\N + ├───expanded: \N^([ab]+)(\w+)$\N ╰─────result: ^([ab]+)(\w+)$ compiled RE '^([ab]+)(\w+)$' found in local cache ├──condition: match{wxyz}{\N^([ab]+)(\w+)$\N} @@ -65,92 +69,112 @@ dropping to exim gid; retaining priv uid ╭───scanning: $2$1}fail} ├───scanning: $1}fail} ├───scanning: }fail} - ├──expanding: $2$1 - ├─────result: + ├───expanded: $2$1 + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├failed to expand: match: ${if match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail} ├───error message: "if" failed and "fail" requested ╰failure was forced - ╭considering: ${if eq {1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}} + ╭considering: ${if░eq░{1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}} ╭considering: 1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}} ├───────text: 1 ├considering: }{1}{yes}{${lookup{xx}lsearch{/non/exist}}}} - ├──expanding: 1 + ├───expanded: 1 ╰─────result: 1 ╭considering: 1}{yes}{${lookup{xx}lsearch{/non/exist}}}} ├───────text: 1 ├considering: }{yes}{${lookup{xx}lsearch{/non/exist}}}} - ├──expanding: 1 + ├───expanded: 1 ╰─────result: 1 - ├──condition: eq {1}{1} + ├──condition: eq░{1}{1} ├─────result: true ╭considering: yes}{${lookup{xx}lsearch{/non/exist}}}} ├───────text: yes ├considering: }{${lookup{xx}lsearch{/non/exist}}}} - ├──expanding: yes + ├───expanded: yes ╰─────result: yes ╭───scanning: ${lookup{xx}lsearch{/non/exist}}}} ╭───scanning: xx}lsearch{/non/exist}}}} ├───────text: xx ├───scanning: }lsearch{/non/exist}}}} - ├──expanding: xx - ├─────result: xx + ├───expanded: xx + ├─────result: ◀skipped▶ ╰───skipping: result is not used ╭───scanning: /non/exist}}}} ├───────text: /non/exist ├───scanning: }}}} - ├──expanding: /non/exist - ├─────result: /non/exist + ├───expanded: /non/exist + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───scanning: }} - ├──expanding: ${lookup{xx}lsearch{/non/exist}} - ├─────result: + ├───expanded: ${lookup{xx}lsearch{/non/exist}} + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ├──expanding: ${if eq {1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}} + ├───expanded: ${if░eq░{1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}} ╰─────result: yes - ╭considering: match_address: ${if match_address{a.b.c}{a.b.c}{yes}{no}} - ├───────text: match_address: - ├considering: ${if match_address{a.b.c}{a.b.c}{yes}{no}} + ╭considering: match_address:░░░${if░match_address{a.b.c}{a.b.c}{yes}{no}} + ├───────text: match_address:░░░ + ├considering: ${if░match_address{a.b.c}{a.b.c}{yes}{no}} ╭considering: a.b.c}{a.b.c}{yes}{no}} ├───────text: a.b.c ├considering: }{a.b.c}{yes}{no}} - ├──expanding: a.b.c + ├───expanded: a.b.c ╰─────result: a.b.c ╭considering: a.b.c}{yes}{no}} ├───────text: a.b.c ├considering: }{yes}{no}} - ├──expanding: a.b.c + ├───expanded: a.b.c ╰─────result: a.b.c LOG: MAIN PANIC no @ found in the subject of an address list match: subject="a.b.c" pattern="a.b.c" + a.b.c in "a.b.c"? no (end of list) ├──condition: match_address{a.b.c}{a.b.c} ├─────result: false ╭───scanning: yes}{no}} ├───────text: yes ├───scanning: }{no}} - ├──expanding: yes - ├─────result: yes + ├───expanded: yes + ├─────result: ◀skipped▶ ╰───skipping: result is not used ╭considering: no}} ├───────text: no ├considering: }} - ├──expanding: no + ├───expanded: no ╰─────result: no ├───item-res: no - ├──expanding: match_address: ${if match_address{a.b.c}{a.b.c}{yes}{no}} - ╰─────result: match_address: no + ├───expanded: match_address:░░░${if░match_address{a.b.c}{a.b.c}{yes}{no}} + ╰─────result: match_address:░░░no + ╭considering: protected:░${expand:\N░\N} + ├───────text: protected:░ + ├considering: ${expand:\N░\N} + ╭considering: \N░\N} + ├──protected: ░ + ├considering: } + ├───expanded: \N░\N + ╰─────result: ░ + ╭considering: ░ + ├───────text: ░ + ├───expanded: ░ + ╰─────result: ░ + ├─────op-res: + ├───expanded: protected:░${expand:\N░\N} + ╰─────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 admin user dropping to exim gid; retaining priv uid +try option gecos_pattern +try option gecos_name +try option unknown_login /considering: primary_hostname: $primary_hostname |-------text: primary_hostname: |considering: $primary_hostname |------value: myhost.test.ex - |--expanding: primary_hostname: $primary_hostname + |---expanded: primary_hostname: $primary_hostname \_____result: primary_hostname: myhost.test.ex /considering: match: ${if match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} |-------text: match: @@ -158,12 +182,12 @@ dropping to exim gid; retaining priv uid /considering: abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} |-------text: abcd |considering: }{\N^([ab]+)(\w+)$\N}{$2$1}fail} - |--expanding: abcd + |---expanded: abcd \_____result: abcd /considering: \N^([ab]+)(\w+)$\N}{$2$1}fail} |--protected: ^([ab]+)(\w+)$ |considering: }{$2$1}fail} - |--expanding: \N^([ab]+)(\w+)$\N + |---expanded: \N^([ab]+)(\w+)$\N \_____result: ^([ab]+)(\w+)$ compiled RE '^([ab]+)(\w+)$' not found in local cache compiling RE '^([ab]+)(\w+)$' @@ -175,10 +199,10 @@ dropping to exim gid; retaining priv uid |considering: $1}fail} |------value: ab |considering: }fail} - |--expanding: $2$1 + |---expanded: $2$1 \_____result: cdab |---item-res: cdab - |--expanding: match: ${if match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} + |---expanded: match: ${if match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} \_____result: match: cdab /considering: match: ${if match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail} |-------text: match: @@ -186,12 +210,12 @@ dropping to exim gid; retaining priv uid /considering: wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail} |-------text: wxyz |considering: }{\N^([ab]+)(\w+)$\N}{$2$1}fail} - |--expanding: wxyz + |---expanded: wxyz \_____result: wxyz /considering: \N^([ab]+)(\w+)$\N}{$2$1}fail} |--protected: ^([ab]+)(\w+)$ |considering: }{$2$1}fail} - |--expanding: \N^([ab]+)(\w+)$\N + |---expanded: \N^([ab]+)(\w+)$\N \_____result: ^([ab]+)(\w+)$ compiled RE '^([ab]+)(\w+)$' found in local cache |--condition: match{wxyz}{\N^([ab]+)(\w+)$\N} @@ -199,8 +223,8 @@ dropping to exim gid; retaining priv uid /---scanning: $2$1}fail} |---scanning: $1}fail} |---scanning: }fail} - |--expanding: $2$1 - |-----result: + |---expanded: $2$1 + |-----result: \___skipping: result is not used |failed to expand: match: ${if match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail} |---error message: "if" failed and "fail" requested @@ -209,38 +233,38 @@ dropping to exim gid; retaining priv uid /considering: 1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}} |-------text: 1 |considering: }{1}{yes}{${lookup{xx}lsearch{/non/exist}}}} - |--expanding: 1 + |---expanded: 1 \_____result: 1 /considering: 1}{yes}{${lookup{xx}lsearch{/non/exist}}}} |-------text: 1 |considering: }{yes}{${lookup{xx}lsearch{/non/exist}}}} - |--expanding: 1 + |---expanded: 1 \_____result: 1 |--condition: eq {1}{1} |-----result: true /considering: yes}{${lookup{xx}lsearch{/non/exist}}}} |-------text: yes |considering: }{${lookup{xx}lsearch{/non/exist}}}} - |--expanding: yes + |---expanded: yes \_____result: yes /---scanning: ${lookup{xx}lsearch{/non/exist}}}} /---scanning: xx}lsearch{/non/exist}}}} |-------text: xx |---scanning: }lsearch{/non/exist}}}} - |--expanding: xx - |-----result: xx + |---expanded: xx + |-----result: \___skipping: result is not used /---scanning: /non/exist}}}} |-------text: /non/exist |---scanning: }}}} - |--expanding: /non/exist - |-----result: /non/exist + |---expanded: /non/exist + |-----result: \___skipping: result is not used |---scanning: }} - |--expanding: ${lookup{xx}lsearch{/non/exist}} - |-----result: + |---expanded: ${lookup{xx}lsearch{/non/exist}} + |-----result: \___skipping: result is not used - |--expanding: ${if eq {1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}} + |---expanded: ${if eq {1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}} \_____result: yes /considering: match_address: ${if match_address{a.b.c}{a.b.c}{yes}{no}} |-------text: match_address: @@ -248,228 +272,255 @@ dropping to exim gid; retaining priv uid /considering: a.b.c}{a.b.c}{yes}{no}} |-------text: a.b.c |considering: }{a.b.c}{yes}{no}} - |--expanding: a.b.c + |---expanded: a.b.c \_____result: a.b.c /considering: a.b.c}{yes}{no}} |-------text: a.b.c |considering: }{yes}{no}} - |--expanding: a.b.c + |---expanded: a.b.c \_____result: a.b.c LOG: MAIN PANIC no @ found in the subject of an address list match: subject="a.b.c" pattern="a.b.c" + a.b.c in "a.b.c"? no (end of list) |--condition: match_address{a.b.c}{a.b.c} |-----result: false /---scanning: yes}{no}} |-------text: yes |---scanning: }{no}} - |--expanding: yes - |-----result: yes + |---expanded: yes + |-----result: \___skipping: result is not used /considering: no}} |-------text: no |considering: }} - |--expanding: no + |---expanded: no \_____result: no |---item-res: no - |--expanding: match_address: ${if match_address{a.b.c}{a.b.c}{yes}{no}} + |---expanded: match_address: ${if match_address{a.b.c}{a.b.c}{yes}{no}} \_____result: match_address: no + /considering: protected: ${expand:\N \N} + |-------text: protected: + |considering: ${expand:\N \N} + /considering: \N \N} + |--protected: + |considering: } + |---expanded: \N \N + \_____result: + /considering: + |-------text: + |---expanded: + \_____result: + |-----op-res: + |---expanded: protected: ${expand:\N \N} + \_____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 admin user dropping to exim gid; retaining priv uid - ╭considering: -oMa sender_host_address = $sender_host_address - ├───────text: -oMa sender_host_address = +try option gecos_pattern +try option gecos_name +try option unknown_login + ╭considering: -oMa░░sender_host_address░=░$sender_host_address + ├───────text: -oMa░░sender_host_address░=░ ├considering: $sender_host_address ├──────value: V4NET.0.0.1 ╰──(tainted) - ├──expanding: -oMa sender_host_address = $sender_host_address - ╰─────result: -oMa sender_host_address = V4NET.0.0.1 + ├───expanded: -oMa░░sender_host_address░=░$sender_host_address + ╰─────result: -oMa░░sender_host_address░=░V4NET.0.0.1 ╰──(tainted) - ╭considering: sender_host_port = $sender_host_port - ├───────text: sender_host_port = + ╭considering: ░░░░░░sender_host_port░=░$sender_host_port + ├───────text: ░░░░░░sender_host_port░=░ ├considering: $sender_host_port ├──────value: 1234 - ├──expanding: sender_host_port = $sender_host_port - ╰─────result: sender_host_port = 1234 - ╭considering: -oMaa sender_host_authenticated = $sender_host_authenticated - ├───────text: -oMaa sender_host_authenticated = + ├───expanded: ░░░░░░sender_host_port░=░$sender_host_port + ╰─────result: ░░░░░░sender_host_port░=░1234 + ╭considering: -oMaa░sender_host_authenticated░=░$sender_host_authenticated + ├───────text: -oMaa░sender_host_authenticated░=░ ├considering: $sender_host_authenticated ├──────value: AAA ╰──(tainted) - ├──expanding: -oMaa sender_host_authenticated = $sender_host_authenticated - ╰─────result: -oMaa sender_host_authenticated = AAA + ├───expanded: -oMaa░sender_host_authenticated░=░$sender_host_authenticated + ╰─────result: -oMaa░sender_host_authenticated░=░AAA ╰──(tainted) - ╭considering: -oMai authenticated_id = $authenticated_id - ├───────text: -oMai authenticated_id = + ╭considering: -oMai░authenticated_id░=░$authenticated_id + ├───────text: -oMai░authenticated_id░=░ ├considering: $authenticated_id ├──────value: philip ╰──(tainted) - ├──expanding: -oMai authenticated_id = $authenticated_id - ╰─────result: -oMai authenticated_id = philip + ├───expanded: -oMai░authenticated_id░=░$authenticated_id + ╰─────result: -oMai░authenticated_id░=░philip ╰──(tainted) - ╭considering: -oMas authenticated_sender = $authenticated_sender - ├───────text: -oMas authenticated_sender = + ╭considering: -oMas░authenticated_sender░=░$authenticated_sender + ├───────text: -oMas░authenticated_sender░=░ ├considering: $authenticated_sender ├──────value: xx@yy.zz ╰──(tainted) - ├──expanding: -oMas authenticated_sender = $authenticated_sender - ╰─────result: -oMas authenticated_sender = xx@yy.zz + ├───expanded: -oMas░authenticated_sender░=░$authenticated_sender + ╰─────result: -oMas░authenticated_sender░=░xx@yy.zz ╰──(tainted) - ╭considering: -oMi interface_address = $interface_address - ├───────text: -oMi interface_address = + ╭considering: -oMi░░interface_address░=░$interface_address + ├───────text: -oMi░░interface_address░=░ ├considering: $interface_address ├──────value: 1.1.1.1 ╰──(tainted) - ├──expanding: -oMi interface_address = $interface_address - ╰─────result: -oMi interface_address = 1.1.1.1 + ├───expanded: -oMi░░interface_address░=░$interface_address + ╰─────result: -oMi░░interface_address░=░1.1.1.1 ╰──(tainted) - ╭considering: interface_port = $interface_port - ├───────text: interface_port = + ╭considering: ░░░░░░interface_port░=░$interface_port + ├───────text: ░░░░░░interface_port░=░ ├considering: $interface_port ├──────value: 99 - ├──expanding: interface_port = $interface_port - ╰─────result: interface_port = 99 - ╭considering: -oMr received_protocol = $received_protocol - ├───────text: -oMr received_protocol = + ├───expanded: ░░░░░░interface_port░=░$interface_port + ╰─────result: ░░░░░░interface_port░=░99 + ╭considering: -oMr░░received_protocol░=░$received_protocol + ├───────text: -oMr░░received_protocol░=░ ├considering: $received_protocol ├──────value: special ╰──(tainted) - ├──expanding: -oMr received_protocol = $received_protocol - ╰─────result: -oMr received_protocol = special + ├───expanded: -oMr░░received_protocol░=░$received_protocol + ╰─────result: -oMr░░received_protocol░=░special ╰──(tainted) - ╭considering: -oMt sender_ident = $sender_ident - ├───────text: -oMt sender_ident = + ╭considering: -oMt░░sender_ident░=░$sender_ident + ├───────text: -oMt░░sender_ident░=░ ├considering: $sender_ident ├──────value: me ╰──(tainted) - ├──expanding: -oMt sender_ident = $sender_ident - ╰─────result: -oMt sender_ident = me + ├───expanded: -oMt░░sender_ident░=░$sender_ident + ╰─────result: -oMt░░sender_ident░=░me ╰──(tainted) >>>>>>>>>>>>>>>> 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 admin user dropping to exim gid; retaining priv uid - ╭considering: -oMa sender_host_address = $sender_host_address - ├───────text: -oMa sender_host_address = +try option gecos_pattern +try option gecos_name +try option unknown_login + ╭considering: -oMa░░sender_host_address░=░$sender_host_address + ├───────text: -oMa░░sender_host_address░=░ ├considering: $sender_host_address ├──────value: V4NET.0.0.1 ╰──(tainted) - ├──expanding: -oMa sender_host_address = $sender_host_address - ╰─────result: -oMa sender_host_address = V4NET.0.0.1 + ├───expanded: -oMa░░sender_host_address░=░$sender_host_address + ╰─────result: -oMa░░sender_host_address░=░V4NET.0.0.1 ╰──(tainted) - ╭considering: sender_host_port = $sender_host_port - ├───────text: sender_host_port = + ╭considering: ░░░░░░sender_host_port░=░$sender_host_port + ├───────text: ░░░░░░sender_host_port░=░ ├considering: $sender_host_port ├──────value: 1234 - ├──expanding: sender_host_port = $sender_host_port - ╰─────result: sender_host_port = 1234 - ╭considering: -oMaa sender_host_authenticated = $sender_host_authenticated - ├───────text: -oMaa sender_host_authenticated = + ├───expanded: ░░░░░░sender_host_port░=░$sender_host_port + ╰─────result: ░░░░░░sender_host_port░=░1234 + ╭considering: -oMaa░sender_host_authenticated░=░$sender_host_authenticated + ├───────text: -oMaa░sender_host_authenticated░=░ ├considering: $sender_host_authenticated ├──────value: AAA ╰──(tainted) - ├──expanding: -oMaa sender_host_authenticated = $sender_host_authenticated - ╰─────result: -oMaa sender_host_authenticated = AAA + ├───expanded: -oMaa░sender_host_authenticated░=░$sender_host_authenticated + ╰─────result: -oMaa░sender_host_authenticated░=░AAA ╰──(tainted) - ╭considering: -oMai authenticated_id = $authenticated_id - ├───────text: -oMai authenticated_id = + ╭considering: -oMai░authenticated_id░=░$authenticated_id + ├───────text: -oMai░authenticated_id░=░ ├considering: $authenticated_id ├──────value: philip ╰──(tainted) - ├──expanding: -oMai authenticated_id = $authenticated_id - ╰─────result: -oMai authenticated_id = philip + ├───expanded: -oMai░authenticated_id░=░$authenticated_id + ╰─────result: -oMai░authenticated_id░=░philip ╰──(tainted) - ╭considering: -oMas authenticated_sender = $authenticated_sender - ├───────text: -oMas authenticated_sender = + ╭considering: -oMas░authenticated_sender░=░$authenticated_sender + ├───────text: -oMas░authenticated_sender░=░ ├considering: $authenticated_sender ├──────value: xx@yy.zz ╰──(tainted) - ├──expanding: -oMas authenticated_sender = $authenticated_sender - ╰─────result: -oMas authenticated_sender = xx@yy.zz + ├───expanded: -oMas░authenticated_sender░=░$authenticated_sender + ╰─────result: -oMas░authenticated_sender░=░xx@yy.zz ╰──(tainted) - ╭considering: -oMi interface_address = $interface_address - ├───────text: -oMi interface_address = + ╭considering: -oMi░░interface_address░=░$interface_address + ├───────text: -oMi░░interface_address░=░ ├considering: $interface_address ├──────value: 1.1.1.1 ╰──(tainted) - ├──expanding: -oMi interface_address = $interface_address - ╰─────result: -oMi interface_address = 1.1.1.1 + ├───expanded: -oMi░░interface_address░=░$interface_address + ╰─────result: -oMi░░interface_address░=░1.1.1.1 ╰──(tainted) - ╭considering: interface_port = $interface_port - ├───────text: interface_port = + ╭considering: ░░░░░░interface_port░=░$interface_port + ├───────text: ░░░░░░interface_port░=░ ├considering: $interface_port ├──────value: 99 - ├──expanding: interface_port = $interface_port - ╰─────result: interface_port = 99 - ╭considering: -oMr received_protocol = $received_protocol - ├───────text: -oMr received_protocol = + ├───expanded: ░░░░░░interface_port░=░$interface_port + ╰─────result: ░░░░░░interface_port░=░99 + ╭considering: -oMr░░received_protocol░=░$received_protocol + ├───────text: -oMr░░received_protocol░=░ ├considering: $received_protocol ├──────value: special ╰──(tainted) - ├──expanding: -oMr received_protocol = $received_protocol - ╰─────result: -oMr received_protocol = special + ├───expanded: -oMr░░received_protocol░=░$received_protocol + ╰─────result: -oMr░░received_protocol░=░special ╰──(tainted) - ╭considering: ----> No lookup yet: ${if eq{black}{white}{$sender_host_name}{No}} - ├───────text: ----> No lookup yet: - ├considering: ${if eq{black}{white}{$sender_host_name}{No}} + ╭considering: ---->░No░lookup░yet:░${if░eq{black}{white}{$sender_host_name}{No}} + ├───────text: ---->░No░lookup░yet:░ + ├considering: ${if░eq{black}{white}{$sender_host_name}{No}} ╭considering: black}{white}{$sender_host_name}{No}} ├───────text: black ├considering: }{white}{$sender_host_name}{No}} - ├──expanding: black + ├───expanded: black ╰─────result: black ╭considering: white}{$sender_host_name}{No}} ├───────text: white ├considering: }{$sender_host_name}{No}} - ├──expanding: white + ├───expanded: white ╰─────result: white ├──condition: eq{black}{white} ├─────result: false ╭───scanning: $sender_host_name}{No}} ├──────value: ├───scanning: }{No}} - ├──expanding: $sender_host_name - ├─────result: + ├───expanded: $sender_host_name + ├─────result: ◀skipped▶ ╰───skipping: result is not used ╭considering: No}} ├───────text: No ├considering: }} - ├──expanding: No + ├───expanded: No ╰─────result: No ├───item-res: No - ├──expanding: ----> No lookup yet: ${if eq{black}{white}{$sender_host_name}{No}} - ╰─────result: ----> No lookup yet: No - ╭considering: -oMs sender_host_name = $sender_host_name - ├───────text: -oMs sender_host_name = + ├───expanded: ---->░No░lookup░yet:░${if░eq{black}{white}{$sender_host_name}{No}} + ╰─────result: ---->░No░lookup░yet:░No + ╭considering: -oMs░░sender_host_name░=░$sender_host_name + ├───────text: -oMs░░sender_host_name░=░ ├considering: $sender_host_name looking up host name for V4NET.0.0.1 IP address lookup yielded "ten-1.test.ex" -ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx + check dnssec require list + check dnssec request list + ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx checking addresses for ten-1.test.ex V4NET.0.0.1 OK sender_fullhost = ten-1.test.ex [V4NET.0.0.1] sender_rcvhost = ten-1.test.ex ([V4NET.0.0.1] ident=me) ├──────value: ten-1.test.ex ╰──(tainted) - ├──expanding: -oMs sender_host_name = $sender_host_name - ╰─────result: -oMs sender_host_name = ten-1.test.ex + ├───expanded: -oMs░░sender_host_name░=░$sender_host_name + ╰─────result: -oMs░░sender_host_name░=░ten-1.test.ex ╰──(tainted) - ╭considering: -oMt sender_ident = $sender_ident - ├───────text: -oMt sender_ident = + ╭considering: -oMt░░sender_ident░=░$sender_ident + ├───────text: -oMt░░sender_ident░=░ ├considering: $sender_ident ├──────value: me ╰──(tainted) - ├──expanding: -oMt sender_ident = $sender_ident - ╰─────result: -oMt sender_ident = me + ├───expanded: -oMt░░sender_ident░=░$sender_ident + ╰─────result: -oMt░░sender_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 @@ -500,12 +551,16 @@ host in "< list element: partial-lsearch;TESTSUITE/aux-fixed/0002.lsearch sender host name required, to match against partial-lsearch;TESTSUITE/aux-fixed/0002.lsearch looking up host name for V4NET.0.0.1 -DNS lookup of 1.0.0.V4NET.in-addr.arpa (PTR) using fakens -DNS lookup of 1.0.0.V4NET.in-addr.arpa (PTR) succeeded + DNS lookup of 1.0.0.V4NET.in-addr.arpa (PTR) using fakens + DNS lookup of 1.0.0.V4NET.in-addr.arpa (PTR) succeeded IP address lookup yielded "ten-1.test.ex" -DNS lookup of ten-1.test.ex (A) using fakens -DNS lookup of ten-1.test.ex (A) succeeded -ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx + check dnssec require list + ten-1.test.ex not in empty list (option unset? cannot trace name) + check dnssec request list + ten-1.test.ex not in empty list (option unset? cannot trace name) + DNS lookup of ten-1.test.ex (A) using fakens + DNS lookup of ten-1.test.ex (A) succeeded + ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx checking addresses for ten-1.test.ex Forward DNS security status: unverified V4NET.0.0.1 OK @@ -534,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 @@ -733,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 @@ -746,5 +803,8 @@ sender address = CALLER@myhost.test.ex 1.2.3.4 in "1.2.3.4/abc"? list element: 1.2.3.4/abc 1.2.3.4 in "1.2.3.4/abc"? no (malformed IPv4 address or address mask: 1.2.3.4) - search_tidyup called + ::1 in "<; aaaa:bbbb"? + ╎list element: aaaa:bbbb + ╎::1 in "<; aaaa:bbbb"? no (malformed IPv6 address or address mask: aaaa:bbbb) + search_tidyup called >>>>>>>>>>>>>>>> Exim pid=p1240 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0003 b/test/stderr/0003 index e8f65c376..e39281b37 100644 --- a/test/stderr/0003 +++ b/test/stderr/0003 @@ -253,9 +253,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -281,9 +284,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -423,9 +429,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT diff --git a/test/stderr/0004 b/test/stderr/0004 index 8da1bf2e4..d53e345cd 100644 --- a/test/stderr/0004 +++ b/test/stderr/0004 @@ -74,9 +74,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -103,9 +106,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -132,9 +138,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -161,9 +170,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -193,9 +205,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -225,9 +240,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -272,9 +290,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -301,9 +322,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -330,9 +354,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -359,9 +386,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -388,9 +418,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -537,9 +570,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -666,9 +702,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -695,9 +734,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -766,9 +808,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -795,9 +840,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -845,9 +893,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -874,9 +925,12 @@ LOG: H=(test) [1.1.1.1] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT diff --git a/test/stderr/0020 b/test/stderr/0020 index 5e9e4259f..e27c11500 100644 --- a/test/stderr/0020 +++ b/test/stderr/0020 @@ -4,6 +4,10 @@ >>> host in host_lookup? yes (matched "10.250.104.0/21") >>> looking up host name for 10.250.104.42 >>> IP address lookup yielded "manyhome.test.ex" +>>> check dnssec require list +>>> manyhome.test.ex not in empty list (option unset? cannot trace name) +>>> check dnssec request list +>>> manyhome.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for manyhome.test.ex >>> 10.250.107.163 >>> 10.250.109.49 diff --git a/test/stderr/0021 b/test/stderr/0021 index 23de65a7b..e838cb372 100644 --- a/test/stderr/0021 +++ b/test/stderr/0021 @@ -1,4 +1,5 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config trusted user admin user @@ -83,9 +84,9 @@ ok@test1 in "ok@test1 : ok@test3"? test1 in "test1"? yes (matched "test1") ok@test1 in "ok@test1 : ok@test3"? yes (matched "ok@test1") check verify = sender -ok in "!bad"? +ok in local_parts? list element: !bad -ok in "!bad"? yes (end of list) +ok in local_parts? yes (end of list) ----------- end verify ------------ sender ok@test1 verified ok check logwrite = :main,reject: mail accepted "$smtp_command" "$smtp_command_argument" @@ -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 @@ -222,9 +224,9 @@ ok@test3 in "ok@test1 : ok@test3"? test3 in "test3"? yes (matched "test3") ok@test3 in "ok@test1 : ok@test3"? yes (matched "ok@test3") check verify = sender -ok in "!bad"? +ok in local_parts? list element: !bad -ok in "!bad"? yes (end of list) +ok in local_parts? yes (end of list) ----------- end verify ------------ sender ok@test3 verified ok check logwrite = :main,reject: mail accepted "$smtp_command" "$smtp_command_argument" @@ -282,13 +284,15 @@ 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 dropping to exim gid; retaining priv uid -x in "!bad"? +x in local_parts? list element: !bad -x in "!bad"? yes (end of list) +x in local_parts? yes (end of list) +>>>>>>>>>>>>>>>> Exim pid=p1237 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => x R=accept T=appendfile LOG: MAIN @@ -299,4 +303,4 @@ LOG: smtp_connection MAIN >>>>>>>>>>>>>>>> Exim pid=p1235 (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 1999-03-02 09:44:33 rcpt accepted C=EHLO,MAIL,RCPT -1999-03-02 09:44:33 10HmaX-000000005vi-0000 10HmaX-000000005vi-0000 no recipients found in headers +1999-03-02 09:44:33 10HmaX-000000005vi-0000 no recipients found in headers diff --git a/test/stderr/0022 b/test/stderr/0022 index 2eae4f906..b803208c5 100644 --- a/test/stderr/0022 +++ b/test/stderr/0022 @@ -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 @@ -54,8 +55,8 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers search_tidyup called >>Headers after rewriting and local additions: @@ -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 @@ -137,8 +139,8 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers search_tidyup called >>Headers after rewriting and local additions: @@ -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 @@ -218,8 +221,8 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers search_tidyup called >>Headers after rewriting and local additions: @@ -379,9 +382,12 @@ LOG: H=(test) [V4NET.9.8.7] F= rejected RCPT : host data >A h >>> check hosts = +some_hosts >>> host in "+some_hosts"? >>> list element: +some_hosts ->>> host in "net-lsearch;TESTSUITE/aux-var/0022.hosts"? ->>> list element: net-lsearch;TESTSUITE/aux-var/0022.hosts ->>> host in "net-lsearch;TESTSUITE/aux-var/0022.hosts"? yes (matched "net-lsearch;TESTSUITE/aux-var/0022.hosts") +>>> start sublist some_hosts +>>> host in "net-lsearch;TESTSUITE/aux-var/0022.hosts"? +>>> ╎list element: net-lsearch;TESTSUITE/aux-var/0022.hosts +>>> ╎host in "net-lsearch;TESTSUITE/aux-var/0022.hosts"? yes (matched "net-lsearch;TESTSUITE/aux-var/0022.hosts") +>>> end sublist some_hosts +>>> data from lookup saved for cache for +some_hosts: key 'V4NET.9.8.7' value 'A host-specific message' >>> host in "+some_hosts"? yes (matched "+some_hosts") >>> deny: condition test succeeded in ACL "host_check2" >>> end of ACL "host_check2": DENY @@ -392,6 +398,9 @@ LOG: H=(test) [V4NET.9.8.7] F= rejected RCPT : host data >A >>> check hosts = +some_hosts >>> host in "+some_hosts"? >>> list element: +some_hosts +>>> start sublist some_hosts +>>> cached yes match for +some_hosts +>>> cached lookup data = A host-specific message >>> host in "+some_hosts"? yes (matched "+some_hosts" - cached) >>> deny: condition test succeeded in ACL "host_check2" >>> end of ACL "host_check2": DENY diff --git a/test/stderr/0023 b/test/stderr/0023 index 4645a98a9..78783ded6 100644 --- a/test/stderr/0023 +++ b/test/stderr/0023 @@ -37,9 +37,12 @@ >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> message: $domain gets refused >>> check domains = !refuse.test.ex @@ -75,25 +78,32 @@ >>> check domains = +local_domains >>> z in "+local_domains"? >>> list element: +local_domains ->>> z in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> list element: *.test.ex ->>> z in "test.ex : *.test.ex"? no (end of list) +>>> start sublist local_domains +>>> z in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎list element: *.test.ex +>>> z in "test.ex : *.test.ex"? no (end of list) +>>> end sublist local_domains >>> z in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "acl_1_2_3" >>> processing "accept" (TESTSUITE/test-config 60) >>> check domains = +relay_domains >>> z in "+relay_domains"? >>> list element: +relay_domains ->>> z in "relay.test.ex"? ->>> list element: relay.test.ex ->>> z in "relay.test.ex"? no (end of list) +>>> start sublist relay_domains +>>> z in "relay.test.ex"? +>>> ╎list element: relay.test.ex +>>> z in "relay.test.ex"? no (end of list) +>>> end sublist relay_domains >>> z in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "acl_1_2_3" >>> processing "accept" (TESTSUITE/test-config 61) >>> check domains = +relay_domains >>> z in "+relay_domains"? >>> list element: +relay_domains +>>> start sublist relay_domains +>>> cached no match for +relay_domains +>>> cached lookup data = NULL >>> z in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "acl_1_2_3" >>> end of ACL "acl_1_2_3": implicit DENY @@ -125,9 +135,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> message: $domain gets refused >>> check domains = !refuse.test.ex @@ -163,9 +176,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> message: $domain gets refused >>> check domains = !refuse.test.ex @@ -201,10 +217,13 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> check domains = +local_domains >>> relay.test.ex in "+local_domains"? >>> list element: +local_domains ->>> relay.test.ex in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> list element: *.test.ex ->>> relay.test.ex in "test.ex : *.test.ex"? yes (matched "*.test.ex") +>>> start sublist local_domains +>>> relay.test.ex in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎list element: *.test.ex +>>> ╎relay.test.ex in "test.ex : *.test.ex"? yes (matched "*.test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'relay.test.ex' value '*.test.ex' >>> relay.test.ex in "+local_domains"? yes (matched "+local_domains") >>> message: $domain gets refused >>> check domains = !refuse.test.ex @@ -265,10 +284,13 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT : DOMAIN EXPLICITL >>> check domains = +local_domains >>> refuse.test.ex in "+local_domains"? >>> list element: +local_domains ->>> refuse.test.ex in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> list element: *.test.ex ->>> refuse.test.ex in "test.ex : *.test.ex"? yes (matched "*.test.ex") +>>> start sublist local_domains +>>> refuse.test.ex in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎list element: *.test.ex +>>> ╎refuse.test.ex in "test.ex : *.test.ex"? yes (matched "*.test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'refuse.test.ex' value '*.test.ex' >>> refuse.test.ex in "+local_domains"? yes (matched "+local_domains") >>> message: $domain gets refused >>> check domains = !refuse.test.ex @@ -380,9 +402,11 @@ LOG: H=(test) [5.6.7.8] F= rejected RCPT >>> check hosts = +ok9_hosts >>> host in "+ok9_hosts"? >>> list element: +ok9_hosts ->>> host in "9.9.9.9"? ->>> list element: 9.9.9.9 ->>> host in "9.9.9.9"? yes (matched "9.9.9.9") +>>> start sublist ok9_hosts +>>> host in "9.9.9.9"? +>>> ╎list element: 9.9.9.9 +>>> ╎host in "9.9.9.9"? yes (matched "9.9.9.9") +>>> end sublist ok9_hosts >>> host in "+ok9_hosts"? yes (matched "+ok9_hosts") >>> accept: condition test succeeded in ACL "acl_9_9_9" >>> end of ACL "acl_9_9_9": ACCEPT @@ -391,6 +415,9 @@ LOG: H=(test) [5.6.7.8] F= rejected RCPT >>> check hosts = +ok9_hosts >>> host in "+ok9_hosts"? >>> list element: +ok9_hosts +>>> start sublist ok9_hosts +>>> cached yes match for +ok9_hosts +>>> cached lookup data = NULL >>> host in "+ok9_hosts"? yes (matched "+ok9_hosts" - cached) >>> accept: condition test succeeded in ACL "acl_9_9_9" >>> end of ACL "acl_9_9_9": ACCEPT @@ -411,9 +438,11 @@ LOG: H=(test) [5.6.7.8] F= rejected RCPT >>> check hosts = +ok9_hosts >>> host in "+ok9_hosts"? >>> list element: +ok9_hosts ->>> host in "9.9.9.9"? ->>> list element: 9.9.9.9 ->>> host in "9.9.9.9"? no (end of list) +>>> start sublist ok9_hosts +>>> host in "9.9.9.9"? +>>> ╎list element: 9.9.9.9 +>>> host in "9.9.9.9"? no (end of list) +>>> end sublist ok9_hosts >>> host in "+ok9_hosts"? no (end of list) >>> accept: condition test failed in ACL "acl_9_9_9" >>> processing "deny" (TESTSUITE/test-config 92) @@ -430,6 +459,9 @@ LOG: H=(test) [9.9.9.8] F= rejected RCPT : don't like this host >>> check hosts = +ok9_hosts >>> host in "+ok9_hosts"? >>> list element: +ok9_hosts +>>> start sublist ok9_hosts +>>> cached no match for +ok9_hosts +>>> cached lookup data = NULL >>> host in "+ok9_hosts"? no (end of list) >>> accept: condition test failed in ACL "acl_9_9_9" >>> processing "deny" (TESTSUITE/test-config 92) @@ -458,9 +490,11 @@ LOG: H=(test) [9.9.9.8] F= rejected RCPT : don't like this host >>> check hosts = +ok9_hosts >>> host in "+ok9_hosts"? >>> list element: +ok9_hosts ->>> host in "9.9.9.9"? ->>> list element: 9.9.9.9 ->>> host in "9.9.9.9"? no (end of list) +>>> start sublist ok9_hosts +>>> host in "9.9.9.9"? +>>> ╎list element: 9.9.9.9 +>>> host in "9.9.9.9"? no (end of list) +>>> end sublist ok9_hosts >>> host in "+ok9_hosts"? no (end of list) >>> accept: condition test failed in ACL "acl_9_9_9" >>> processing "deny" (TESTSUITE/test-config 92) @@ -482,6 +516,9 @@ LOG: H=(test) [9.9.9.8] F= rejected RCPT : don't like this host >>> check hosts = +ok9_hosts >>> host in "+ok9_hosts"? >>> list element: +ok9_hosts +>>> start sublist ok9_hosts +>>> cached no match for +ok9_hosts +>>> cached lookup data = NULL >>> host in "+ok9_hosts"? no (end of list) >>> accept: condition test failed in ACL "acl_9_9_9" >>> processing "deny" (TESTSUITE/test-config 92) @@ -520,9 +557,11 @@ LOG: H=(test) [9.9.9.8] F= rejected RCPT : don't like this host >>> list element: domain2 >>> y in "domain2"? no (end of list) >>> list element: +ok_senders ->>> x@y in "ok@ok.ok"? ->>> list element: ok@ok.ok ->>> x@y in "ok@ok.ok"? no (end of list) +>>> start sublist ok_senders +>>> x@y in "ok@ok.ok"? +>>> ╎list element: ok@ok.ok +>>> x@y in "ok@ok.ok"? no (end of list) +>>> end sublist ok_senders >>> x@y in "user1@domain1 : domain2 : +ok_senders"? no (end of list) >>> accept: condition test failed in ACL "acl_5_6_8" >>> end of ACL "acl_5_6_8": implicit DENY @@ -537,6 +576,9 @@ LOG: H=(test) [5.6.8.1] F= rejected RCPT >>> list element: domain2 >>> y in "domain2"? no (end of list) >>> list element: +ok_senders +>>> start sublist ok_senders +>>> cached no match for +ok_senders +>>> cached lookup data = NULL >>> x@y in "user1@domain1 : domain2 : +ok_senders"? no (end of list) >>> accept: condition test failed in ACL "acl_5_6_8" >>> end of ACL "acl_5_6_8": implicit DENY @@ -565,9 +607,11 @@ LOG: H=(test) [5.6.8.1] F= rejected RCPT >>> list element: domain2 >>> domain1 in "domain2"? no (end of list) >>> list element: +ok_senders ->>> user2@domain1 in "ok@ok.ok"? ->>> list element: ok@ok.ok ->>> user2@domain1 in "ok@ok.ok"? no (end of list) +>>> start sublist ok_senders +>>> user2@domain1 in "ok@ok.ok"? +>>> ╎list element: ok@ok.ok +>>> user2@domain1 in "ok@ok.ok"? no (end of list) +>>> end sublist ok_senders >>> user2@domain1 in "user1@domain1 : domain2 : +ok_senders"? no (end of list) >>> accept: condition test failed in ACL "acl_5_6_8" >>> end of ACL "acl_5_6_8": implicit DENY @@ -597,12 +641,15 @@ LOG: H=(test) [5.6.8.1] F= rejected RCPT >>> list element: domain2 >>> ok.ok in "domain2"? no (end of list) >>> list element: +ok_senders ->>> ok@ok.ok in "ok@ok.ok"? ->>> list element: ok@ok.ok ->>> ok.ok in "ok.ok"? ->>> list element: ok.ok ->>> ok.ok in "ok.ok"? yes (matched "ok.ok") ->>> ok@ok.ok in "ok@ok.ok"? yes (matched "ok@ok.ok") +>>> start sublist ok_senders +>>> ok@ok.ok in "ok@ok.ok"? +>>> ╎list element: ok@ok.ok +>>> ╎ok.ok in "ok.ok"? +>>> ╎ list element: ok.ok +>>> ╎ ok.ok in "ok.ok"? yes (matched "ok.ok") +>>> ╎ok@ok.ok in "ok@ok.ok"? yes (matched "ok@ok.ok") +>>> end sublist ok_senders +>>> data from lookup saved for cache for +ok_senders: key 'ok@ok.ok' value 'ok@ok.ok' >>> ok@ok.ok in "user1@domain1 : domain2 : +ok_senders"? yes (matched "+ok_senders") >>> accept: condition test succeeded in ACL "acl_5_6_8" >>> end of ACL "acl_5_6_8": ACCEPT @@ -616,6 +663,9 @@ LOG: H=(test) [5.6.8.1] F= rejected RCPT >>> list element: domain2 >>> ok.ok in "domain2"? no (end of list) >>> list element: +ok_senders +>>> start sublist ok_senders +>>> cached yes match for +ok_senders +>>> cached lookup data = ok@ok.ok >>> ok@ok.ok in "user1@domain1 : domain2 : +ok_senders"? yes (matched "+ok_senders" - cached) >>> accept: condition test succeeded in ACL "acl_5_6_8" >>> end of ACL "acl_5_6_8": ACCEPT @@ -990,16 +1040,16 @@ LOG: H=(test) [V4NET.11.12.13] F= rejected RCPT : DNSLIST (rbl.test.e >>> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing x@y ->>> x in "^ok"? +>>> x in local_parts? >>> list element: ^ok ->>> x in "^ok"? no (end of list) ->>> x in "^userx : ^cond-"? +>>> x in local_parts? no (end of list) +>>> x in local_parts? >>> list element: ^userx >>> list element: ^cond- ->>> x in "^userx : ^cond-"? no (end of list) ->>> x in "fail"? +>>> x in local_parts? no (end of list) +>>> x in local_parts? >>> list element: fail ->>> x in "fail"? no (end of list) +>>> x in local_parts? no (end of list) >>> no more routers >>> ----------- end verify ------------ >>> accept: condition test failed in ACL "acl_20_20_20" @@ -1032,12 +1082,12 @@ LOG: H=(test) [20.20.20.20] F= rejected RCPT : Sender verify failed >>> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@y ->>> userx in "^ok"? +>>> userx in local_parts? >>> list element: ^ok ->>> userx in "^ok"? no (end of list) ->>> userx in "^userx : ^cond-"? +>>> userx in local_parts? no (end of list) +>>> userx in local_parts? >>> list element: ^userx ->>> userx in "^userx : ^cond-"? yes (matched "^userx") +>>> userx in local_parts? yes (matched "^userx") >>> calling r1 router >>> routed by r1 router >>> ----------- end verify ------------ @@ -1045,16 +1095,16 @@ LOG: H=(test) [20.20.20.20] F= rejected RCPT : Sender verify failed >>> check verify = recipient >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing x1@y ->>> x1 in "^ok"? +>>> x1 in local_parts? >>> list element: ^ok ->>> x1 in "^ok"? no (end of list) ->>> x1 in "^userx : ^cond-"? +>>> x1 in local_parts? no (end of list) +>>> x1 in local_parts? >>> list element: ^userx >>> list element: ^cond- ->>> x1 in "^userx : ^cond-"? no (end of list) ->>> x1 in "fail"? +>>> x1 in local_parts? no (end of list) +>>> x1 in local_parts? >>> list element: fail ->>> x1 in "fail"? no (end of list) +>>> x1 in local_parts? no (end of list) >>> no more routers >>> ----------- end verify ------------ >>> accept: condition test failed in ACL "acl_20_20_20" @@ -1069,12 +1119,12 @@ LOG: H=(test) [20.20.20.20] F= rejected RCPT : Unrouteable addres >>> check verify = recipient >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@y ->>> userx in "^ok"? +>>> userx in local_parts? >>> list element: ^ok ->>> userx in "^ok"? no (end of list) ->>> userx in "^userx : ^cond-"? +>>> userx in local_parts? no (end of list) +>>> userx in local_parts? >>> list element: ^userx ->>> userx in "^userx : ^cond-"? yes (matched "^userx") +>>> userx in local_parts? yes (matched "^userx") >>> calling r1 router >>> routed by r1 router >>> ----------- end verify ------------ @@ -1097,28 +1147,28 @@ LOG: H=(test) [20.20.20.20] F= rejected RCPT : Unrouteable addres >>> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@y ->>> userx in "^ok"? +>>> userx in local_parts? >>> list element: ^ok ->>> userx in "^ok"? no (end of list) ->>> userx in "^userx : ^cond-"? +>>> userx in local_parts? no (end of list) +>>> userx in local_parts? >>> list element: ^userx ->>> userx in "^userx : ^cond-"? yes (matched "^userx") +>>> userx in local_parts? yes (matched "^userx") >>> calling r1 router >>> routed by r1 router >>> ----------- end verify ------------ >>> check verify = recipient >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing x1@y ->>> x1 in "^ok"? +>>> x1 in local_parts? >>> list element: ^ok ->>> x1 in "^ok"? no (end of list) ->>> x1 in "^userx : ^cond-"? +>>> x1 in local_parts? no (end of list) +>>> x1 in local_parts? >>> list element: ^userx >>> list element: ^cond- ->>> x1 in "^userx : ^cond-"? no (end of list) ->>> x1 in "fail"? +>>> x1 in local_parts? no (end of list) +>>> x1 in local_parts? >>> list element: fail ->>> x1 in "fail"? no (end of list) +>>> x1 in local_parts? no (end of list) >>> no more routers >>> ----------- end verify ------------ >>> accept: condition test failed in ACL "acl_21_21_21" @@ -1131,12 +1181,12 @@ LOG: H=(test) [21.21.21.21] F= rejected RCPT : Unrouteable addres >>> check verify = recipient >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@y ->>> userx in "^ok"? +>>> userx in local_parts? >>> list element: ^ok ->>> userx in "^ok"? no (end of list) ->>> userx in "^userx : ^cond-"? +>>> userx in local_parts? no (end of list) +>>> userx in local_parts? >>> list element: ^userx ->>> userx in "^userx : ^cond-"? yes (matched "^userx") +>>> userx in local_parts? yes (matched "^userx") >>> calling r1 router >>> routed by r1 router >>> ----------- end verify ------------ @@ -1149,16 +1199,16 @@ LOG: H=(test) [21.21.21.21] F= rejected RCPT : Unrouteable addres >>> check verify = recipient >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing fail@y ->>> fail in "^ok"? +>>> fail in local_parts? >>> list element: ^ok ->>> fail in "^ok"? no (end of list) ->>> fail in "^userx : ^cond-"? +>>> fail in local_parts? no (end of list) +>>> fail in local_parts? >>> list element: ^userx >>> list element: ^cond- ->>> fail in "^userx : ^cond-"? no (end of list) ->>> fail in "fail"? +>>> fail in local_parts? no (end of list) +>>> fail in local_parts? >>> list element: fail ->>> fail in "fail"? yes (matched "fail") +>>> fail in local_parts? yes (matched "fail") >>> calling r2 router >>> r2 router forced address failure >>> ----------- end verify ------------ @@ -1170,16 +1220,16 @@ LOG: H=(test) [21.21.21.21] F= rejected RCPT : here is a fail m >>> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing x@y ->>> x in "^ok"? +>>> x in local_parts? >>> list element: ^ok ->>> x in "^ok"? no (end of list) ->>> x in "^userx : ^cond-"? +>>> x in local_parts? no (end of list) +>>> x in local_parts? >>> list element: ^userx >>> list element: ^cond- ->>> x in "^userx : ^cond-"? no (end of list) ->>> x in "fail"? +>>> x in local_parts? no (end of list) +>>> x in local_parts? >>> list element: fail ->>> x in "fail"? no (end of list) +>>> x in local_parts? no (end of list) >>> no more routers >>> ----------- end verify ------------ >>> accept: condition test failed in ACL "acl_21_21_21" @@ -1201,16 +1251,16 @@ LOG: H=(test) [21.21.21.21] F= rejected RCPT : Sender verify failed >>> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing fail@y ->>> fail in "^ok"? +>>> fail in local_parts? >>> list element: ^ok ->>> fail in "^ok"? no (end of list) ->>> fail in "^userx : ^cond-"? +>>> fail in local_parts? no (end of list) +>>> fail in local_parts? >>> list element: ^userx >>> list element: ^cond- ->>> fail in "^userx : ^cond-"? no (end of list) ->>> fail in "fail"? +>>> fail in local_parts? no (end of list) +>>> fail in local_parts? >>> list element: fail ->>> fail in "fail"? yes (matched "fail") +>>> fail in local_parts? yes (matched "fail") >>> calling r2 router >>> r2 router forced address failure >>> ----------- end verify ------------ @@ -1272,16 +1322,16 @@ LOG: H=(test) [22.22.22.22] F= rejected RCPT >>> check !verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing x@y ->>> x in "^ok"? +>>> x in local_parts? >>> list element: ^ok ->>> x in "^ok"? no (end of list) ->>> x in "^userx : ^cond-"? +>>> x in local_parts? no (end of list) +>>> x in local_parts? >>> list element: ^userx >>> list element: ^cond- ->>> x in "^userx : ^cond-"? no (end of list) ->>> x in "fail"? +>>> x in local_parts? no (end of list) +>>> x in local_parts? >>> list element: fail ->>> x in "fail"? no (end of list) +>>> x in local_parts? no (end of list) >>> no more routers >>> ----------- end verify ------------ >>> deny: condition test succeeded in ACL "acl_23_23_23" @@ -1298,12 +1348,12 @@ LOG: H=(test) [23.23.23.0] F= rejected RCPT : Sender verify failed >>> check !verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@y ->>> userx in "^ok"? +>>> userx in local_parts? >>> list element: ^ok ->>> userx in "^ok"? no (end of list) ->>> userx in "^userx : ^cond-"? +>>> userx in local_parts? no (end of list) +>>> userx in local_parts? >>> list element: ^userx ->>> userx in "^userx : ^cond-"? yes (matched "^userx") +>>> userx in local_parts? yes (matched "^userx") >>> calling r1 router >>> routed by r1 router >>> ----------- end verify ------------ @@ -1504,8 +1554,16 @@ LOG: H=(test) [28.28.28.28] F= rejected RCPT >>> looking up host name for V4NET.0.0.3 >>> IP address lookup yielded "ten-3.test.ex" >>> alias "ten-3-alias.test.ex" +>>> check dnssec require list +>>> ten-3.test.ex not in empty list (option unset? cannot trace name) +>>> check dnssec request list +>>> ten-3.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-3.test.ex >>> V4NET.0.0.3 OK +>>> check dnssec require list +>>> ten-3-alias.test.ex not in empty list (option unset? cannot trace name) +>>> check dnssec request list +>>> ten-3-alias.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-3-alias.test.ex >>> V4NET.0.0.3 OK >>> require: condition test succeeded in ACL "acl_V4NET_0_0" @@ -1557,7 +1615,11 @@ LOG: H=(test) [V4NET.0.0.97] F=<> rejected RCPT : host lookup failed for re >>> looking up host name to force name/address consistency check >>> looking up host name for V4NET.99.99.96 >>> IP address lookup yielded "x.test.again.dns" ->>> x.test.again.dns in dns_again_means_nonexist? no (option unset) +>>> check dnssec require list +>>> x.test.again.dns not in empty list (option unset? cannot trace name) +>>> check dnssec request list +>>> x.test.again.dns not in empty list (option unset? cannot trace name) +>>> x.test.again.dns in dns_again_means_nonexist? no (option unset) >>> temporary error for host name lookup >>> accept: condition test deferred in ACL "acl_V4NET_99_99" LOG: H=(test) [V4NET.99.99.96] F=<> temporarily rejected RCPT : host lookup deferred for reverse lookup check @@ -1583,7 +1645,11 @@ LOG: H=(test) [V4NET.99.99.96] F=<> temporarily rejected RCPT : host lookup >>> looking up host name to force name/address consistency check >>> looking up host name for V4NET.99.99.96 >>> IP address lookup yielded "x.test.again.dns" ->>> x.test.again.dns in dns_again_means_nonexist? no (option unset) +>>> check dnssec require list +>>> x.test.again.dns not in empty list (option unset? cannot trace name) +>>> check dnssec request list +>>> x.test.again.dns not in empty list (option unset? cannot trace name) +>>> x.test.again.dns in dns_again_means_nonexist? no (option unset) >>> temporary error for host name lookup >>> accept: condition test succeeded in ACL "acl_V4NET_99_99" >>> end of ACL "acl_V4NET_99_99": ACCEPT @@ -1720,16 +1786,16 @@ LOG: dnslist query is too long (ignored): y+extra+extra+extra+extra+extra+extra+ >>> check verify = sender/no_details >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing x@y ->>> x in "^ok"? +>>> x in local_parts? >>> list element: ^ok ->>> x in "^ok"? no (end of list) ->>> x in "^userx : ^cond-"? +>>> x in local_parts? no (end of list) +>>> x in local_parts? >>> list element: ^userx >>> list element: ^cond- ->>> x in "^userx : ^cond-"? no (end of list) ->>> x in "fail"? +>>> x in local_parts? no (end of list) +>>> x in local_parts? >>> list element: fail ->>> x in "fail"? no (end of list) +>>> x in local_parts? no (end of list) >>> no more routers >>> ----------- end verify ------------ >>> accept: condition test failed in ACL "acl_33_33_33" diff --git a/test/stderr/0026 b/test/stderr/0026 index 5ab7d4da7..8fdd0ef01 100644 --- a/test/stderr/0026 +++ b/test/stderr/0026 @@ -14,6 +14,7 @@ >>> accept: condition test succeeded in inline ACL >>> end of inline ACL: ACCEPT >>> host in ignore_fromline_hosts? no (option unset) +LOG: 10HmbI-000000005vi-0000 qualify/rewrite: domain missing or malformed >>> using ACL "acl_data" >>> processing "deny" (TESTSUITE/test-config 21) >>> l_message: body contains trigger diff --git a/test/stderr/0037 b/test/stderr/0037 index 1f91e3d18..584120ca5 100644 --- a/test/stderr/0037 +++ b/test/stderr/0037 @@ -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 @@ -15,7 +17,6 @@ ssss bytes read from TESTSUITE/aux-var/0037.F data is an Exim filter program Filter: start of processing Filter: end of processing -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: filter-userx@test.ex unique = filter-userx@test.ex @@ -25,14 +26,17 @@ routing filter-userx@test.ex --------> check_vars router <-------- local_part=filter-userx domain=test.ex checking local_parts +filter-userx in local_parts? no (end of list) check_vars router skipped: local_parts mismatch --------> fail_read_filter router <-------- local_part=filter-userx domain=test.ex checking local_parts +filter-userx in local_parts? no (end of list) fail_read_filter router skipped: local_parts mismatch --------> prepend_filter router <-------- local_part=filter-userx domain=test.ex checking local_parts +filter-userx in local_parts? no (end of list) prepend_filter router skipped: local_parts mismatch --------> userfilter router <-------- local_part=filter-userx domain=test.ex @@ -53,7 +57,6 @@ userfilter router generated userx@test.ex routed by userfilter router envelope to: filter-userx@test.ex transport: -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: userx@test.ex unique = userx@test.ex @@ -63,22 +66,27 @@ routing userx@test.ex --------> check_vars router <-------- local_part=userx domain=test.ex checking local_parts +userx in local_parts? no (end of list) check_vars router skipped: local_parts mismatch --------> fail_read_filter router <-------- local_part=userx domain=test.ex checking local_parts +userx in local_parts? no (end of list) fail_read_filter router skipped: local_parts mismatch --------> prepend_filter router <-------- local_part=userx domain=test.ex checking local_parts +userx in local_parts? no (end of list) prepend_filter router skipped: local_parts mismatch --------> userfilter router <-------- local_part=userx domain=test.ex checking local_parts +userx in local_parts? no (end of list) userfilter router skipped: local_parts mismatch --------> user_accept1 router <-------- local_part=userx domain=test.ex checking local_parts +userx in local_parts? no (end of list) user_accept1 router skipped: local_parts mismatch --------> user_accept2 router <-------- local_part=userx domain=test.ex @@ -101,7 +109,7 @@ After routing: Remote deliveries: Failed addresses: Deferred addresses: -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1241 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => userx R=user_accept2 T=appendfile LOG: MAIN diff --git a/test/stderr/0038 b/test/stderr/0038 index 204335401..f6b3ea23b 100644 --- a/test/stderr/0038 +++ b/test/stderr/0038 @@ -10,6 +10,8 @@ >>> list element: @ >>> list element: @[] >>> test.ex in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -55,6 +57,8 @@ LOG: 10HmaX-000000005vi-0000 H=(test.ex) [V4NET.9.8.7] F=<> rejected after DATA >>> list element: @ >>> list element: @[] >>> test.ex in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -99,6 +103,8 @@ LOG: 10HmaY-000000005vi-0000 H=(test.ex) [V4NET.9.8.7] F=<> rejected after DATA >>> list element: @ >>> list element: @[] >>> test.ex in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -144,6 +150,8 @@ LOG: 10HmaZ-000000005vi-0000 H=(test.ex) [V4NET.9.8.7] F=<> rejected after DATA >>> list element: @ >>> list element: @[] >>> test.ex in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -188,6 +196,8 @@ LOG: 10HmbA-000000005vi-0000 H=(test.ex) [V4NET.9.8.7] F=<> rejected after DATA >>> list element: @ >>> list element: @[] >>> test.ex in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -261,6 +271,8 @@ LOG: 10HmbB-000000005vi-0000 H=(test.ex) [V4NET.9.8.7] F=<> rejected after DATA >>> list element: @ >>> list element: @[] >>> test.ex in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * diff --git a/test/stderr/0041 b/test/stderr/0041 index c25d0597e..8ffd7dbb1 100644 --- a/test/stderr/0041 +++ b/test/stderr/0041 @@ -70,10 +70,10 @@ LOG: H=[1.1.1.1] rejected VRFY hardfail@test.ex: 599 custom reject >>> routing ok_with_dom@test.ex >>> calling system_aliases router >>> system_aliases router declined for ok_with_dom@test.ex ->>> ok_with_dom in "userx : ok_with_dom : acceptable"? +>>> ok_with_dom in local_parts? >>> list element: userx >>> list element: ok_with_dom ->>> ok_with_dom in "userx : ok_with_dom : acceptable"? yes (matched "ok_with_dom") +>>> ok_with_dom in local_parts? yes (matched "ok_with_dom") >>> calling localuser router >>> routed by localuser router >>> using ACL "check_expn" @@ -116,11 +116,11 @@ LOG: H=[1.1.1.1] rejected EXPN postmaster >>> routing acceptable@test.ex >>> calling system_aliases router >>> system_aliases router declined for acceptable@test.ex ->>> acceptable in "userx : ok_with_dom : acceptable"? +>>> acceptable in local_parts? >>> list element: userx >>> list element: ok_with_dom >>> list element: acceptable ->>> acceptable in "userx : ok_with_dom : acceptable"? yes (matched "acceptable") +>>> acceptable in local_parts? yes (matched "acceptable") >>> calling localuser router >>> routed by localuser router >>> host in hosts_connection_nolog? no (option unset) diff --git a/test/stderr/0042 b/test/stderr/0042 index e12a18566..cb999fb99 100644 --- a/test/stderr/0042 +++ b/test/stderr/0042 @@ -14,18 +14,21 @@ >>> end of inline ACL: ACCEPT >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@test.ex ->>> test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") ->>> test.ex in "! +local_domains"? no (matched "! +local_domains") ->>> userx in "expan"? +>>> test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' +>>> test.ex in domains? no (matched "! +local_domains") +>>> userx in local_parts? >>> list element: expan ->>> userx in "expan"? no (end of list) ->>> userx in "userx"? +>>> userx in local_parts? no (end of list) +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling localuser router >>> routed by localuser router >>> processing "accept" (TESTSUITE/test-config 47) @@ -33,18 +36,21 @@ >>> end of inline ACL: ACCEPT >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing junkjunk@test.ex ->>> test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") ->>> test.ex in "! +local_domains"? no (matched "! +local_domains") ->>> junkjunk in "expan"? +>>> test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' +>>> test.ex in domains? no (matched "! +local_domains") +>>> junkjunk in local_parts? >>> list element: expan ->>> junkjunk in "expan"? no (end of list) ->>> junkjunk in "userx"? +>>> junkjunk in local_parts? no (end of list) +>>> junkjunk in local_parts? >>> list element: userx ->>> junkjunk in "userx"? no (end of list) +>>> junkjunk in local_parts? no (end of list) >>> no more routers LOG: VRFY failed for junkjunk@test.ex H=[1.1.1.1] >>> processing "accept" (TESTSUITE/test-config 47) @@ -52,15 +58,18 @@ LOG: VRFY failed for junkjunk@test.ex H=[1.1.1.1] >>> end of inline ACL: ACCEPT >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing expan@test.ex ->>> test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") ->>> test.ex in "! +local_domains"? no (matched "! +local_domains") ->>> expan in "expan"? +>>> test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' +>>> test.ex in domains? no (matched "! +local_domains") +>>> expan in local_parts? >>> list element: expan ->>> expan in "expan"? yes (matched "expan") +>>> expan in local_parts? yes (matched "expan") >>> calling fail_expansion router >>> fail_expansion router: defer for expan@test.ex >>> message: failed to expand "${if with syntax error": unknown condition "with" diff --git a/test/stderr/0043 b/test/stderr/0043 index 70b55e29e..381e84917 100644 --- a/test/stderr/0043 +++ b/test/stderr/0043 @@ -10,6 +10,8 @@ >>> list element: @ >>> list element: @[] >>> exim.test.ex in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -27,17 +29,20 @@ >>> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing junkjunk@exim.test.ex ->>> exim.test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> exim.test.ex in "exim.test.ex"? ->>> list element: exim.test.ex ->>> exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") ->>> exim.test.ex in "! +local_domains"? no (matched "! +local_domains") +>>> exim.test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> exim.test.ex in "exim.test.ex"? +>>> ╎list element: exim.test.ex +>>> ╎exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'exim.test.ex' value 'exim.test.ex' +>>> exim.test.ex in domains? no (matched "! +local_domains") >>> calling system_aliases router >>> system_aliases router declined for junkjunk@exim.test.ex ->>> junkjunk in "userx"? +>>> junkjunk in local_parts? >>> list element: userx ->>> junkjunk in "userx"? no (end of list) +>>> junkjunk in local_parts? no (end of list) >>> no more routers >>> ----------- end verify ------------ >>> require: condition test failed in ACL "check_recipient" @@ -56,27 +61,33 @@ LOG: H=(exim.test.ex) [V4NET.0.0.97] incomplete transaction (RSET) from >> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing postmaster@exim.test.ex ->>> exim.test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> exim.test.ex in "exim.test.ex"? ->>> list element: exim.test.ex ->>> exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") ->>> exim.test.ex in "! +local_domains"? no (matched "! +local_domains") +>>> exim.test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> exim.test.ex in "exim.test.ex"? +>>> ╎list element: exim.test.ex +>>> ╎exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'exim.test.ex' value 'exim.test.ex' +>>> exim.test.ex in domains? no (matched "! +local_domains") >>> calling system_aliases router >>> routed by system_aliases router >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@exim.test.ex ->>> exim.test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> exim.test.ex in "exim.test.ex"? ->>> list element: exim.test.ex ->>> exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") ->>> exim.test.ex in "! +local_domains"? no (matched "! +local_domains") +>>> exim.test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> exim.test.ex in "exim.test.ex"? +>>> ╎list element: exim.test.ex +>>> ╎exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'exim.test.ex' value 'exim.test.ex' +>>> exim.test.ex in domains? no (matched "! +local_domains") >>> calling system_aliases router >>> system_aliases router declined for userx@exim.test.ex ->>> userx in "userx"? +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling localuser router >>> routed by localuser router >>> ----------- end verify ------------ @@ -86,27 +97,33 @@ LOG: H=(exim.test.ex) [V4NET.0.0.97] incomplete transaction (RSET) from >> check !verify = recipient >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing postmaster@exim.test.ex ->>> exim.test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> exim.test.ex in "exim.test.ex"? ->>> list element: exim.test.ex ->>> exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") ->>> exim.test.ex in "! +local_domains"? no (matched "! +local_domains") +>>> exim.test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> exim.test.ex in "exim.test.ex"? +>>> ╎list element: exim.test.ex +>>> ╎exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'exim.test.ex' value 'exim.test.ex' +>>> exim.test.ex in domains? no (matched "! +local_domains") >>> calling system_aliases router >>> routed by system_aliases router >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@exim.test.ex ->>> exim.test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> exim.test.ex in "exim.test.ex"? ->>> list element: exim.test.ex ->>> exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") ->>> exim.test.ex in "! +local_domains"? no (matched "! +local_domains") +>>> exim.test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> exim.test.ex in "exim.test.ex"? +>>> ╎list element: exim.test.ex +>>> ╎exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'exim.test.ex' value 'exim.test.ex' +>>> exim.test.ex in domains? no (matched "! +local_domains") >>> calling system_aliases router >>> system_aliases router declined for userx@exim.test.ex ->>> userx in "userx"? +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling localuser router >>> routed by localuser router >>> ----------- end verify ------------ @@ -115,9 +132,12 @@ LOG: H=(exim.test.ex) [V4NET.0.0.97] incomplete transaction (RSET) from >> check domains = +local_domains >>> exim.test.ex in "+local_domains"? >>> list element: +local_domains ->>> exim.test.ex in "exim.test.ex"? ->>> list element: exim.test.ex ->>> exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") +>>> start sublist local_domains +>>> exim.test.ex in "exim.test.ex"? +>>> ╎list element: exim.test.ex +>>> ╎exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'exim.test.ex' value 'exim.test.ex' >>> exim.test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -137,17 +157,20 @@ LOG: H=(exim.test.ex) [V4NET.0.0.97] incomplete transaction (RSET) from >> check !verify = recipient >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing junkjunk@exim.test.ex ->>> exim.test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> exim.test.ex in "exim.test.ex"? ->>> list element: exim.test.ex ->>> exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") ->>> exim.test.ex in "! +local_domains"? no (matched "! +local_domains") +>>> exim.test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> exim.test.ex in "exim.test.ex"? +>>> ╎list element: exim.test.ex +>>> ╎exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'exim.test.ex' value 'exim.test.ex' +>>> exim.test.ex in domains? no (matched "! +local_domains") >>> calling system_aliases router >>> system_aliases router declined for junkjunk@exim.test.ex ->>> junkjunk in "userx"? +>>> junkjunk in local_parts? >>> list element: userx ->>> junkjunk in "userx"? no (end of list) +>>> junkjunk in local_parts? no (end of list) >>> no more routers >>> ----------- end verify ------------ >>> deny: condition test succeeded in ACL "check_recipient" @@ -169,12 +192,15 @@ LOG: H=(exim.test.ex) [V4NET.0.0.97] F= rejected RCPT j >>> check !verify = recipient >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing fail@exim.test.ex ->>> exim.test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> exim.test.ex in "exim.test.ex"? ->>> list element: exim.test.ex ->>> exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") ->>> exim.test.ex in "! +local_domains"? no (matched "! +local_domains") +>>> exim.test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> exim.test.ex in "exim.test.ex"? +>>> ╎list element: exim.test.ex +>>> ╎exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'exim.test.ex' value 'exim.test.ex' +>>> exim.test.ex in domains? no (matched "! +local_domains") >>> calling system_aliases router >>> system_aliases router forced address failure >>> ----------- end verify ------------ diff --git a/test/stderr/0044 b/test/stderr/0044 index efb5dd810..0365875be 100644 --- a/test/stderr/0044 +++ b/test/stderr/0044 @@ -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 @@ -32,6 +33,8 @@ exim.test.ex in helo_lookup_domains? no (end of list) sender_fullhost = (exim.test.ex) [V4NET.11.12.13] sender_rcvhost = [V4NET.11.12.13] (helo=exim.test.ex) set_process_info: pppp handling incoming connection from (exim.test.ex) [V4NET.11.12.13] + list element: * + host in limits_advertise_hosts? yes (matched "*") host in dsn_advertise_hosts? no (option unset) host in pipelining_advertise_hosts? list element: * @@ -40,6 +43,7 @@ host in chunking_advertise_hosts? host in chunking_advertise_hosts? no (end of list) SMTP>> 250-the.local.host.name Hello exim.test.ex [V4NET.11.12.13] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -147,8 +151,8 @@ host in ignore_fromline_hosts? no (option unset) >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers search_tidyup called >>Headers after rewriting and local additions: @@ -183,6 +187,8 @@ search_tidyup called >>> list element: @ >>> list element: @[] >>> exim.test.ex in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -215,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 @@ -248,6 +255,8 @@ exim.test.ex in helo_lookup_domains? no (end of list) sender_fullhost = (exim.test.ex) [V4NET.99.99.99] sender_rcvhost = [V4NET.99.99.99] (helo=exim.test.ex) set_process_info: pppp handling incoming connection from (exim.test.ex) [V4NET.99.99.99] + list element: * + host in limits_advertise_hosts? yes (matched "*") host in dsn_advertise_hosts? no (option unset) host in pipelining_advertise_hosts? list element: * @@ -256,6 +265,7 @@ host in chunking_advertise_hosts? host in chunking_advertise_hosts? no (end of list) SMTP>> 250-the.local.host.name Hello exim.test.ex [V4NET.99.99.99] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -311,9 +321,9 @@ routing postmaster@exim.test.ex --------> localuser router <-------- local_part=postmaster domain=exim.test.ex checking local_parts -postmaster in "userx"? +postmaster in local_parts? list element: userx -postmaster in "userx"? no (end of list) +postmaster in local_parts? no (end of list) localuser router skipped: local_parts mismatch no more routers ----------- end verify ------------ diff --git a/test/stderr/0056 b/test/stderr/0056 index 687b05ec9..ea8614cc2 100644 --- a/test/stderr/0056 +++ b/test/stderr/0056 @@ -15,9 +15,12 @@ >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -26,19 +29,24 @@ >>> check domains = +local_domains >>> otherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> otherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> otherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> otherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> otherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> otherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) >>> check domains = +relay_domains >>> otherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> otherhost.example.com in "*"? ->>> list element: * ->>> otherhost.example.com in "*"? yes (matched "*") +>>> start sublist relay_domains +>>> otherhost.example.com in "*"? +>>> ╎list element: * +>>> ╎otherhost.example.com in "*"? yes (matched "*") +>>> end sublist relay_domains +>>> data from lookup saved for cache for +relay_domains: key 'otherhost.example.com' value '*' >>> otherhost.example.com in "+relay_domains"? yes (matched "+relay_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -47,19 +55,24 @@ >>> check domains = +local_domains >>> 3rdhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> 3rdhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> 3rdhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> 3rdhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> 3rdhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> 3rdhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) >>> check domains = +relay_domains >>> 3rdhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> 3rdhost.example.com in "*"? ->>> list element: * ->>> 3rdhost.example.com in "*"? yes (matched "*") +>>> start sublist relay_domains +>>> 3rdhost.example.com in "*"? +>>> ╎list element: * +>>> ╎3rdhost.example.com in "*"? yes (matched "*") +>>> end sublist relay_domains +>>> data from lookup saved for cache for +relay_domains: key '3rdhost.example.com' value '*' >>> 3rdhost.example.com in "+relay_domains"? yes (matched "+relay_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT diff --git a/test/stderr/0057 b/test/stderr/0057 index 341a5dbdf..693ccfdd1 100644 --- a/test/stderr/0057 +++ b/test/stderr/0057 @@ -11,10 +11,10 @@ >>> list element: @[] >>> test in helo_lookup_domains? no (end of list) >>> test.ex in percent_hack_domains? ->>> list element: ! a.test.ex +>>> list element: !░a.test.ex >>> list element: !b.test.ex >>> list element: !TESTSUITE/aux-fixed/0057.d1 ->>> list element: ! TESTSUITE/aux-fixed/0057.d2 +>>> list element: !░TESTSUITE/aux-fixed/0057.d2 >>> list element: *.test.ex >>> test.ex in percent_hack_domains? no (end of list) >>> using ACL "check_recipient" @@ -22,17 +22,20 @@ >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex : *.test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex : *.test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex : *.test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT >>> anotherhost.example.com in percent_hack_domains? ->>> list element: ! a.test.ex +>>> list element: !░a.test.ex >>> list element: !b.test.ex >>> list element: !TESTSUITE/aux-fixed/0057.d1 ->>> list element: ! TESTSUITE/aux-fixed/0057.d2 +>>> list element: !░TESTSUITE/aux-fixed/0057.d2 >>> list element: *.test.ex >>> anotherhost.example.com in percent_hack_domains? no (end of list) >>> using ACL "check_recipient" @@ -40,21 +43,26 @@ >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex : *.test.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> list element: *.test.ex ->>> anotherhost.example.com in "test.ex : myhost.ex : *.test.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> ╎list element: *.test.ex +>>> anotherhost.example.com in "test.ex : myhost.ex : *.test.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex : !*"? ->>> list element: test.ex ->>> list element: !* ->>> anotherhost.example.com in "test.ex : !*"? no (matched "!*") +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex : !*"? +>>> ╎list element: test.ex +>>> ╎list element: !* +>>> ╎anotherhost.example.com in "test.ex : !*"? no (matched "!*") +>>> end sublist relay_domains +>>> data from lookup saved for cache for +relay_domains: key 'anotherhost.example.com' value '*' >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 25) @@ -63,10 +71,10 @@ >>> end of ACL "check_recipient": DENY LOG: H=(test) [V4NET.0.0.1] F= rejected RCPT : relay not permitted >>> 3rdhost.example.com in percent_hack_domains? ->>> list element: ! a.test.ex +>>> list element: !░a.test.ex >>> list element: !b.test.ex >>> list element: !TESTSUITE/aux-fixed/0057.d1 ->>> list element: ! TESTSUITE/aux-fixed/0057.d2 +>>> list element: !░TESTSUITE/aux-fixed/0057.d2 >>> list element: *.test.ex >>> 3rdhost.example.com in percent_hack_domains? no (end of list) >>> using ACL "check_recipient" @@ -74,21 +82,26 @@ LOG: H=(test) [V4NET.0.0.1] F= rejected RCPT >> check domains = +local_domains >>> 3rdhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> 3rdhost.example.com in "test.ex : myhost.ex : *.test.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> list element: *.test.ex ->>> 3rdhost.example.com in "test.ex : myhost.ex : *.test.ex"? no (end of list) +>>> start sublist local_domains +>>> 3rdhost.example.com in "test.ex : myhost.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> ╎list element: *.test.ex +>>> 3rdhost.example.com in "test.ex : myhost.ex : *.test.ex"? no (end of list) +>>> end sublist local_domains >>> 3rdhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check domains = +relay_domains >>> 3rdhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> 3rdhost.example.com in "test.ex : !*"? ->>> list element: test.ex ->>> list element: !* ->>> 3rdhost.example.com in "test.ex : !*"? no (matched "!*") +>>> start sublist relay_domains +>>> 3rdhost.example.com in "test.ex : !*"? +>>> ╎list element: test.ex +>>> ╎list element: !* +>>> ╎3rdhost.example.com in "test.ex : !*"? no (matched "!*") +>>> end sublist relay_domains +>>> data from lookup saved for cache for +relay_domains: key '3rdhost.example.com' value '*' >>> 3rdhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 25) diff --git a/test/stderr/0058 b/test/stderr/0058 index 68f177820..0901cccf2 100644 --- a/test/stderr/0058 +++ b/test/stderr/0058 @@ -15,19 +15,23 @@ >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 20) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "*"? ->>> list element: * ->>> host in "*"? yes (matched "*") +>>> start sublist relay_hosts +>>> host in "*"? +>>> ╎list element: * +>>> ╎host in "*"? yes (matched "*") +>>> end sublist relay_hosts >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -37,16 +41,21 @@ LOG: 10HmaX-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.0.0.1 >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 20) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts +>>> start sublist relay_hosts +>>> cached yes match for +relay_hosts +>>> cached lookup data = NULL >>> host in "+relay_hosts"? yes (matched "+relay_hosts" - cached) >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT diff --git a/test/stderr/0059 b/test/stderr/0059 index 327ce7f7b..056a9fdbc 100644 --- a/test/stderr/0059 +++ b/test/stderr/0059 @@ -15,9 +15,12 @@ >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -26,28 +29,34 @@ >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 22) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "!*"? ->>> list element: !* ->>> host in "!*"? no (matched "!*") +>>> start sublist relay_hosts +>>> host in "!*"? +>>> ╎list element: !* +>>> ╎host in "!*"? no (matched "!*") +>>> end sublist relay_hosts >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 23) diff --git a/test/stderr/0060 b/test/stderr/0060 index 39ea365ce..6824c5a85 100644 --- a/test/stderr/0060 +++ b/test/stderr/0060 @@ -15,9 +15,12 @@ >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -26,35 +29,41 @@ >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 23) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? ->>> list element: ! V4NET.255.0.1 ->>> list element: !V4NET.255.0.2 ->>> list element: !TESTSUITE/aux-var/0060.d1 ->>> list element: ! TESTSUITE/aux-var/0060.d2 ->>> list element: ten-1.test.ex +>>> start sublist relay_hosts +>>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? +>>> ╎list element: !░V4NET.255.0.1 +>>> ╎list element: !V4NET.255.0.2 +>>> ╎list element: !TESTSUITE/aux-var/0060.d1 +>>> ╎list element: !░TESTSUITE/aux-var/0060.d2 +>>> ╎list element: ten-1.test.ex MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=ten-1.test.ex address=V4NET.0.0.1 ->>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? yes (matched "ten-1.test.ex") +>>> ╎host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? yes (matched "ten-1.test.ex") +>>> end sublist relay_hosts >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -76,9 +85,12 @@ LOG: 10HmaX-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.0.0.1 >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -87,40 +99,46 @@ LOG: 10HmaX-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.0.0.1 >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 23) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? ->>> list element: ! V4NET.255.0.1 ->>> list element: !V4NET.255.0.2 ->>> list element: !TESTSUITE/aux-var/0060.d1 ->>> list element: ! TESTSUITE/aux-var/0060.d2 ->>> list element: ten-1.test.ex +>>> start sublist relay_hosts +>>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? +>>> ╎list element: !░V4NET.255.0.1 +>>> ╎list element: !V4NET.255.0.2 +>>> ╎list element: !TESTSUITE/aux-var/0060.d1 +>>> ╎list element: !░TESTSUITE/aux-var/0060.d2 +>>> ╎list element: ten-1.test.ex MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=ten-1.test.ex address=V4NET.0.0.1 ->>> list element: ten-5-6.test.ex +>>> ╎list element: ten-5-6.test.ex MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=ten-5-6.test.ex address=V4NET.0.0.5 >>> name=ten-5-6.test.ex address=V4NET.0.0.6 ->>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? no (end of list) +>>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? no (end of list) +>>> end sublist relay_hosts >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 25) @@ -146,9 +164,12 @@ LOG: 10HmaY-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.0.0.2 >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -157,40 +178,46 @@ LOG: 10HmaY-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.0.0.2 >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 23) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? ->>> list element: ! V4NET.255.0.1 ->>> list element: !V4NET.255.0.2 ->>> list element: !TESTSUITE/aux-var/0060.d1 ->>> list element: ! TESTSUITE/aux-var/0060.d2 ->>> list element: ten-1.test.ex +>>> start sublist relay_hosts +>>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? +>>> ╎list element: !░V4NET.255.0.1 +>>> ╎list element: !V4NET.255.0.2 +>>> ╎list element: !TESTSUITE/aux-var/0060.d1 +>>> ╎list element: !░TESTSUITE/aux-var/0060.d2 +>>> ╎list element: ten-1.test.ex MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=ten-1.test.ex address=V4NET.0.0.1 ->>> list element: ten-5-6.test.ex +>>> ╎list element: ten-5-6.test.ex MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=ten-5-6.test.ex address=V4NET.0.0.5 >>> name=ten-5-6.test.ex address=V4NET.0.0.6 ->>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? yes (matched "ten-5-6.test.ex") +>>> ╎host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? yes (matched "ten-5-6.test.ex") +>>> end sublist relay_hosts >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -212,9 +239,12 @@ LOG: 10HmaZ-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.0.0.5 >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -223,40 +253,46 @@ LOG: 10HmaZ-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.0.0.5 >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 23) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? ->>> list element: ! V4NET.255.0.1 ->>> list element: !V4NET.255.0.2 ->>> list element: !TESTSUITE/aux-var/0060.d1 ->>> list element: ! TESTSUITE/aux-var/0060.d2 ->>> list element: ten-1.test.ex +>>> start sublist relay_hosts +>>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? +>>> ╎list element: !░V4NET.255.0.1 +>>> ╎list element: !V4NET.255.0.2 +>>> ╎list element: !TESTSUITE/aux-var/0060.d1 +>>> ╎list element: !░TESTSUITE/aux-var/0060.d2 +>>> ╎list element: ten-1.test.ex MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=ten-1.test.ex address=V4NET.0.0.1 ->>> list element: ten-5-6.test.ex +>>> ╎list element: ten-5-6.test.ex MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=ten-5-6.test.ex address=V4NET.0.0.5 >>> name=ten-5-6.test.ex address=V4NET.0.0.6 ->>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? yes (matched "ten-5-6.test.ex") +>>> ╎host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? yes (matched "ten-5-6.test.ex") +>>> end sublist relay_hosts >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -278,9 +314,12 @@ LOG: 10HmbA-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.0.0.6 >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -289,28 +328,34 @@ LOG: 10HmbA-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.0.0.6 >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 23) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? ->>> list element: ! V4NET.255.0.1 ->>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? no (matched "! V4NET.255.0.1") +>>> start sublist relay_hosts +>>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? +>>> ╎list element: !░V4NET.255.0.1 +>>> ╎host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? no (matched "! V4NET.255.0.1") +>>> end sublist relay_hosts >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 25) @@ -336,9 +381,12 @@ LOG: 10HmbB-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.255.0 >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -347,29 +395,35 @@ LOG: 10HmbB-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.255.0 >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 23) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? ->>> list element: ! V4NET.255.0.1 ->>> list element: !V4NET.255.0.2 ->>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? no (matched "!V4NET.255.0.2") +>>> start sublist relay_hosts +>>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? +>>> ╎list element: !░V4NET.255.0.1 +>>> ╎list element: !V4NET.255.0.2 +>>> ╎host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? no (matched "!V4NET.255.0.2") +>>> end sublist relay_hosts >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 25) @@ -395,9 +449,12 @@ LOG: 10HmbC-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.255.0 >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -406,30 +463,37 @@ LOG: 10HmbC-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.255.0 >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 23) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? ->>> list element: ! V4NET.255.0.1 ->>> list element: !V4NET.255.0.2 ->>> list element: !TESTSUITE/aux-var/0060.d1 ->>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? no (matched "V4NET.255.0.3" in TESTSUITE/aux-var/0060.d1) +>>> start sublist relay_hosts +>>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? +>>> ╎list element: !░V4NET.255.0.1 +>>> ╎list element: !V4NET.255.0.2 +>>> ╎list element: !TESTSUITE/aux-var/0060.d1 +>>> ╎host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? no (matched "V4NET.255.0.3" in TESTSUITE/aux-var/0060.d1) +>>> end sublist relay_hosts +>>> data from lookup saved for cache for +relay_hosts: key 'V4NET.255.0.3' value 'V4NET.255.0.3' >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 25) @@ -455,9 +519,12 @@ LOG: 10HmbD-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.255.0 >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -466,31 +533,38 @@ LOG: 10HmbD-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.255.0 >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 23) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? ->>> list element: ! V4NET.255.0.1 ->>> list element: !V4NET.255.0.2 ->>> list element: !TESTSUITE/aux-var/0060.d1 ->>> list element: ! TESTSUITE/aux-var/0060.d2 ->>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? no (matched "V4NET.255.0.4" in TESTSUITE/aux-var/0060.d2) +>>> start sublist relay_hosts +>>> host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? +>>> ╎list element: !░V4NET.255.0.1 +>>> ╎list element: !V4NET.255.0.2 +>>> ╎list element: !TESTSUITE/aux-var/0060.d1 +>>> ╎list element: !░TESTSUITE/aux-var/0060.d2 +>>> ╎host in "! V4NET.255.0.1 : !V4NET.255.0.2 : !TESTSUITE/aux-var/0060.d1 : ! TESTSUITE/aux-var/0060.d2 : ten-1.test.ex : ten-5-6.test.ex"? no (matched "V4NET.255.0.4" in TESTSUITE/aux-var/0060.d2) +>>> end sublist relay_hosts +>>> data from lookup saved for cache for +relay_hosts: key 'V4NET.255.0.4' value 'V4NET.255.0.4' >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 25) diff --git a/test/stderr/0061 b/test/stderr/0061 index 7e04644e2..8aa0b1472 100644 --- a/test/stderr/0061 +++ b/test/stderr/0061 @@ -15,9 +15,12 @@ >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -26,31 +29,37 @@ >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 22) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "@"? ->>> list element: @ +>>> start sublist relay_hosts +>>> host in "@"? +>>> ╎list element: @ MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=ten-1.test.ex address=V4NET.0.0.1 ->>> host in "@"? yes (matched "@") +>>> ╎host in "@"? yes (matched "@") +>>> end sublist relay_hosts >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -72,9 +81,12 @@ LOG: 10HmaX-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.0.0.1 >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -83,31 +95,37 @@ LOG: 10HmaX-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.0.0.1 >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 22) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "@"? ->>> list element: @ +>>> start sublist relay_hosts +>>> host in "@"? +>>> ╎list element: @ MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=ten-1.test.ex address=V4NET.0.0.1 ->>> host in "@"? no (end of list) +>>> host in "@"? no (end of list) +>>> end sublist relay_hosts >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 23) diff --git a/test/stderr/0062 b/test/stderr/0062 index b9cf69bf5..521838203 100644 --- a/test/stderr/0062 +++ b/test/stderr/0062 @@ -15,9 +15,12 @@ >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -26,34 +29,44 @@ >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 25) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "*-2.test.ex : *-3-alias.test.ex"? ->>> list element: *-2.test.ex +>>> start sublist relay_hosts +>>> host in "*-2.test.ex : *-3-alias.test.ex"? +>>> ╎list element: *-2.test.ex >>> sender host name required, to match against *-2.test.ex >>> looking up host name for V4NET.0.0.1 >>> IP address lookup yielded "ten-1.test.ex" +>>> ╎ check dnssec require list +>>> ╎ ten-1.test.ex not in empty list (option unset? cannot trace name) +>>> ╎ check dnssec request list +>>> ╎ ten-1.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-1.test.ex >>> V4NET.0.0.1 OK ->>> list element: *-3-alias.test.ex ->>> host in "*-2.test.ex : *-3-alias.test.ex"? no (end of list) +>>> ╎list element: *-3-alias.test.ex +>>> host in "*-2.test.ex : *-3-alias.test.ex"? no (end of list) +>>> end sublist relay_hosts >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 26) @@ -83,9 +96,12 @@ LOG: 10HmaX-000000005vi-0000 <= userx@somehost.example.com H=ten-1.test.ex (test >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -94,33 +110,44 @@ LOG: 10HmaX-000000005vi-0000 <= userx@somehost.example.com H=ten-1.test.ex (test >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 25) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "*-2.test.ex : *-3-alias.test.ex"? ->>> list element: *-2.test.ex +>>> start sublist relay_hosts +>>> host in "*-2.test.ex : *-3-alias.test.ex"? +>>> ╎list element: *-2.test.ex >>> sender host name required, to match against *-2.test.ex >>> looking up host name for V4NET.0.0.2 >>> IP address lookup yielded "ten-2.test.ex" +>>> ╎ check dnssec require list +>>> ╎ ten-2.test.ex not in empty list (option unset? cannot trace name) +>>> ╎ check dnssec request list +>>> ╎ ten-2.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-2.test.ex >>> V4NET.0.0.2 OK ->>> host in "*-2.test.ex : *-3-alias.test.ex"? yes (matched "*-2.test.ex") +>>> ╎host in "*-2.test.ex : *-3-alias.test.ex"? yes (matched "*-2.test.ex") +>>> end sublist relay_hosts +>>> data from lookup saved for cache for +relay_hosts: key 'V4NET.0.0.2' value '*-2.test.ex' >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -146,9 +173,12 @@ LOG: 10HmaY-000000005vi-0000 <= userx@somehost.example.com H=ten-2.test.ex (test >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -157,37 +187,52 @@ LOG: 10HmaY-000000005vi-0000 <= userx@somehost.example.com H=ten-2.test.ex (test >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 25) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "*-2.test.ex : *-3-alias.test.ex"? ->>> list element: *-2.test.ex +>>> start sublist relay_hosts +>>> host in "*-2.test.ex : *-3-alias.test.ex"? +>>> ╎list element: *-2.test.ex >>> sender host name required, to match against *-2.test.ex >>> looking up host name for V4NET.0.0.3 >>> IP address lookup yielded "ten-3.test.ex" >>> alias "ten-3-alias.test.ex" +>>> ╎ check dnssec require list +>>> ╎ ten-3.test.ex not in empty list (option unset? cannot trace name) +>>> ╎ check dnssec request list +>>> ╎ ten-3.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-3.test.ex >>> V4NET.0.0.3 OK +>>> ╎ check dnssec require list +>>> ╎ ten-3-alias.test.ex not in empty list (option unset? cannot trace name) +>>> ╎ check dnssec request list +>>> ╎ ten-3-alias.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-3-alias.test.ex >>> V4NET.0.0.3 OK ->>> list element: *-3-alias.test.ex ->>> host in "*-2.test.ex : *-3-alias.test.ex"? yes (matched "*-3-alias.test.ex") +>>> ╎list element: *-3-alias.test.ex +>>> ╎host in "*-2.test.ex : *-3-alias.test.ex"? yes (matched "*-3-alias.test.ex") +>>> end sublist relay_hosts +>>> data from lookup saved for cache for +relay_hosts: key 'V4NET.0.0.3' value '*-3-alias.test.ex' >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT diff --git a/test/stderr/0063 b/test/stderr/0063 index 5b2755f0a..6af427735 100644 --- a/test/stderr/0063 +++ b/test/stderr/0063 @@ -15,9 +15,12 @@ >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -26,33 +29,43 @@ >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 23) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "^[^\d]+2"? ->>> list element: ^[^\d]+2 +>>> start sublist relay_hosts +>>> host in "^[^\d]+2"? +>>> ╎list element: ^[^\d]+2 >>> sender host name required, to match against ^[^\d]+2 >>> looking up host name for V4NET.0.0.1 >>> IP address lookup yielded "ten-1.test.ex" +>>> ╎ check dnssec require list +>>> ╎ ten-1.test.ex not in empty list (option unset? cannot trace name) +>>> ╎ check dnssec request list +>>> ╎ ten-1.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-1.test.ex >>> V4NET.0.0.1 OK ->>> host in "^[^\d]+2"? no (end of list) +>>> host in "^[^\d]+2"? no (end of list) +>>> end sublist relay_hosts >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 25) @@ -78,9 +91,12 @@ LOG: 10HmaX-000000005vi-0000 <= userx@somehost.example.com H=ten-1.test.ex (test >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -89,33 +105,44 @@ LOG: 10HmaX-000000005vi-0000 <= userx@somehost.example.com H=ten-1.test.ex (test >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 23) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "^[^\d]+2"? ->>> list element: ^[^\d]+2 +>>> start sublist relay_hosts +>>> host in "^[^\d]+2"? +>>> ╎list element: ^[^\d]+2 >>> sender host name required, to match against ^[^\d]+2 >>> looking up host name for V4NET.0.0.2 >>> IP address lookup yielded "ten-2.test.ex" +>>> ╎ check dnssec require list +>>> ╎ ten-2.test.ex not in empty list (option unset? cannot trace name) +>>> ╎ check dnssec request list +>>> ╎ ten-2.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-2.test.ex >>> V4NET.0.0.2 OK ->>> host in "^[^\d]+2"? yes (matched "^[^\d]+2") +>>> ╎host in "^[^\d]+2"? yes (matched "^[^\d]+2") +>>> end sublist relay_hosts +>>> data from lookup saved for cache for +relay_hosts: key 'V4NET.0.0.2' value '^[^\d]+2' >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT diff --git a/test/stderr/0064 b/test/stderr/0064 index 97637d627..1881d86e5 100644 --- a/test/stderr/0064 +++ b/test/stderr/0064 @@ -15,9 +15,12 @@ >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -26,33 +29,43 @@ >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 20) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "lsearch;TESTSUITE/aux-fixed/0064.hosts"? ->>> list element: lsearch;TESTSUITE/aux-fixed/0064.hosts +>>> start sublist relay_hosts +>>> host in "lsearch;TESTSUITE/aux-fixed/0064.hosts"? +>>> ╎list element: lsearch;TESTSUITE/aux-fixed/0064.hosts >>> sender host name required, to match against lsearch;TESTSUITE/aux-fixed/0064.hosts >>> looking up host name for V4NET.0.0.1 >>> IP address lookup yielded "ten-1.test.ex" +>>> ╎ check dnssec require list +>>> ╎ ten-1.test.ex not in empty list (option unset? cannot trace name) +>>> ╎ check dnssec request list +>>> ╎ ten-1.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-1.test.ex >>> V4NET.0.0.1 OK ->>> host in "lsearch;TESTSUITE/aux-fixed/0064.hosts"? no (end of list) +>>> host in "lsearch;TESTSUITE/aux-fixed/0064.hosts"? no (end of list) +>>> end sublist relay_hosts >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 22) @@ -78,9 +91,12 @@ LOG: 10HmaX-000000005vi-0000 <= userx@somehost.example.com H=ten-1.test.ex (test >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -89,33 +105,44 @@ LOG: 10HmaX-000000005vi-0000 <= userx@somehost.example.com H=ten-1.test.ex (test >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 20) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "lsearch;TESTSUITE/aux-fixed/0064.hosts"? ->>> list element: lsearch;TESTSUITE/aux-fixed/0064.hosts +>>> start sublist relay_hosts +>>> host in "lsearch;TESTSUITE/aux-fixed/0064.hosts"? +>>> ╎list element: lsearch;TESTSUITE/aux-fixed/0064.hosts >>> sender host name required, to match against lsearch;TESTSUITE/aux-fixed/0064.hosts >>> looking up host name for V4NET.0.0.2 >>> IP address lookup yielded "ten-2.test.ex" +>>> ╎ check dnssec require list +>>> ╎ ten-2.test.ex not in empty list (option unset? cannot trace name) +>>> ╎ check dnssec request list +>>> ╎ ten-2.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-2.test.ex >>> V4NET.0.0.2 OK ->>> host in "lsearch;TESTSUITE/aux-fixed/0064.hosts"? yes (matched "lsearch;TESTSUITE/aux-fixed/0064.hosts") +>>> ╎host in "lsearch;TESTSUITE/aux-fixed/0064.hosts"? yes (matched "lsearch;TESTSUITE/aux-fixed/0064.hosts") +>>> end sublist relay_hosts +>>> data from lookup saved for cache for +relay_hosts: key 'V4NET.0.0.2' value '' >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT diff --git a/test/stderr/0065 b/test/stderr/0065 index 29f3ffb75..ab282c928 100644 --- a/test/stderr/0065 +++ b/test/stderr/0065 @@ -15,9 +15,12 @@ >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -26,28 +29,34 @@ >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 25) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? ->>> list element: 1.2.3.4 ->>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? yes (matched "1.2.3.4") +>>> start sublist relay_hosts +>>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? +>>> ╎list element: 1.2.3.4 +>>> ╎host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? yes (matched "1.2.3.4") +>>> end sublist relay_hosts >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -69,9 +78,12 @@ LOG: 10HmaX-000000005vi-0000 <= userx@somehost.example.com H=(test) [1.2.3.4] P= >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -80,29 +92,35 @@ LOG: 10HmaX-000000005vi-0000 <= userx@somehost.example.com H=(test) [1.2.3.4] P= >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 25) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? ->>> list element: 1.2.3.4 ->>> list element: !1.2.3.0/24 ->>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? no (matched "!1.2.3.0/24") +>>> start sublist relay_hosts +>>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? +>>> ╎list element: 1.2.3.4 +>>> ╎list element: !1.2.3.0/24 +>>> ╎host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? no (matched "!1.2.3.0/24") +>>> end sublist relay_hosts >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 26) @@ -128,9 +146,12 @@ LOG: 10HmaY-000000005vi-0000 <= userx@somehost.example.com H=(test) [1.2.3.5] P= >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -139,30 +160,36 @@ LOG: 10HmaY-000000005vi-0000 <= userx@somehost.example.com H=(test) [1.2.3.5] P= >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 25) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? ->>> list element: 1.2.3.4 ->>> list element: !1.2.3.0/24 ->>> list element: 1.2.0.0/16 ->>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? yes (matched "1.2.0.0/16") +>>> start sublist relay_hosts +>>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? +>>> ╎list element: 1.2.3.4 +>>> ╎list element: !1.2.3.0/24 +>>> ╎list element: 1.2.0.0/16 +>>> ╎host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? yes (matched "1.2.0.0/16") +>>> end sublist relay_hosts >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -184,9 +211,12 @@ LOG: 10HmaZ-000000005vi-0000 <= userx@somehost.example.com H=(test) [1.2.4.5] P= >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -195,33 +225,39 @@ LOG: 10HmaZ-000000005vi-0000 <= userx@somehost.example.com H=(test) [1.2.4.5] P= >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 25) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? ->>> list element: 1.2.3.4 ->>> list element: !1.2.3.0/24 ->>> list element: 1.2.0.0/16 ->>> list element: net16-lsearch;TESTSUITE/aux-fixed/0065.nets ->>> list element: net24-lsearch;TESTSUITE/aux-fixed/0065.nets ->>> list element: net-lsearch;TESTSUITE/aux-fixed/0065.nets ->>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? no (end of list) +>>> start sublist relay_hosts +>>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? +>>> ╎list element: 1.2.3.4 +>>> ╎list element: !1.2.3.0/24 +>>> ╎list element: 1.2.0.0/16 +>>> ╎list element: net16-lsearch;TESTSUITE/aux-fixed/0065.nets +>>> ╎list element: net24-lsearch;TESTSUITE/aux-fixed/0065.nets +>>> ╎list element: net-lsearch;TESTSUITE/aux-fixed/0065.nets +>>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? no (end of list) +>>> end sublist relay_hosts >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 26) @@ -247,9 +283,12 @@ LOG: 10HmbA-000000005vi-0000 <= userx@somehost.example.com H=(test) [1.3.2.4] P= >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -258,31 +297,38 @@ LOG: 10HmbA-000000005vi-0000 <= userx@somehost.example.com H=(test) [1.3.2.4] P= >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 25) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? ->>> list element: 1.2.3.4 ->>> list element: !1.2.3.0/24 ->>> list element: 1.2.0.0/16 ->>> list element: net16-lsearch;TESTSUITE/aux-fixed/0065.nets ->>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? yes (matched "net16-lsearch;TESTSUITE/aux-fixed/0065.nets") +>>> start sublist relay_hosts +>>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? +>>> ╎list element: 1.2.3.4 +>>> ╎list element: !1.2.3.0/24 +>>> ╎list element: 1.2.0.0/16 +>>> ╎list element: net16-lsearch;TESTSUITE/aux-fixed/0065.nets +>>> ╎host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? yes (matched "net16-lsearch;TESTSUITE/aux-fixed/0065.nets") +>>> end sublist relay_hosts +>>> data from lookup saved for cache for +relay_hosts: key '131.111.8.2' value '' >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -304,9 +350,12 @@ LOG: 10HmbB-000000005vi-0000 <= userx@somehost.example.com H=(test) [131.111.8.2 >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -315,32 +364,39 @@ LOG: 10HmbB-000000005vi-0000 <= userx@somehost.example.com H=(test) [131.111.8.2 >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 25) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? ->>> list element: 1.2.3.4 ->>> list element: !1.2.3.0/24 ->>> list element: 1.2.0.0/16 ->>> list element: net16-lsearch;TESTSUITE/aux-fixed/0065.nets ->>> list element: net24-lsearch;TESTSUITE/aux-fixed/0065.nets ->>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? yes (matched "net24-lsearch;TESTSUITE/aux-fixed/0065.nets") +>>> start sublist relay_hosts +>>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? +>>> ╎list element: 1.2.3.4 +>>> ╎list element: !1.2.3.0/24 +>>> ╎list element: 1.2.0.0/16 +>>> ╎list element: net16-lsearch;TESTSUITE/aux-fixed/0065.nets +>>> ╎list element: net24-lsearch;TESTSUITE/aux-fixed/0065.nets +>>> ╎host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? yes (matched "net24-lsearch;TESTSUITE/aux-fixed/0065.nets") +>>> end sublist relay_hosts +>>> data from lookup saved for cache for +relay_hosts: key '192.152.98.3' value '' >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -362,9 +418,12 @@ LOG: 10HmbC-000000005vi-0000 <= userx@somehost.example.com H=(test) [192.152.98. >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -373,33 +432,40 @@ LOG: 10HmbC-000000005vi-0000 <= userx@somehost.example.com H=(test) [192.152.98. >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 24) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 25) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? ->>> list element: 1.2.3.4 ->>> list element: !1.2.3.0/24 ->>> list element: 1.2.0.0/16 ->>> list element: net16-lsearch;TESTSUITE/aux-fixed/0065.nets ->>> list element: net24-lsearch;TESTSUITE/aux-fixed/0065.nets ->>> list element: net-lsearch;TESTSUITE/aux-fixed/0065.nets ->>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? yes (matched "net-lsearch;TESTSUITE/aux-fixed/0065.nets") +>>> start sublist relay_hosts +>>> host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? +>>> ╎list element: 1.2.3.4 +>>> ╎list element: !1.2.3.0/24 +>>> ╎list element: 1.2.0.0/16 +>>> ╎list element: net16-lsearch;TESTSUITE/aux-fixed/0065.nets +>>> ╎list element: net24-lsearch;TESTSUITE/aux-fixed/0065.nets +>>> ╎list element: net-lsearch;TESTSUITE/aux-fixed/0065.nets +>>> ╎host in "1.2.3.4 : !1.2.3.0/24 : 1.2.0.0/16 : net16-lsearch;TESTSUITE/aux-fixed/0065.nets : net24-lsearch;TESTSUITE/aux-fixed/0065.nets : net-lsearch;TESTSUITE/aux-fixed/0065.nets"? yes (matched "net-lsearch;TESTSUITE/aux-fixed/0065.nets") +>>> end sublist relay_hosts +>>> data from lookup saved for cache for +relay_hosts: key '192.153.98.4' value '' >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT diff --git a/test/stderr/0066 b/test/stderr/0066 index f8857bdfa..d5a7f0fae 100644 --- a/test/stderr/0066 +++ b/test/stderr/0066 @@ -15,9 +15,12 @@ >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -26,35 +29,42 @@ >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 22) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? ->>> list element: !TESTSUITE/aux-fixed/0066.nothosts +>>> start sublist relay_hosts +>>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? +>>> ╎list element: !TESTSUITE/aux-fixed/0066.nothosts MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=black-1.test.ex address=V4NET.11.12.13 MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=ten-3.test.ex address=V4NET.0.0.3 ->>> list element: TESTSUITE/aux-var/0066.hostnets ->>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? yes (matched "1.2.3.4" in TESTSUITE/aux-var/0066.hostnets) +>>> ╎list element: TESTSUITE/aux-var/0066.hostnets +>>> ╎host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? yes (matched "1.2.3.4" in TESTSUITE/aux-var/0066.hostnets) +>>> end sublist relay_hosts +>>> data from lookup saved for cache for +relay_hosts: key '1.2.3.4' value '1.2.3.4' >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -76,9 +86,12 @@ LOG: 10HmaX-000000005vi-0000 <= userx@somehost.example.com H=(test) [1.2.3.4] P= >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -87,35 +100,42 @@ LOG: 10HmaX-000000005vi-0000 <= userx@somehost.example.com H=(test) [1.2.3.4] P= >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 22) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? ->>> list element: !TESTSUITE/aux-fixed/0066.nothosts +>>> start sublist relay_hosts +>>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? +>>> ╎list element: !TESTSUITE/aux-fixed/0066.nothosts MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=black-1.test.ex address=V4NET.11.12.13 MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=ten-3.test.ex address=V4NET.0.0.3 ->>> list element: TESTSUITE/aux-var/0066.hostnets ->>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? yes (matched "!1.2.3.0/24" in TESTSUITE/aux-var/0066.hostnets) +>>> ╎list element: TESTSUITE/aux-var/0066.hostnets +>>> ╎host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? yes (matched "!1.2.3.0/24" in TESTSUITE/aux-var/0066.hostnets) +>>> end sublist relay_hosts +>>> data from lookup saved for cache for +relay_hosts: key '1.2.3.5' value '1.2.3.0/24' >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 23) @@ -141,9 +161,12 @@ LOG: 10HmaY-000000005vi-0000 <= userx@somehost.example.com H=(test) [1.2.3.5] P= >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -152,35 +175,42 @@ LOG: 10HmaY-000000005vi-0000 <= userx@somehost.example.com H=(test) [1.2.3.5] P= >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 22) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? ->>> list element: !TESTSUITE/aux-fixed/0066.nothosts +>>> start sublist relay_hosts +>>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? +>>> ╎list element: !TESTSUITE/aux-fixed/0066.nothosts MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=black-1.test.ex address=V4NET.11.12.13 MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=ten-3.test.ex address=V4NET.0.0.3 ->>> list element: TESTSUITE/aux-var/0066.hostnets ->>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? yes (matched "1.2.0.0/16" in TESTSUITE/aux-var/0066.hostnets) +>>> ╎list element: TESTSUITE/aux-var/0066.hostnets +>>> ╎host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? yes (matched "1.2.0.0/16" in TESTSUITE/aux-var/0066.hostnets) +>>> end sublist relay_hosts +>>> data from lookup saved for cache for +relay_hosts: key '1.2.4.5' value '1.2.0.0/16' >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -202,9 +232,12 @@ LOG: 10HmaZ-000000005vi-0000 <= userx@somehost.example.com H=(test) [1.2.4.5] P= >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -213,38 +246,44 @@ LOG: 10HmaZ-000000005vi-0000 <= userx@somehost.example.com H=(test) [1.2.4.5] P= >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 22) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? ->>> list element: !TESTSUITE/aux-fixed/0066.nothosts +>>> start sublist relay_hosts +>>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? +>>> ╎list element: !TESTSUITE/aux-fixed/0066.nothosts MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=black-1.test.ex address=V4NET.11.12.13 MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=ten-3.test.ex address=V4NET.0.0.3 ->>> list element: TESTSUITE/aux-var/0066.hostnets +>>> ╎list element: TESTSUITE/aux-var/0066.hostnets >>> sender host name required, to match against *-1.test.ex >>> looking up host name for 1.3.2.4 LOG: no host name found for IP address 1.3.2.4 ->>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? no (failed to find host name for 1.3.2.4) +>>> ╎host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? no (failed to find host name for 1.3.2.4) +>>> end sublist relay_hosts >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 23) @@ -270,9 +309,12 @@ LOG: 10HmbA-000000005vi-0000 <= userx@somehost.example.com H=(test) [1.3.2.4] P= >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -281,35 +323,42 @@ LOG: 10HmbA-000000005vi-0000 <= userx@somehost.example.com H=(test) [1.3.2.4] P= >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 22) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? ->>> list element: !TESTSUITE/aux-fixed/0066.nothosts +>>> start sublist relay_hosts +>>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? +>>> ╎list element: !TESTSUITE/aux-fixed/0066.nothosts MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=black-1.test.ex address=V4NET.11.12.13 MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=ten-3.test.ex address=V4NET.0.0.3 ->>> list element: TESTSUITE/aux-var/0066.hostnets ->>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? yes (matched "net16-lsearch;TESTSUITE/aux-fixed/0066.nets" in TESTSUITE/aux-var/0066.hostnets) +>>> ╎list element: TESTSUITE/aux-var/0066.hostnets +>>> ╎host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? yes (matched "net16-lsearch;TESTSUITE/aux-fixed/0066.nets" in TESTSUITE/aux-var/0066.hostnets) +>>> end sublist relay_hosts +>>> data from lookup saved for cache for +relay_hosts: key '131.111.8.2' value 'net16-lsearch;TESTSUITE/aux-fixed/0066.nets' >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -331,9 +380,12 @@ LOG: 10HmbB-000000005vi-0000 <= userx@somehost.example.com H=(test) [131.111.8.2 >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -342,35 +394,42 @@ LOG: 10HmbB-000000005vi-0000 <= userx@somehost.example.com H=(test) [131.111.8.2 >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 22) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? ->>> list element: !TESTSUITE/aux-fixed/0066.nothosts +>>> start sublist relay_hosts +>>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? +>>> ╎list element: !TESTSUITE/aux-fixed/0066.nothosts MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=black-1.test.ex address=V4NET.11.12.13 MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=ten-3.test.ex address=V4NET.0.0.3 ->>> list element: TESTSUITE/aux-var/0066.hostnets ->>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? yes (matched "net24-lsearch;TESTSUITE/aux-fixed/0066.nets" in TESTSUITE/aux-var/0066.hostnets) +>>> ╎list element: TESTSUITE/aux-var/0066.hostnets +>>> ╎host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? yes (matched "net24-lsearch;TESTSUITE/aux-fixed/0066.nets" in TESTSUITE/aux-var/0066.hostnets) +>>> end sublist relay_hosts +>>> data from lookup saved for cache for +relay_hosts: key '192.152.98.3' value 'net24-lsearch;TESTSUITE/aux-fixed/0066.nets' >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -392,9 +451,12 @@ LOG: 10HmbC-000000005vi-0000 <= userx@somehost.example.com H=(test) [192.152.98. >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -403,40 +465,51 @@ LOG: 10HmbC-000000005vi-0000 <= userx@somehost.example.com H=(test) [192.152.98. >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 22) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? ->>> list element: !TESTSUITE/aux-fixed/0066.nothosts +>>> start sublist relay_hosts +>>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? +>>> ╎list element: !TESTSUITE/aux-fixed/0066.nothosts MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=black-1.test.ex address=V4NET.11.12.13 MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=ten-3.test.ex address=V4NET.0.0.3 ->>> list element: TESTSUITE/aux-var/0066.hostnets +>>> ╎list element: TESTSUITE/aux-var/0066.hostnets >>> sender host name required, to match against *-1.test.ex >>> looking up host name for V4NET.0.0.1 >>> IP address lookup yielded "ten-1.test.ex" +>>> ╎ check dnssec require list +>>> ╎ ten-1.test.ex not in empty list (option unset? cannot trace name) +>>> ╎ check dnssec request list +>>> ╎ ten-1.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-1.test.ex >>> V4NET.0.0.1 OK ->>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? yes (matched "*-1.test.ex" in TESTSUITE/aux-var/0066.hostnets) +>>> ╎host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? yes (matched "*-1.test.ex" in TESTSUITE/aux-var/0066.hostnets) +>>> end sublist relay_hosts +>>> data from lookup saved for cache for +relay_hosts: key 'V4NET.0.0.1' value '*-1.test.ex' >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -458,9 +531,12 @@ LOG: 10HmbD-000000005vi-0000 <= userx@somehost.example.com H=ten-1.test.ex (test >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -469,31 +545,38 @@ LOG: 10HmbD-000000005vi-0000 <= userx@somehost.example.com H=ten-1.test.ex (test >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 22) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? ->>> list element: !TESTSUITE/aux-fixed/0066.nothosts +>>> start sublist relay_hosts +>>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? +>>> ╎list element: !TESTSUITE/aux-fixed/0066.nothosts MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=black-1.test.ex address=V4NET.11.12.13 ->>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? no (matched "black-1.test.ex" in TESTSUITE/aux-fixed/0066.nothosts) +>>> ╎host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? no (matched "black-1.test.ex" in TESTSUITE/aux-fixed/0066.nothosts) +>>> end sublist relay_hosts +>>> data from lookup saved for cache for +relay_hosts: key 'V4NET.11.12.13' value 'black-1.test.ex' >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 23) @@ -519,9 +602,12 @@ LOG: 10HmbE-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.11.12 >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -530,34 +616,41 @@ LOG: 10HmbE-000000005vi-0000 <= userx@somehost.example.com H=(test) [V4NET.11.12 >>> check domains = +local_domains >>> anotherhost.example.com in "+local_domains"? >>> list element: +local_domains ->>> anotherhost.example.com in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> list element: myhost.ex ->>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> start sublist local_domains +>>> anotherhost.example.com in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎list element: myhost.ex +>>> anotherhost.example.com in "test.ex : myhost.ex"? no (end of list) +>>> end sublist local_domains >>> anotherhost.example.com in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) >>> check domains = +relay_domains >>> anotherhost.example.com in "+relay_domains"? >>> list element: +relay_domains ->>> anotherhost.example.com in "test.ex"? ->>> list element: test.ex ->>> anotherhost.example.com in "test.ex"? no (end of list) +>>> start sublist relay_domains +>>> anotherhost.example.com in "test.ex"? +>>> ╎list element: test.ex +>>> anotherhost.example.com in "test.ex"? no (end of list) +>>> end sublist relay_domains >>> anotherhost.example.com in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 22) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? ->>> list element: !TESTSUITE/aux-fixed/0066.nothosts +>>> start sublist relay_hosts +>>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? +>>> ╎list element: !TESTSUITE/aux-fixed/0066.nothosts MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=black-1.test.ex address=V4NET.11.12.13 MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=ten-3.test.ex address=V4NET.0.0.3 ->>> host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? no (matched "!ten-3.test.ex" in TESTSUITE/aux-fixed/0066.nothosts) +>>> ╎host in "!TESTSUITE/aux-fixed/0066.nothosts : TESTSUITE/aux-var/0066.hostnets"? no (matched "!ten-3.test.ex" in TESTSUITE/aux-fixed/0066.nothosts) +>>> end sublist relay_hosts +>>> data from lookup saved for cache for +relay_hosts: key 'V4NET.0.0.3' value 'ten-3.test.ex' >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT diff --git a/test/stderr/0067 b/test/stderr/0067 index 234a174bc..90015dd18 100644 --- a/test/stderr/0067 +++ b/test/stderr/0067 @@ -36,12 +36,12 @@ >>> list element: !yy@lsearch;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: lsearch*@;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: @@lsearch*;TESTSUITE/aux-fixed/0067.rej.bydomain ->>> list element: ! x@bb.cc +>>> list element: !░x@bb.cc >>> list element: *@bb.cc >>> somehost.example.com in "bb.cc"? >>> list element: bb.cc >>> somehost.example.com in "bb.cc"? no (end of list) ->>> list element: ! TESTSUITE/aux-fixed/0067.not1 +>>> list element: !░TESTSUITE/aux-fixed/0067.not1 >>> list element: !TESTSUITE/aux-fixed/0067.not2 >>> list element: bbb.ccc >>> somehost.example.com in "bbb.ccc"? @@ -60,9 +60,12 @@ >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -99,9 +102,12 @@ >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -222,9 +228,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -312,12 +321,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> list element: !yy@lsearch;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: lsearch*@;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: @@lsearch*;TESTSUITE/aux-fixed/0067.rej.bydomain ->>> list element: ! x@bb.cc +>>> list element: !░x@bb.cc >>> list element: *@bb.cc >>> d.e.f in "bb.cc"? >>> list element: bb.cc >>> d.e.f in "bb.cc"? no (end of list) ->>> list element: ! TESTSUITE/aux-fixed/0067.not1 +>>> list element: !░TESTSUITE/aux-fixed/0067.not1 >>> list element: !TESTSUITE/aux-fixed/0067.not2 >>> list element: bbb.ccc >>> d.e.f in "bbb.ccc"? @@ -336,9 +345,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -382,9 +394,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -444,12 +459,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> list element: !yy@lsearch;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: lsearch*@;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: @@lsearch*;TESTSUITE/aux-fixed/0067.rej.bydomain ->>> list element: ! x@bb.cc +>>> list element: !░x@bb.cc >>> list element: *@bb.cc >>> z.z in "bb.cc"? >>> list element: bb.cc >>> z.z in "bb.cc"? no (end of list) ->>> list element: ! TESTSUITE/aux-fixed/0067.not1 +>>> list element: !░TESTSUITE/aux-fixed/0067.not1 >>> list element: !TESTSUITE/aux-fixed/0067.not2 >>> list element: bbb.ccc >>> z.z in "bbb.ccc"? @@ -468,9 +483,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -590,12 +608,12 @@ LOG: H=(test) [1.2.3.4] F=<12345678@z.z> rejected RCPT >>> list element: !yy@lsearch;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: lsearch*@;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: @@lsearch*;TESTSUITE/aux-fixed/0067.rej.bydomain ->>> list element: ! x@bb.cc +>>> list element: !░x@bb.cc >>> list element: *@bb.cc >>> p.q.r in "bb.cc"? >>> list element: bb.cc >>> p.q.r in "bb.cc"? no (end of list) ->>> list element: ! TESTSUITE/aux-fixed/0067.not1 +>>> list element: !░TESTSUITE/aux-fixed/0067.not1 >>> list element: !TESTSUITE/aux-fixed/0067.not2 >>> list element: bbb.ccc >>> p.q.r in "bbb.ccc"? @@ -617,9 +635,12 @@ LOG: H=(test) [1.2.3.4] F=<12345678@z.z> rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -649,12 +670,12 @@ LOG: H=(test) [1.2.3.4] F=<12345678@z.z> rejected RCPT >>> list element: !yy@lsearch;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: lsearch*@;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: @@lsearch*;TESTSUITE/aux-fixed/0067.rej.bydomain ->>> list element: ! x@bb.cc +>>> list element: !░x@bb.cc >>> list element: *@bb.cc >>> m.n.o in "bb.cc"? >>> list element: bb.cc >>> m.n.o in "bb.cc"? no (end of list) ->>> list element: ! TESTSUITE/aux-fixed/0067.not1 +>>> list element: !░TESTSUITE/aux-fixed/0067.not1 >>> list element: !TESTSUITE/aux-fixed/0067.not2 >>> list element: bbb.ccc >>> m.n.o in "bbb.ccc"? @@ -733,12 +754,12 @@ LOG: H=(test) [1.2.3.4] F=<1234@m.n.o> rejected RCPT >>> list element: !yy@lsearch;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: lsearch*@;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: @@lsearch*;TESTSUITE/aux-fixed/0067.rej.bydomain ->>> list element: ! x@bb.cc +>>> list element: !░x@bb.cc >>> list element: *@bb.cc >>> a.b.c in "bb.cc"? >>> list element: bb.cc >>> a.b.c in "bb.cc"? no (end of list) ->>> list element: ! TESTSUITE/aux-fixed/0067.not1 +>>> list element: !░TESTSUITE/aux-fixed/0067.not1 >>> list element: !TESTSUITE/aux-fixed/0067.not2 >>> list element: bbb.ccc >>> a.b.c in "bbb.ccc"? @@ -784,12 +805,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> list element: !yy@lsearch;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: lsearch*@;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: @@lsearch*;TESTSUITE/aux-fixed/0067.rej.bydomain ->>> list element: ! x@bb.cc +>>> list element: !░x@bb.cc >>> list element: *@bb.cc >>> a.b.c in "bb.cc"? >>> list element: bb.cc >>> a.b.c in "bb.cc"? no (end of list) ->>> list element: ! TESTSUITE/aux-fixed/0067.not1 +>>> list element: !░TESTSUITE/aux-fixed/0067.not1 >>> list element: !TESTSUITE/aux-fixed/0067.not2 >>> list element: bbb.ccc >>> a.b.c in "bbb.ccc"? @@ -808,9 +829,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -840,12 +864,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> list element: !yy@lsearch;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: lsearch*@;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: @@lsearch*;TESTSUITE/aux-fixed/0067.rej.bydomain ->>> list element: ! x@bb.cc +>>> list element: !░x@bb.cc >>> list element: *@bb.cc >>> a.b.c in "bb.cc"? >>> list element: bb.cc >>> a.b.c in "bb.cc"? no (end of list) ->>> list element: ! TESTSUITE/aux-fixed/0067.not1 +>>> list element: !░TESTSUITE/aux-fixed/0067.not1 >>> list element: !TESTSUITE/aux-fixed/0067.not2 >>> list element: bbb.ccc >>> a.b.c in "bbb.ccc"? @@ -888,12 +912,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> list element: !yy@lsearch;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: lsearch*@;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: @@lsearch*;TESTSUITE/aux-fixed/0067.rej.bydomain ->>> list element: ! x@bb.cc +>>> list element: !░x@bb.cc >>> list element: *@bb.cc >>> z.z in "bb.cc"? >>> list element: bb.cc >>> z.z in "bb.cc"? no (end of list) ->>> list element: ! TESTSUITE/aux-fixed/0067.not1 +>>> list element: !░TESTSUITE/aux-fixed/0067.not1 >>> list element: !TESTSUITE/aux-fixed/0067.not2 >>> list element: bbb.ccc >>> z.z in "bbb.ccc"? @@ -936,12 +960,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> list element: !yy@lsearch;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: lsearch*@;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: @@lsearch*;TESTSUITE/aux-fixed/0067.rej.bydomain ->>> list element: ! x@bb.cc +>>> list element: !░x@bb.cc >>> list element: *@bb.cc >>> y.p.s in "bb.cc"? >>> list element: bb.cc >>> y.p.s in "bb.cc"? no (end of list) ->>> list element: ! TESTSUITE/aux-fixed/0067.not1 +>>> list element: !░TESTSUITE/aux-fixed/0067.not1 >>> list element: !TESTSUITE/aux-fixed/0067.not2 >>> list element: bbb.ccc >>> y.p.s in "bbb.ccc"? @@ -987,12 +1011,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> list element: !yy@lsearch;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: lsearch*@;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: @@lsearch*;TESTSUITE/aux-fixed/0067.rej.bydomain ->>> list element: ! x@bb.cc +>>> list element: !░x@bb.cc >>> list element: *@bb.cc >>> xx.yy in "bb.cc"? >>> list element: bb.cc >>> xx.yy in "bb.cc"? no (end of list) ->>> list element: ! TESTSUITE/aux-fixed/0067.not1 +>>> list element: !░TESTSUITE/aux-fixed/0067.not1 >>> list element: !TESTSUITE/aux-fixed/0067.not2 >>> list element: bbb.ccc >>> xx.yy in "bbb.ccc"? @@ -1011,9 +1035,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -1106,7 +1133,7 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> list element: !yy@lsearch;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: lsearch*@;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: @@lsearch*;TESTSUITE/aux-fixed/0067.rej.bydomain ->>> list element: ! x@bb.cc +>>> list element: !░x@bb.cc >>> bb.cc in "bb.cc"? >>> list element: bb.cc >>> bb.cc in "bb.cc"? yes (matched "bb.cc") @@ -1123,9 +1150,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -1155,7 +1185,7 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> list element: !yy@lsearch;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: lsearch*@;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: @@lsearch*;TESTSUITE/aux-fixed/0067.rej.bydomain ->>> list element: ! x@bb.cc +>>> list element: !░x@bb.cc >>> list element: *@bb.cc >>> bb.cc in "bb.cc"? >>> list element: bb.cc @@ -1193,7 +1223,7 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> list element: !yy@lsearch;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: lsearch*@;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: @@lsearch*;TESTSUITE/aux-fixed/0067.rej.bydomain ->>> list element: ! x@bb.cc +>>> list element: !░x@bb.cc >>> bbb.ccc in "bb.cc"? >>> list element: bb.cc >>> bbb.ccc in "bb.cc"? no (end of list) @@ -1201,7 +1231,7 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> bbb.ccc in "bb.cc"? >>> list element: bb.cc >>> bbb.ccc in "bb.cc"? no (end of list) ->>> list element: ! TESTSUITE/aux-fixed/0067.not1 +>>> list element: !░TESTSUITE/aux-fixed/0067.not1 >>> bbb.ccc in "bbb.ccc"? >>> list element: bbb.ccc >>> bbb.ccc in "bbb.ccc"? yes (matched "bbb.ccc") @@ -1218,9 +1248,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -1250,12 +1283,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> list element: !yy@lsearch;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: lsearch*@;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: @@lsearch*;TESTSUITE/aux-fixed/0067.rej.bydomain ->>> list element: ! x@bb.cc +>>> list element: !░x@bb.cc >>> list element: *@bb.cc >>> bbb.ccc in "bb.cc"? >>> list element: bb.cc >>> bbb.ccc in "bb.cc"? no (end of list) ->>> list element: ! TESTSUITE/aux-fixed/0067.not1 +>>> list element: !░TESTSUITE/aux-fixed/0067.not1 >>> list element: !TESTSUITE/aux-fixed/0067.not2 >>> bbb.ccc in "bbb.ccc"? >>> list element: bbb.ccc @@ -1273,9 +1306,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -1305,12 +1341,12 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT >>> list element: !yy@lsearch;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: lsearch*@;TESTSUITE/aux-fixed/0067.rej.lsearch >>> list element: @@lsearch*;TESTSUITE/aux-fixed/0067.rej.bydomain ->>> list element: ! x@bb.cc +>>> list element: !░x@bb.cc >>> list element: *@bb.cc >>> bbb.ccc in "bb.cc"? >>> list element: bb.cc >>> bbb.ccc in "bb.cc"? no (end of list) ->>> list element: ! TESTSUITE/aux-fixed/0067.not1 +>>> list element: !░TESTSUITE/aux-fixed/0067.not1 >>> list element: !TESTSUITE/aux-fixed/0067.not2 >>> list element: bbb.ccc >>> bbb.ccc in "bbb.ccc"? diff --git a/test/stderr/0069 b/test/stderr/0069 index 449102e17..741ef0f07 100644 --- a/test/stderr/0069 +++ b/test/stderr/0069 @@ -7,6 +7,10 @@ >>> sender host name required, to match against ^ten-1\.test\.ex >>> looking up host name for V4NET.0.0.1 >>> IP address lookup yielded "ten-1.test.ex" +>>> check dnssec require list +>>> ten-1.test.ex not in empty list (option unset? cannot trace name) +>>> check dnssec request list +>>> ten-1.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-1.test.ex >>> V4NET.0.0.1 OK >>> host in sender_unqualified_hosts? yes (matched "^ten-1\.test\.ex") diff --git a/test/stderr/0070 b/test/stderr/0070 index 21208fd55..18fe9e93e 100644 --- a/test/stderr/0070 +++ b/test/stderr/0070 @@ -136,6 +136,10 @@ MUNGED: ::1 will be omitted in what follows >>> verifying EHLO/HELO argument "ten-1.test.ex" >>> looking up host name for V4NET.0.0.1 >>> IP address lookup yielded "ten-1.test.ex" +>>> check dnssec require list +>>> ten-1.test.ex not in empty list (option unset? cannot trace name) +>>> check dnssec request list +>>> ten-1.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-1.test.ex >>> V4NET.0.0.1 OK >>> matched host name @@ -163,8 +167,16 @@ MUNGED: ::1 will be omitted in what follows >>> looking up host name for V4NET.0.0.3 >>> IP address lookup yielded "ten-3.test.ex" >>> alias "ten-3-alias.test.ex" +>>> check dnssec require list +>>> ten-3.test.ex not in empty list (option unset? cannot trace name) +>>> check dnssec request list +>>> ten-3.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-3.test.ex >>> V4NET.0.0.3 OK +>>> check dnssec require list +>>> ten-3-alias.test.ex not in empty list (option unset? cannot trace name) +>>> check dnssec request list +>>> ten-3-alias.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-3-alias.test.ex >>> V4NET.0.0.3 OK >>> matched host name @@ -175,11 +187,13 @@ MUNGED: ::1 will be omitted in what follows >>> matched alias ten-3-alias.test.ex >>> verifying EHLO/HELO argument "ten-3xtra.test.ex" >>> getting IP address for ten-3xtra.test.ex ->>> ten-3xtra.test.ex in ""? ->>> ten-3xtra.test.ex in ""? no (end of list) ->>> ten-3xtra.test.ex in "*"? ->>> list element: * ->>> ten-3xtra.test.ex in "*"? yes (matched "*") +>>> check dnssec require list +>>> ten-3xtra.test.ex in ""? +>>> ten-3xtra.test.ex in ""? no (end of list) +>>> check dnssec request list +>>> ten-3xtra.test.ex in "*"? +>>> list element: * +>>> ten-3xtra.test.ex in "*"? yes (matched "*") >>> IP address for ten-3xtra.test.ex matches calling address >>> Forward DNS security status: unverified >>> host in hosts_connection_nolog? no (option unset) @@ -201,14 +215,20 @@ MUNGED: ::1 will be omitted in what follows >>> verifying EHLO/HELO argument "rhubarb" >>> looking up host name for V4NET.0.0.1 >>> IP address lookup yielded "ten-1.test.ex" +>>> check dnssec require list +>>> ten-1.test.ex not in empty list (option unset? cannot trace name) +>>> check dnssec request list +>>> ten-1.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-1.test.ex >>> V4NET.0.0.1 OK >>> getting IP address for rhubarb ->>> rhubarb in ""? ->>> rhubarb in ""? no (end of list) ->>> rhubarb in "*"? ->>> list element: * ->>> rhubarb in "*"? yes (matched "*") +>>> check dnssec require list +>>> rhubarb in ""? +>>> rhubarb in ""? no (end of list) +>>> check dnssec request list +>>> rhubarb in "*"? +>>> list element: * +>>> rhubarb in "*"? yes (matched "*") LOG: rejected "EHLO rhubarb" from (rhubarb) [V4NET.0.0.1] >>> host in hosts_connection_nolog? no (option unset) >>> host in host_lookup? no (option unset) @@ -235,11 +255,13 @@ MUNGED: ::1 will be omitted in what follows >>> looking up host name for 99.99.99.99 >>> Test harness: host name lookup returns DEFER >>> getting IP address for rhubarb ->>> rhubarb in ""? ->>> rhubarb in ""? no (end of list) ->>> rhubarb in "*"? ->>> list element: * ->>> rhubarb in "*"? yes (matched "*") +>>> check dnssec require list +>>> rhubarb in ""? +>>> rhubarb in ""? no (end of list) +>>> check dnssec request list +>>> rhubarb in "*"? +>>> list element: * +>>> rhubarb in "*"? yes (matched "*") LOG: temporarily rejected "EHLO rhubarb" from (rhubarb) [99.99.99.99] >>> host in hosts_connection_nolog? no (option unset) >>> host in host_lookup? no (option unset) @@ -339,6 +361,8 @@ MUNGED: ::1 will be omitted in what follows >>> list element: @ >>> list element: @[] >>> rhubarb in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -353,11 +377,13 @@ MUNGED: ::1 will be omitted in what follows >>> looking up host name for 99.99.99.99 >>> Test harness: host name lookup returns DEFER >>> getting IP address for rhubarb ->>> rhubarb in ""? ->>> rhubarb in ""? no (end of list) ->>> rhubarb in "*"? ->>> list element: * ->>> rhubarb in "*"? yes (matched "*") +>>> check dnssec require list +>>> rhubarb in ""? +>>> rhubarb in ""? no (end of list) +>>> check dnssec request list +>>> rhubarb in "*"? +>>> list element: * +>>> rhubarb in "*"? yes (matched "*") >>> require: condition test failed in ACL "rcpt" >>> end of ACL "rcpt": not OK LOG: H=(rhubarb) [99.99.99.99] F= rejected RCPT : helo not verified diff --git a/test/stderr/0077 b/test/stderr/0077 index 855456f48..5eb31ed01 100644 --- a/test/stderr/0077 +++ b/test/stderr/0077 @@ -14,11 +14,11 @@ >>> processing "deny" (TESTSUITE/test-config 18) >>> check hosts = ! @ : ! localhost >>> host in "! @ : ! localhost"? ->>> list element: ! @ +>>> list element: !░@ MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=myhost.test.ex address=V4NET.10.10.10 ->>> list element: ! localhost +>>> list element: !░localhost MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=localhost address=127.0.0.1 @@ -28,9 +28,12 @@ MUNGED: ::1 will be omitted in what follows >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -50,7 +53,7 @@ MUNGED: ::1 will be omitted in what follows >>> processing "deny" (TESTSUITE/test-config 18) >>> check hosts = ! @ : ! localhost >>> host in "! @ : ! localhost"? ->>> list element: ! @ +>>> list element: !░@ MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=myhost.test.ex address=V4NET.10.10.10 @@ -60,9 +63,12 @@ MUNGED: ::1 will be omitted in what follows >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : myhost.test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : myhost.test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : myhost.test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : myhost.test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -82,11 +88,11 @@ MUNGED: ::1 will be omitted in what follows >>> processing "deny" (TESTSUITE/test-config 18) >>> check hosts = ! @ : ! localhost >>> host in "! @ : ! localhost"? ->>> list element: ! @ +>>> list element: !░@ MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=myhost.test.ex address=V4NET.10.10.10 ->>> list element: ! localhost +>>> list element: !░localhost MUNGED: ::1 will be omitted in what follows >>> get[host|ipnode]byname[2] looked up these IP addresses: >>> name=localhost address=127.0.0.1 diff --git a/test/stderr/0078 b/test/stderr/0078 index 58266f252..56cc9c81a 100644 --- a/test/stderr/0078 +++ b/test/stderr/0078 @@ -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 @@ -7,9 +8,12 @@ routing xx@mxt6.test.ex --------> lookuphost router <-------- local_part=xx domain=mxt6.test.ex checking domains +mxt6.test.ex in "test.ex : myhost.test.ex"? no (end of list) +mxt6.test.ex in domains? yes (end of list) calling lookuphost router lookuphost router called for xx@mxt6.test.ex domain = mxt6.test.ex +main lookup for domain set transport remote_smtp queued for remote_smtp transport: local_part = xx domain = mxt6.test.ex @@ -21,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 @@ -29,14 +34,18 @@ routing myhost.test.ex@mxt1.test.ex --------> lookuphost router <-------- local_part=myhost.test.ex domain=mxt1.test.ex checking domains +mxt1.test.ex in "test.ex : myhost.test.ex"? no (end of list) +mxt1.test.ex in domains? yes (end of list) calling lookuphost router lookuphost router called for myhost.test.ex@mxt1.test.ex domain = mxt1.test.ex +main lookup for domain lowest numbered MX record points to local host: mxt1.test.ex: passed to next router (self = pass) lookuphost router passed for myhost.test.ex@mxt1.test.ex --------> self router <-------- local_part=myhost.test.ex domain=mxt1.test.ex checking domains +mxt1.test.ex in domains? yes (end of list) self_hostname=eximtesthost.test.ex calling self router self router called for myhost.test.ex@mxt1.test.ex @@ -57,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 @@ -65,14 +75,18 @@ routing xx@mxt1.test.ex --------> lookuphost router <-------- local_part=xx domain=mxt1.test.ex checking domains +mxt1.test.ex in "test.ex : myhost.test.ex"? no (end of list) +mxt1.test.ex in domains? yes (end of list) calling lookuphost router lookuphost router called for xx@mxt1.test.ex domain = mxt1.test.ex +main lookup for domain lowest numbered MX record points to local host: mxt1.test.ex: passed to next router (self = pass) lookuphost router passed for xx@mxt1.test.ex --------> self router <-------- local_part=xx domain=mxt1.test.ex checking domains +mxt1.test.ex in domains? yes (end of list) self_hostname=eximtesthost.test.ex calling self router self router called for xx@mxt1.test.ex @@ -87,6 +101,7 @@ self router passed for xx@mxt1.test.ex --------> self2 router <-------- local_part=xx domain=mxt1.test.ex checking domains +mxt1.test.ex in domains? yes (end of list) self_hostname=eximtesthost.test.ex calling self2 router self2 router called for xx@mxt1.test.ex @@ -107,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 @@ -115,9 +131,12 @@ routing xx@not-exist.test.ex --------> lookuphost router <-------- local_part=xx domain=not-exist.test.ex checking domains +not-exist.test.ex in "test.ex : myhost.test.ex"? no (end of list) +not-exist.test.ex in domains? yes (end of list) calling lookuphost router lookuphost router called for xx@not-exist.test.ex domain = not-exist.test.ex +main lookup for domain lookuphost router declined for xx@not-exist.test.ex "more" is false: skipping remaining routers no more routers diff --git a/test/stderr/0079 b/test/stderr/0079 index 0ce7d257f..c1cf6ab8d 100644 --- a/test/stderr/0079 +++ b/test/stderr/0079 @@ -10,6 +10,8 @@ >>> list element: @ >>> list element: @[] >>> exim.test.ex in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * diff --git a/test/stderr/0080 b/test/stderr/0080 index e69ce1df2..0bcfd2526 100644 --- a/test/stderr/0080 +++ b/test/stderr/0080 @@ -10,6 +10,8 @@ >>> list element: @ >>> list element: @[] >>> exim.test.ex in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * diff --git a/test/stderr/0084 b/test/stderr/0084 index d805f7a61..c1db2a3e6 100644 --- a/test/stderr/0084 +++ b/test/stderr/0084 @@ -1,4 +1,5 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config admin user >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> diff --git a/test/stderr/0085 b/test/stderr/0085 index 520e9de95..6637329c8 100644 --- a/test/stderr/0085 +++ b/test/stderr/0085 @@ -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 @@ -19,22 +20,22 @@ routing x@y.z --------> smart1 router <-------- local_part=x domain=y.z checking domains -y.z in "smart.domain"? +y.z in domains? list element: smart.domain -y.z in "smart.domain"? no (end of list) +y.z in domains? no (end of list) smart1 router skipped: domains mismatch --------> fail_remote_domains router <-------- local_part=x domain=y.z checking domains -y.z in "! +local_domains"? - list element: ! +local_domains +y.z in domains? + list element: !░+local_domains start sublist local_domains y.z in "test.ex : myhost.test.ex"? ╎list element: test.ex ╎list element: myhost.test.ex y.z in "test.ex : myhost.test.ex"? no (end of list) end sublist local_domains -y.z in "! +local_domains"? yes (end of list) +y.z in domains? yes (end of list) calling fail_remote_domains router rda_interpret (string): ':fail: unrouteable mail domain "$domain"' expanded: ':fail: unrouteable mail domain "y.z"' (tainted) @@ -51,9 +52,9 @@ routing x@smart.domain --------> smart1 router <-------- local_part=x domain=smart.domain checking domains -smart.domain in "smart.domain"? +smart.domain in domains? list element: smart.domain - smart.domain in "smart.domain"? yes (matched "smart.domain") + smart.domain in domains? yes (matched "smart.domain") checking local_parts search_open: lsearch "TESTSUITE/aux-fixed/0085.data" search_find: file="TESTSUITE/aux-fixed/0085.data" @@ -66,10 +67,10 @@ checking local_parts file lookup required for smart.domain in TESTSUITE/aux-fixed/0085.data creating new cache entry - lookup yielded: x : y : abc@d.e.f -x in "x : y : abc@d.e.f"? + lookup yielded: x░:░y░:░abc@d.e.f +x in local_parts? list element: x - x in "x : y : abc@d.e.f"? yes (matched "x") + x in local_parts? yes (matched "x") checking senders search_open: lsearch "TESTSUITE/aux-fixed/0085.data" cached open @@ -82,8 +83,8 @@ checking senders type=lsearch key="smart.domain" opts=NULL cached data used for lookup of smart.domain in TESTSUITE/aux-fixed/0085.data - lookup yielded: x : y : abc@d.e.f -abc@d.e.f in "x : y : abc@d.e.f"? + lookup yielded: x░:░y░:░abc@d.e.f +abc@d.e.f in senders? list element: x address match test: subject=abc@d.e.f pattern=x d.e.f in "x"? @@ -99,7 +100,7 @@ abc@d.e.f in "x : y : abc@d.e.f"? d.e.f in "d.e.f"? list element: d.e.f d.e.f in "d.e.f"? yes (matched "d.e.f") - abc@d.e.f in "x : y : abc@d.e.f"? yes (matched "abc@d.e.f") + abc@d.e.f in senders? yes (matched "abc@d.e.f") calling smart1 router smart1 router called for x@smart.domain domain = smart.domain @@ -125,29 +126,29 @@ routing x@test.ex --------> smart1 router <-------- local_part=x domain=test.ex checking domains -test.ex in "smart.domain"? +test.ex in domains? list element: smart.domain -test.ex in "smart.domain"? no (end of list) +test.ex in domains? no (end of list) smart1 router skipped: domains mismatch --------> fail_remote_domains router <-------- local_part=x domain=test.ex checking domains -test.ex in "! +local_domains"? - list element: ! +local_domains +test.ex in domains? + list element: !░+local_domains start sublist local_domains test.ex in "test.ex : myhost.test.ex"? ╎list element: test.ex ╎test.ex in "test.ex : myhost.test.ex"? yes (matched "test.ex") end sublist local_domains data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' - test.ex in "! +local_domains"? no (matched "! +local_domains") + test.ex in domains? no (matched "! +local_domains") fail_remote_domains router skipped: domains mismatch --------> smart2 router <-------- local_part=x domain=test.ex checking domains -test.ex in "test.ex"? +test.ex in domains? list element: test.ex - test.ex in "test.ex"? yes (matched "test.ex") + test.ex in domains? yes (matched "test.ex") checking local_parts search_open: lsearch "TESTSUITE/aux-fixed/0085.data" cached open @@ -161,10 +162,10 @@ checking local_parts file lookup required for test.ex in TESTSUITE/aux-fixed/0085.data creating new cache entry - lookup yielded: x : y : abc@d.e.f -x in "x : y : abc@d.e.f"? + lookup yielded: x░:░y░:░abc@d.e.f +x in local_parts? list element: x - x in "x : y : abc@d.e.f"? yes (matched "x") + x in local_parts? yes (matched "x") checking senders search_open: lsearch "TESTSUITE/aux-fixed/0085.data" cached open @@ -177,8 +178,8 @@ checking senders type=lsearch key="test.ex" opts=NULL cached data used for lookup of test.ex in TESTSUITE/aux-fixed/0085.data - lookup yielded: x : y : abc@d.e.f -abc@d.e.f in "x : y : abc@d.e.f"? + lookup yielded: x░:░y░:░abc@d.e.f +abc@d.e.f in senders? list element: x address match test: subject=abc@d.e.f pattern=x d.e.f in "x"? @@ -194,7 +195,7 @@ abc@d.e.f in "x : y : abc@d.e.f"? d.e.f in "d.e.f"? list element: d.e.f d.e.f in "d.e.f"? yes (matched "d.e.f") - abc@d.e.f in "x : y : abc@d.e.f"? yes (matched "abc@d.e.f") + abc@d.e.f in senders? yes (matched "abc@d.e.f") checking require_files search_open: lsearch "TESTSUITE/aux-fixed/0085.data" cached open @@ -232,15 +233,15 @@ routing x@myhost.test.ex --------> smart1 router <-------- local_part=x domain=myhost.test.ex checking domains -myhost.test.ex in "smart.domain"? +myhost.test.ex in domains? list element: smart.domain -myhost.test.ex in "smart.domain"? no (end of list) +myhost.test.ex in domains? no (end of list) smart1 router skipped: domains mismatch --------> fail_remote_domains router <-------- local_part=x domain=myhost.test.ex checking domains -myhost.test.ex in "! +local_domains"? - list element: ! +local_domains +myhost.test.ex in domains? + list element: !░+local_domains start sublist local_domains myhost.test.ex in "test.ex : myhost.test.ex"? ╎list element: test.ex @@ -248,19 +249,20 @@ myhost.test.ex in "! +local_domains"? ╎myhost.test.ex in "test.ex : myhost.test.ex"? yes (matched "myhost.test.ex") end sublist local_domains data from lookup saved for cache for +local_domains: key 'myhost.test.ex' value 'myhost.test.ex' - myhost.test.ex in "! +local_domains"? no (matched "! +local_domains") + myhost.test.ex in domains? no (matched "! +local_domains") fail_remote_domains router skipped: domains mismatch --------> smart2 router <-------- local_part=x domain=myhost.test.ex checking domains -myhost.test.ex in "test.ex"? +myhost.test.ex in domains? list element: test.ex -myhost.test.ex in "test.ex"? no (end of list) +myhost.test.ex in domains? no (end of list) smart2 router skipped: domains mismatch 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 @@ -281,22 +283,22 @@ routing x@y.z --------> smart1 router <-------- local_part=x domain=y.z checking domains -y.z in "smart.domain"? +y.z in domains? list element: smart.domain -y.z in "smart.domain"? no (end of list) +y.z in domains? no (end of list) smart1 router skipped: domains mismatch --------> fail_remote_domains router <-------- local_part=x domain=y.z checking domains -y.z in "! +local_domains"? - list element: ! +local_domains +y.z in domains? + list element: !░+local_domains start sublist local_domains y.z in "test.ex : myhost.test.ex"? ╎list element: test.ex ╎list element: myhost.test.ex y.z in "test.ex : myhost.test.ex"? no (end of list) end sublist local_domains -y.z in "! +local_domains"? yes (end of list) +y.z in domains? yes (end of list) calling fail_remote_domains router rda_interpret (string): ':fail: unrouteable mail domain "$domain"' expanded: ':fail: unrouteable mail domain "y.z"' (tainted) @@ -313,9 +315,9 @@ routing x@smart.domain --------> smart1 router <-------- local_part=x domain=smart.domain checking domains -smart.domain in "smart.domain"? +smart.domain in domains? list element: smart.domain - smart.domain in "smart.domain"? yes (matched "smart.domain") + smart.domain in domains? yes (matched "smart.domain") checking local_parts search_open: lsearch "TESTSUITE/aux-fixed/0085.data" search_find: file="TESTSUITE/aux-fixed/0085.data" @@ -328,10 +330,10 @@ checking local_parts file lookup required for smart.domain in TESTSUITE/aux-fixed/0085.data creating new cache entry - lookup yielded: x : y : abc@d.e.f -x in "x : y : abc@d.e.f"? + lookup yielded: x░:░y░:░abc@d.e.f +x in local_parts? list element: x - x in "x : y : abc@d.e.f"? yes (matched "x") + x in local_parts? yes (matched "x") checking senders search_open: lsearch "TESTSUITE/aux-fixed/0085.data" cached open @@ -344,8 +346,8 @@ checking senders type=lsearch key="smart.domain" opts=NULL cached data used for lookup of smart.domain in TESTSUITE/aux-fixed/0085.data - lookup yielded: x : y : abc@d.e.f -CALLER@myhost.test.ex in "x : y : abc@d.e.f"? + lookup yielded: x░:░y░:░abc@d.e.f +CALLER@myhost.test.ex in senders? list element: x address match test: subject=CALLER@myhost.test.ex pattern=x myhost.test.ex in "x"? @@ -358,20 +360,20 @@ CALLER@myhost.test.ex in "x : y : abc@d.e.f"? myhost.test.ex in "y"? no (end of list) list element: abc@d.e.f address match test: subject=CALLER@myhost.test.ex pattern=abc@d.e.f -CALLER@myhost.test.ex in "x : y : abc@d.e.f"? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) smart1 router skipped: senders mismatch --------> fail_remote_domains router <-------- local_part=x domain=smart.domain checking domains -smart.domain in "! +local_domains"? - list element: ! +local_domains +smart.domain in domains? + list element: !░+local_domains start sublist local_domains smart.domain in "test.ex : myhost.test.ex"? ╎list element: test.ex ╎list element: myhost.test.ex smart.domain in "test.ex : myhost.test.ex"? no (end of list) end sublist local_domains -smart.domain in "! +local_domains"? yes (end of list) +smart.domain in domains? yes (end of list) calling fail_remote_domains router rda_interpret (string): ':fail: unrouteable mail domain "$domain"' expanded: ':fail: unrouteable mail domain "smart.domain"' (tainted) @@ -388,29 +390,29 @@ routing x@test.ex --------> smart1 router <-------- local_part=x domain=test.ex checking domains -test.ex in "smart.domain"? +test.ex in domains? list element: smart.domain -test.ex in "smart.domain"? no (end of list) +test.ex in domains? no (end of list) smart1 router skipped: domains mismatch --------> fail_remote_domains router <-------- local_part=x domain=test.ex checking domains -test.ex in "! +local_domains"? - list element: ! +local_domains +test.ex in domains? + list element: !░+local_domains start sublist local_domains test.ex in "test.ex : myhost.test.ex"? ╎list element: test.ex ╎test.ex in "test.ex : myhost.test.ex"? yes (matched "test.ex") end sublist local_domains data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' - test.ex in "! +local_domains"? no (matched "! +local_domains") + test.ex in domains? no (matched "! +local_domains") fail_remote_domains router skipped: domains mismatch --------> smart2 router <-------- local_part=x domain=test.ex checking domains -test.ex in "test.ex"? +test.ex in domains? list element: test.ex - test.ex in "test.ex"? yes (matched "test.ex") + test.ex in domains? yes (matched "test.ex") checking local_parts search_open: lsearch "TESTSUITE/aux-fixed/0085.data" cached open @@ -424,10 +426,10 @@ checking local_parts file lookup required for test.ex in TESTSUITE/aux-fixed/0085.data creating new cache entry - lookup yielded: x : y : abc@d.e.f -x in "x : y : abc@d.e.f"? + lookup yielded: x░:░y░:░abc@d.e.f +x in local_parts? list element: x - x in "x : y : abc@d.e.f"? yes (matched "x") + x in local_parts? yes (matched "x") checking senders search_open: lsearch "TESTSUITE/aux-fixed/0085.data" cached open @@ -440,8 +442,8 @@ checking senders type=lsearch key="test.ex" opts=NULL cached data used for lookup of test.ex in TESTSUITE/aux-fixed/0085.data - lookup yielded: x : y : abc@d.e.f -CALLER@myhost.test.ex in "x : y : abc@d.e.f"? + lookup yielded: x░:░y░:░abc@d.e.f +CALLER@myhost.test.ex in senders? list element: x address match test: subject=CALLER@myhost.test.ex pattern=x myhost.test.ex in "x"? @@ -454,7 +456,7 @@ CALLER@myhost.test.ex in "x : y : abc@d.e.f"? myhost.test.ex in "y"? no (end of list) list element: abc@d.e.f address match test: subject=CALLER@myhost.test.ex pattern=abc@d.e.f -CALLER@myhost.test.ex in "x : y : abc@d.e.f"? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) smart2 router skipped: senders mismatch no more routers >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -466,15 +468,15 @@ routing x@myhost.test.ex --------> smart1 router <-------- local_part=x domain=myhost.test.ex checking domains -myhost.test.ex in "smart.domain"? +myhost.test.ex in domains? list element: smart.domain -myhost.test.ex in "smart.domain"? no (end of list) +myhost.test.ex in domains? no (end of list) smart1 router skipped: domains mismatch --------> fail_remote_domains router <-------- local_part=x domain=myhost.test.ex checking domains -myhost.test.ex in "! +local_domains"? - list element: ! +local_domains +myhost.test.ex in domains? + list element: !░+local_domains start sublist local_domains myhost.test.ex in "test.ex : myhost.test.ex"? ╎list element: test.ex @@ -482,14 +484,14 @@ myhost.test.ex in "! +local_domains"? ╎myhost.test.ex in "test.ex : myhost.test.ex"? yes (matched "myhost.test.ex") end sublist local_domains data from lookup saved for cache for +local_domains: key 'myhost.test.ex' value 'myhost.test.ex' - myhost.test.ex in "! +local_domains"? no (matched "! +local_domains") + myhost.test.ex in domains? no (matched "! +local_domains") fail_remote_domains router skipped: domains mismatch --------> smart2 router <-------- local_part=x domain=myhost.test.ex checking domains -myhost.test.ex in "test.ex"? +myhost.test.ex in domains? list element: test.ex -myhost.test.ex in "test.ex"? no (end of list) +myhost.test.ex in domains? no (end of list) smart2 router skipped: domains mismatch no more routers search_tidyup called diff --git a/test/stderr/0086 b/test/stderr/0086 index ad5234ec9..0ff15c6aa 100644 --- a/test/stderr/0086 +++ b/test/stderr/0086 @@ -16,6 +16,7 @@ >>> accept: condition test succeeded in inline ACL >>> end of inline ACL: ACCEPT >>> host in ignore_fromline_hosts? no (option unset) +LOG: 10HmaY-000000005vi-0000 qualify/rewrite: '>' missing at end of address >>> using ACL "check_message" >>> processing "deny" (TESTSUITE/test-config 19) >>> check !verify = header_syntax @@ -43,6 +44,8 @@ LOG: 10HmaY-000000005vi-0000 H=(test) [V4NET.10.10.10] F= re >>> accept: condition test succeeded in inline ACL >>> end of inline ACL: ACCEPT >>> host in ignore_fromline_hosts? no (option unset) +LOG: 10HmaZ-000000005vi-0000 qualify/rewrite: '>' missing at end of address +LOG: 10HmaZ-000000005vi-0000 qualify/rewrite: '>' missing at end of address >>> using ACL "check_message" >>> processing "deny" (TESTSUITE/test-config 19) >>> check !verify = header_syntax @@ -70,6 +73,7 @@ LOG: 10HmaZ-000000005vi-0000 H=(test) [V4NET.10.10.10] F= re >>> accept: condition test succeeded in inline ACL >>> end of inline ACL: ACCEPT >>> host in ignore_fromline_hosts? no (option unset) +LOG: 10HmbA-000000005vi-0000 qualify/rewrite: '>' missing at end of address >>> using ACL "check_message" >>> processing "deny" (TESTSUITE/test-config 19) >>> check !verify = header_syntax @@ -97,6 +101,7 @@ LOG: 10HmbA-000000005vi-0000 H=(test) [V4NET.10.10.10] F= re >>> accept: condition test succeeded in inline ACL >>> end of inline ACL: ACCEPT >>> host in ignore_fromline_hosts? no (option unset) +LOG: 10HmbB-000000005vi-0000 qualify/rewrite: unmatched doublequote in local part >>> using ACL "check_message" >>> processing "deny" (TESTSUITE/test-config 19) >>> check !verify = header_syntax diff --git a/test/stderr/0087 b/test/stderr/0087 index 1226a7dfd..c063ea195 100644 --- a/test/stderr/0087 +++ b/test/stderr/0087 @@ -21,12 +21,12 @@ >>> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@test.ex ->>> userx in "defer"? +>>> userx in local_parts? >>> list element: defer ->>> userx in "defer"? no (end of list) ->>> userx in "userx"? +>>> userx in local_parts? no (end of list) +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling localuser router >>> routed by localuser router >>> ----------- end verify ------------ @@ -35,9 +35,12 @@ >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -75,12 +78,12 @@ LOG: 10HmaX-000000005vi-0000 <= userx@test.ex H=(test) [V4NET.10.10.10] P=smtp S >>> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@test.ex ->>> userx in "defer"? +>>> userx in local_parts? >>> list element: defer ->>> userx in "defer"? no (end of list) ->>> userx in "userx"? +>>> userx in local_parts? no (end of list) +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling localuser router >>> routed by localuser router >>> ----------- end verify ------------ @@ -89,13 +92,17 @@ LOG: 10HmaX-000000005vi-0000 <= userx@test.ex H=(test) [V4NET.10.10.10] P=smtp S >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT >>> host in ignore_fromline_hosts? no (option unset) +LOG: 10HmaY-000000005vi-0000 qualify/rewrite: '>' missing at end of address >>> using ACL "check_message" >>> processing "require" (TESTSUITE/test-config 26) >>> check verify = header_sender @@ -129,12 +136,12 @@ LOG: 10HmaY-000000005vi-0000 <= userx@test.ex H=(test) [V4NET.10.10.10] P=smtp S >>> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@test.ex ->>> userx in "defer"? +>>> userx in local_parts? >>> list element: defer ->>> userx in "defer"? no (end of list) ->>> userx in "userx"? +>>> userx in local_parts? no (end of list) +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling localuser router >>> routed by localuser router >>> ----------- end verify ------------ @@ -143,9 +150,12 @@ LOG: 10HmaY-000000005vi-0000 <= userx@test.ex H=(test) [V4NET.10.10.10] P=smtp S >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -156,12 +166,12 @@ LOG: 10HmaY-000000005vi-0000 <= userx@test.ex H=(test) [V4NET.10.10.10] P=smtp S >>> verifying From: header address badbad@test.ex >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing badbad@test.ex ->>> badbad in "defer"? +>>> badbad in local_parts? >>> list element: defer ->>> badbad in "defer"? no (end of list) ->>> badbad in "userx"? +>>> badbad in local_parts? no (end of list) +>>> badbad in local_parts? >>> list element: userx ->>> badbad in "userx"? no (end of list) +>>> badbad in local_parts? no (end of list) >>> no more routers >>> require: condition test failed in ACL "check_message" >>> end of ACL "check_message": not OK @@ -189,12 +199,12 @@ LOG: 10HmbA-000000005vi-0000 H=(test) [V4NET.10.10.10] F= rejecte >>> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@test.ex ->>> userx in "defer"? +>>> userx in local_parts? >>> list element: defer ->>> userx in "defer"? no (end of list) ->>> userx in "userx"? +>>> userx in local_parts? no (end of list) +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling localuser router >>> routed by localuser router >>> ----------- end verify ------------ @@ -203,9 +213,12 @@ LOG: 10HmbA-000000005vi-0000 H=(test) [V4NET.10.10.10] F= rejecte >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -216,12 +229,12 @@ LOG: 10HmbA-000000005vi-0000 H=(test) [V4NET.10.10.10] F= rejecte >>> verifying From: header address badbad@test.ex >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing badbad@test.ex ->>> badbad in "defer"? +>>> badbad in local_parts? >>> list element: defer ->>> badbad in "defer"? no (end of list) ->>> badbad in "userx"? +>>> badbad in local_parts? no (end of list) +>>> badbad in local_parts? >>> list element: userx ->>> badbad in "userx"? no (end of list) +>>> badbad in local_parts? no (end of list) >>> no more routers >>> verifying From: header address userx@test.ex >>> previously checked as envelope sender @@ -253,12 +266,12 @@ LOG: 10HmaZ-000000005vi-0000 <= userx@test.ex H=(test) [V4NET.10.10.10] P=smtp S >>> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@test.ex ->>> userx in "defer"? +>>> userx in local_parts? >>> list element: defer ->>> userx in "defer"? no (end of list) ->>> userx in "userx"? +>>> userx in local_parts? no (end of list) +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling localuser router >>> routed by localuser router >>> ----------- end verify ------------ @@ -267,9 +280,12 @@ LOG: 10HmaZ-000000005vi-0000 <= userx@test.ex H=(test) [V4NET.10.10.10] P=smtp S >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -280,9 +296,9 @@ LOG: 10HmaZ-000000005vi-0000 <= userx@test.ex H=(test) [V4NET.10.10.10] P=smtp S >>> verifying From: header address defer@test.ex >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing defer@test.ex ->>> defer in "defer"? +>>> defer in local_parts? >>> list element: defer ->>> defer in "defer"? yes (matched "defer") +>>> defer in local_parts? yes (matched "defer") >>> calling defer router >>> defer router: defer for defer@test.ex >>> message: this is a forced defer diff --git a/test/stderr/0089 b/test/stderr/0089 index 369e13cef..107944c7f 100644 --- a/test/stderr/0089 +++ b/test/stderr/0089 @@ -33,9 +33,12 @@ LOG: rejected HELO from [V4NET.0.0.0]: syntactically invalid argument(s): @#$%^& >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "Test.ex : myhost.test.EX"? ->>> ╎list element: Test.ex ->>> ╎test.ex in "Test.ex : myhost.test.EX"? yes (matched "Test.ex") +>>> start sublist local_domains +>>> ╎ test.ex in "Test.ex : myhost.test.EX"? +>>> ╎ list element: Test.ex +>>> ╎ test.ex in "Test.ex : myhost.test.EX"? yes (matched "Test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'Test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -50,20 +53,24 @@ LOG: rejected HELO from [V4NET.0.0.0]: syntactically invalid argument(s): @#$%^& >>> check domains = +local_domains >>> else.where in "+local_domains"? >>> list element: +local_domains ->>> else.where in "Test.ex : myhost.test.EX"? ->>> ╎list element: Test.ex ->>> ╎list element: myhost.test.EX ->>> else.where in "Test.ex : myhost.test.EX"? no (end of list) +>>> start sublist local_domains +>>> ╎ else.where in "Test.ex : myhost.test.EX"? +>>> ╎ list element: Test.ex +>>> ╎ list element: myhost.test.EX +>>> ╎ else.where in "Test.ex : myhost.test.EX"? no (end of list) +>>> end sublist local_domains >>> else.where in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 26) >>> check domains = +relay_domains >>> else.where in "+relay_domains"? >>> list element: +relay_domains ->>> else.where in "Test.ex : Relay.one.ex"? ->>> ╎list element: Test.ex ->>> ╎list element: Relay.one.ex ->>> else.where in "Test.ex : Relay.one.ex"? no (end of list) +>>> start sublist relay_domains +>>> ╎ else.where in "Test.ex : Relay.one.ex"? +>>> ╎ list element: Test.ex +>>> ╎ list element: Relay.one.ex +>>> ╎ else.where in "Test.ex : Relay.one.ex"? no (end of list) +>>> end sublist relay_domains >>> else.where in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 27) @@ -79,6 +86,10 @@ LOG: H=(abc_xyz) [V4NET.0.0.0] F= rejected RCPT >> sender host name required, to match against *N-99.test.EX >>> looking up host name for V4NET.0.0.99 >>> IP address lookup yielded "ten-99.test.ex" +>>> check dnssec require list +>>> ten-99.test.ex not in empty list (option unset? cannot trace name) +>>> check dnssec request list +>>> ten-99.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-99.test.ex >>> V4NET.0.0.99 OK >>> host in sender_unqualified_hosts? yes (matched "*N-99.test.EX") @@ -99,20 +110,25 @@ LOG: H=(abc_xyz) [V4NET.0.0.0] F= rejected RCPT >> check domains = +local_domains >>> relay.one.ex in "+local_domains"? >>> list element: +local_domains ->>> relay.one.ex in "Test.ex : myhost.test.EX"? ->>> list element: Test.ex ->>> list element: myhost.test.EX ->>> relay.one.ex in "Test.ex : myhost.test.EX"? no (end of list) +>>> start sublist local_domains +>>> relay.one.ex in "Test.ex : myhost.test.EX"? +>>> ╎list element: Test.ex +>>> ╎list element: myhost.test.EX +>>> relay.one.ex in "Test.ex : myhost.test.EX"? no (end of list) +>>> end sublist local_domains >>> relay.one.ex in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 26) >>> check domains = +relay_domains >>> relay.one.ex in "+relay_domains"? >>> list element: +relay_domains ->>> relay.one.ex in "Test.ex : Relay.one.ex"? ->>> list element: Test.ex ->>> list element: Relay.one.ex ->>> relay.one.ex in "Test.ex : Relay.one.ex"? yes (matched "Relay.one.ex") +>>> start sublist relay_domains +>>> relay.one.ex in "Test.ex : Relay.one.ex"? +>>> ╎list element: Test.ex +>>> ╎list element: Relay.one.ex +>>> ╎relay.one.ex in "Test.ex : Relay.one.ex"? yes (matched "Relay.one.ex") +>>> end sublist relay_domains +>>> data from lookup saved for cache for +relay_domains: key 'relay.one.ex' value 'Relay.one.ex' >>> relay.one.ex in "+relay_domains"? yes (matched "+relay_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -127,20 +143,24 @@ LOG: H=(abc_xyz) [V4NET.0.0.0] F= rejected RCPT >> check domains = +local_domains >>> relay.two.ex in "+local_domains"? >>> list element: +local_domains ->>> relay.two.ex in "Test.ex : myhost.test.EX"? ->>> list element: Test.ex ->>> list element: myhost.test.EX ->>> relay.two.ex in "Test.ex : myhost.test.EX"? no (end of list) +>>> start sublist local_domains +>>> relay.two.ex in "Test.ex : myhost.test.EX"? +>>> ╎list element: Test.ex +>>> ╎list element: myhost.test.EX +>>> relay.two.ex in "Test.ex : myhost.test.EX"? no (end of list) +>>> end sublist local_domains >>> relay.two.ex in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 26) >>> check domains = +relay_domains >>> relay.two.ex in "+relay_domains"? >>> list element: +relay_domains ->>> relay.two.ex in "Test.ex : Relay.one.ex"? ->>> list element: Test.ex ->>> list element: Relay.one.ex ->>> relay.two.ex in "Test.ex : Relay.one.ex"? no (end of list) +>>> start sublist relay_domains +>>> relay.two.ex in "Test.ex : Relay.one.ex"? +>>> ╎list element: Test.ex +>>> ╎list element: Relay.one.ex +>>> relay.two.ex in "Test.ex : Relay.one.ex"? no (end of list) +>>> end sublist relay_domains >>> relay.two.ex in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 27) diff --git a/test/stderr/0091 b/test/stderr/0091 index 3efd8b6c8..cfefa4915 100644 --- a/test/stderr/0091 +++ b/test/stderr/0091 @@ -14,16 +14,19 @@ >>> processing "deny" (TESTSUITE/test-config 18) >>> check hosts = ! V4NET.0.0.1 >>> host in "! V4NET.0.0.1"? ->>> list element: ! V4NET.0.0.1 +>>> list element: !░V4NET.0.0.1 >>> host in "! V4NET.0.0.1"? no (matched "! V4NET.0.0.1") >>> deny: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 20) >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -34,9 +37,9 @@ >>> verifying From: header address >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing junk@jink.jonk.test.ex ->>> junk in "userx"? +>>> junk in local_parts? >>> list element: userx ->>> junk in "userx"? no (end of list) +>>> junk in local_parts? no (end of list) >>> no more routers >>> require: condition test failed in ACL "check_message" >>> end of ACL "check_message": not OK @@ -57,14 +60,14 @@ LOG: 10HmaY-000000005vi-0000 H=(test) [V4NET.0.0.1] F= r >>> processing "deny" (TESTSUITE/test-config 18) >>> check hosts = ! V4NET.0.0.1 >>> host in "! V4NET.0.0.1"? ->>> list element: ! V4NET.0.0.1 +>>> list element: !░V4NET.0.0.1 >>> host in "! V4NET.0.0.1"? yes (end of list) >>> check !verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing junk@jink.jonk.test.ex ->>> junk in "userx"? +>>> junk in local_parts? >>> list element: userx ->>> junk in "userx"? no (end of list) +>>> junk in local_parts? no (end of list) >>> no more routers >>> ----------- end verify ------------ >>> deny: condition test succeeded in ACL "check_recipient" @@ -87,14 +90,14 @@ LOG: H=(test) [V4NET.0.0.2] F= rejected RCPT >> processing "deny" (TESTSUITE/test-config 18) >>> check hosts = ! V4NET.0.0.1 >>> host in "! V4NET.0.0.1"? ->>> list element: ! V4NET.0.0.1 +>>> list element: !░V4NET.0.0.1 >>> host in "! V4NET.0.0.1"? yes (end of list) >>> check !verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@test.ex ->>> userx in "userx"? +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling localuser router >>> routed by localuser router >>> ----------- end verify ------------ @@ -103,9 +106,12 @@ LOG: H=(test) [V4NET.0.0.2] F= rejected RCPT >> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -116,9 +122,9 @@ LOG: H=(test) [V4NET.0.0.2] F= rejected RCPT >> verifying From: header address >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing junk@jink.jonk.test.ex ->>> junk in "userx"? +>>> junk in local_parts? >>> list element: userx ->>> junk in "userx"? no (end of list) +>>> junk in local_parts? no (end of list) >>> no more routers >>> require: condition test failed in ACL "check_message" >>> end of ACL "check_message": not OK @@ -139,14 +145,14 @@ LOG: 10HmaZ-000000005vi-0000 H=(test) [V4NET.0.0.2] F= rejected a >>> processing "deny" (TESTSUITE/test-config 18) >>> check hosts = ! V4NET.0.0.1 >>> host in "! V4NET.0.0.1"? ->>> list element: ! V4NET.0.0.1 +>>> list element: !░V4NET.0.0.1 >>> host in "! V4NET.0.0.1"? yes (end of list) >>> check !verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@test.ex ->>> userx in "userx"? +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling localuser router >>> routed by localuser router >>> ----------- end verify ------------ @@ -155,9 +161,12 @@ LOG: 10HmaZ-000000005vi-0000 H=(test) [V4NET.0.0.2] F= rejected a >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -168,9 +177,9 @@ LOG: 10HmaZ-000000005vi-0000 H=(test) [V4NET.0.0.2] F= rejected a >>> verifying From: header address >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@test.ex ->>> userx in "userx"? +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling localuser router >>> routed by localuser router >>> require: condition test succeeded in ACL "check_message" diff --git a/test/stderr/0092 b/test/stderr/0092 index 51757f42f..04e219a0e 100644 --- a/test/stderr/0092 +++ b/test/stderr/0092 @@ -37,14 +37,18 @@ LOG: SMTP command timeout on connection from [V4NET.0.0.1] D=qqs >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT LOG: SMTP data timeout (message abandoned) on connection from (test) [V4NET.0.0.1] F= D=qqs Exim version x.yz .... +Hints DB: changed uid/gid: forcing real = effective uid=uuuu gid=CALLER_GID pid=p1234 environment after trimming: @@ -54,43 +58,48 @@ configuration file is TESTSUITE/test-config admin user changed uid/gid: privilege not needed uid=EXIM_UID gid=EXIM_GID pid=p1234 +try option gecos_pattern +try option gecos_name +try option unknown_login originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME sender address = CALLER@myhost.test.ex +try option smtp_active_hostname sender_fullhost = [V4NET.0.0.1] sender_rcvhost = [V4NET.0.0.1] host in hosts_connection_nolog? no (option unset) LOG: smtp_connection MAIN SMTP connection from [V4NET.0.0.1] +try option message_size_limit host in host_lookup? no (option unset) set_process_info: pppp handling incoming connection from [V4NET.0.0.1] - ╭considering: ${if eq {V4NET.0.0.1} {$sender_host_address} {2} {30}}s - ╭considering: V4NET.0.0.1} {$sender_host_address} {2} {30}}s + ╭considering: ${if░eq░{V4NET.0.0.1}░{$sender_host_address}░{2}░{30}}s + ╭considering: V4NET.0.0.1}░{$sender_host_address}░{2}░{30}}s ├───────text: V4NET.0.0.1 - ├considering: } {$sender_host_address} {2} {30}}s - ├──expanding: V4NET.0.0.1 + ├considering: }░{$sender_host_address}░{2}░{30}}s + ├───expanded: V4NET.0.0.1 ╰─────result: V4NET.0.0.1 - ╭considering: $sender_host_address} {2} {30}}s + ╭considering: $sender_host_address}░{2}░{30}}s ├──────value: V4NET.0.0.1 - ├considering: } {2} {30}}s - ├──expanding: $sender_host_address + ├considering: }░{2}░{30}}s + ├───expanded: $sender_host_address ╰─────result: V4NET.0.0.1 - ├──condition: eq {V4NET.0.0.1} {$sender_host_address} + ├──condition: eq░{V4NET.0.0.1}░{$sender_host_address} ├─────result: true - ╭considering: 2} {30}}s + ╭considering: 2}░{30}}s ├───────text: 2 - ├considering: } {30}}s - ├──expanding: 2 + ├considering: }░{30}}s + ├───expanded: 2 ╰─────result: 2 ╭───scanning: 30}}s ├───────text: 30 ├───scanning: }}s - ├──expanding: 30 - ├─────result: 30 + ├───expanded: 30 + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: 2 ├considering: s ├───────text: s - ├──expanding: ${if eq {V4NET.0.0.1} {$sender_host_address} {2} {30}}s + ├───expanded: ${if░eq░{V4NET.0.0.1}░{$sender_host_address}░{2}░{30}}s ╰─────result: 2s host in host_reject_connection? no (option unset) host in sender_unqualified_hosts? no (option unset) @@ -98,18 +107,20 @@ host in recipient_unqualified_hosts? no (option unset) host in helo_verify_hosts? no (option unset) host in helo_try_verify_hosts? no (option unset) host in helo_accept_junk_hosts? no (option unset) - ╭considering: $smtp_active_hostname ESMTP Exim $version_number $tod_full +try option acl_smtp_connect +try option smtp_banner + ╭considering: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full ├──────value: myhost.test.ex - ├considering: ESMTP Exim $version_number $tod_full - ├───────text: ESMTP Exim - ├considering: $version_number $tod_full + ├considering: ░ESMTP░Exim░$version_number░$tod_full + ├───────text: ░ESMTP░Exim░ + ├considering: $version_number░$tod_full ├──────value: x.yz - ├considering: $tod_full - ├───────text: + ├considering: ░$tod_full + ├───────text: ░ ├considering: $tod_full - ├──────value: Tue, 2 Mar 1999 09:44:33 +0000 - ├──expanding: $smtp_active_hostname ESMTP Exim $version_number $tod_full - ╰─────result: myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 + ├──────value: Tue,░2░Mar░1999░09:44:33░+0000 + ├───expanded: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full + ╰─────result: myhost.test.ex░ESMTP░Exim░x.yz░Tue,░2░Mar░1999░09:44:33░+0000 SMTP>> 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 smtp_setup_msg entered SMTP<< helo test @@ -120,12 +131,15 @@ test in helo_lookup_domains? no (end of list) sender_fullhost = (test) [V4NET.0.0.1] sender_rcvhost = [V4NET.0.0.1] (helo=test) set_process_info: pppp handling incoming connection from (test) [V4NET.0.0.1] +try option acl_smtp_helo SMTP>> 250 myhost.test.ex Hello test [V4NET.0.0.1] SMTP<< mail from:userx@test.ex spool directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 msg_size = 0 log directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 +try option acl_smtp_mail SMTP>> 250 OK SMTP<< rcpt to:userx@test.ex +try option acl_smtp_rcpt using ACL "check_recipient" processing "accept" (TESTSUITE/test-config 27) check hosts = : @@ -156,10 +170,12 @@ accept: condition test succeeded in ACL "check_recipient" end of ACL "check_recipient": ACCEPT SMTP>> 250 Accepted SMTP<< data +try option acl_smtp_predata SMTP>> 354 Enter message, ending with "." on a line by itself search_tidyup called LOG: lost_incoming_connection MAIN SMTP data timeout (message abandoned) on connection from (test) [V4NET.0.0.1] F= D=qqs +try option acl_smtp_notquit SMTP>> 421 myhost.test.ex SMTP incoming data timeout - closing connection. search_tidyup called >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=1 >>>>>>>>>>>>>>>> @@ -196,12 +212,15 @@ exim: timed out while reading - message abandoned >>> check !verify = recipient >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing verify@test.ex ->>> test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> test.ex in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") ->>> test.ex in "! +local_domains"? no (matched "! +local_domains") +>>> test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> test.ex in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' +>>> test.ex in domains? no (matched "! +local_domains") >>> calling forward router >>> forward router declined for verify@test.ex >>> no more routers diff --git a/test/stderr/0094 b/test/stderr/0094 index f809c7caa..bd3bb1425 100644 --- a/test/stderr/0094 +++ b/test/stderr/0094 @@ -25,19 +25,23 @@ LOG: no host name found for IP address V4NET.11.12.13 >>> check domains = +local_domains >>> cam.ac.uk in "+local_domains"? >>> list element: +local_domains ->>> cam.ac.uk in "test.ex"? ->>> list element: test.ex ->>> cam.ac.uk in "test.ex"? no (end of list) +>>> start sublist local_domains +>>> cam.ac.uk in "test.ex"? +>>> ╎list element: test.ex +>>> cam.ac.uk in "test.ex"? no (end of list) +>>> end sublist local_domains >>> cam.ac.uk in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 25) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "*.masq.test.ex"? ->>> list element: *.masq.test.ex +>>> start sublist relay_hosts +>>> host in "*.masq.test.ex"? +>>> ╎list element: *.masq.test.ex >>> sender host name required, to match against *.masq.test.ex ->>> host in "*.masq.test.ex"? no (failed to find host name for V4NET.11.12.13) +>>> ╎host in "*.masq.test.ex"? no (failed to find host name for V4NET.11.12.13) +>>> end sublist relay_hosts >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 26) @@ -51,6 +55,10 @@ LOG: H=(test) [V4NET.11.12.13] F= rejected RCPT >> host in host_lookup? yes (matched "0.0.0.0/0") >>> looking up host name for V4NET.0.0.1 >>> IP address lookup yielded "ten-1.test.ex" +>>> check dnssec require list +>>> ten-1.test.ex not in empty list (option unset? cannot trace name) +>>> check dnssec request list +>>> ten-1.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-1.test.ex >>> V4NET.0.0.1 OK >>> host in host_reject_connection? no (option unset) @@ -70,18 +78,22 @@ LOG: H=(test) [V4NET.11.12.13] F= rejected RCPT >> check domains = +local_domains >>> cam.ac.uk in "+local_domains"? >>> list element: +local_domains ->>> cam.ac.uk in "test.ex"? ->>> list element: test.ex ->>> cam.ac.uk in "test.ex"? no (end of list) +>>> start sublist local_domains +>>> cam.ac.uk in "test.ex"? +>>> ╎list element: test.ex +>>> cam.ac.uk in "test.ex"? no (end of list) +>>> end sublist local_domains >>> cam.ac.uk in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 25) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "*.masq.test.ex"? ->>> list element: *.masq.test.ex ->>> host in "*.masq.test.ex"? no (end of list) +>>> start sublist relay_hosts +>>> host in "*.masq.test.ex"? +>>> ╎list element: *.masq.test.ex +>>> host in "*.masq.test.ex"? no (end of list) +>>> end sublist relay_hosts >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 26) @@ -90,6 +102,7 @@ LOG: H=(test) [V4NET.11.12.13] F= rejected RCPT >> end of ACL "check_recipient": DENY LOG: H=ten-1.test.ex (test) [V4NET.0.0.1] F= rejected RCPT : 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 @@ -109,19 +122,27 @@ host in host_lookup? list element: 0.0.0.0/0 host in host_lookup? yes (matched "0.0.0.0/0") looking up host name for V4NET.99.99.90 -DNS lookup of 90.99.99.V4NET.in-addr.arpa (PTR) using fakens -DNS lookup of 90.99.99.V4NET.in-addr.arpa (PTR) succeeded + DNS lookup of 90.99.99.V4NET.in-addr.arpa (PTR) using fakens + DNS lookup of 90.99.99.V4NET.in-addr.arpa (PTR) succeeded IP address lookup yielded "oneback.test.ex" alias "host1.masq.test.ex" -DNS lookup of oneback.test.ex (A) using fakens -DNS lookup of oneback.test.ex (A) succeeded -oneback.test.ex V4NET.99.99.90 mx=-1 sort=xx + check dnssec require list + oneback.test.ex not in empty list (option unset? cannot trace name) + check dnssec request list + oneback.test.ex not in empty list (option unset? cannot trace name) + DNS lookup of oneback.test.ex (A) using fakens + DNS lookup of oneback.test.ex (A) succeeded + oneback.test.ex V4NET.99.99.90 mx=-1 sort=xx checking addresses for oneback.test.ex Forward DNS security status: unverified V4NET.99.99.90 OK -DNS lookup of host1.masq.test.ex (A) using fakens -DNS lookup of host1.masq.test.ex (A) succeeded -host1.masq.test.ex V4NET.90.90.90 mx=-1 sort=xx + check dnssec require list + host1.masq.test.ex not in empty list (option unset? cannot trace name) + check dnssec request list + host1.masq.test.ex not in empty list (option unset? cannot trace name) + DNS lookup of host1.masq.test.ex (A) using fakens + DNS lookup of host1.masq.test.ex (A) succeeded + host1.masq.test.ex V4NET.90.90.90 mx=-1 sort=xx checking addresses for host1.masq.test.ex Forward DNS security status: unverified V4NET.90.90.90 diff --git a/test/stderr/0117 b/test/stderr/0117 index b5cde0daf..60bbef8c5 100644 --- a/test/stderr/0117 +++ b/test/stderr/0117 @@ -1,4 +1,5 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config admin user >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -8,6 +9,7 @@ local_part=xxx domain=mxt9.test.ex calling lookuphost router lookuphost router called for xxx@mxt9.test.ex domain = mxt9.test.ex +main lookup for domain queued for transport: local_part = xxx domain = mxt9.test.ex errors_to=NULL @@ -20,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 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -29,6 +32,7 @@ local_part=xxx domain=mxt9a.test.ex calling lookuphost router lookuphost router called for xxx@mxt9a.test.ex domain = mxt9a.test.ex +main lookup for domain queued for transport: local_part = xxx domain = mxt9a.test.ex errors_to=NULL @@ -41,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 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -50,6 +55,7 @@ local_part=xxx domain=mxt9b.test.ex calling lookuphost router lookuphost router called for xxx@mxt9b.test.ex domain = mxt9b.test.ex +main lookup for domain queued for transport: local_part = xxx domain = mxt9b.test.ex errors_to=NULL diff --git a/test/stderr/0121 b/test/stderr/0121 index 8e6e33d1c..8c6814062 100644 --- a/test/stderr/0121 +++ b/test/stderr/0121 @@ -15,18 +15,21 @@ >>> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing unknown@test.ex ->>> test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") ->>> test.ex in "! +local_domains"? no (matched "! +local_domains") ->>> unknown in "defer"? +>>> test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' +>>> test.ex in domains? no (matched "! +local_domains") +>>> unknown in local_parts? >>> list element: defer ->>> unknown in "defer"? no (end of list) ->>> unknown in "userx"? +>>> unknown in local_parts? no (end of list) +>>> unknown in local_parts? >>> list element: userx ->>> unknown in "userx"? no (end of list) +>>> unknown in local_parts? no (end of list) >>> no more routers >>> ----------- end verify ------------ >>> require: condition test failed in ACL "check_recipient" @@ -38,12 +41,14 @@ LOG: H=(test) [127.0.0.1] F= rejected RCPT : Sen >>> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@unknown.dom.ain ->>> unknown.dom.ain in "! +local_domains"? ->>> list element: ! +local_domains ->>> unknown.dom.ain in "test.ex"? ->>> list element: test.ex ->>> unknown.dom.ain in "test.ex"? no (end of list) ->>> unknown.dom.ain in "! +local_domains"? yes (end of list) +>>> unknown.dom.ain in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> unknown.dom.ain in "test.ex"? +>>> ╎list element: test.ex +>>> unknown.dom.ain in "test.ex"? no (end of list) +>>> end sublist local_domains +>>> unknown.dom.ain in domains? yes (end of list) >>> calling fail_remote_domains router >>> fail_remote_domains router forced address failure >>> ----------- end verify ------------ @@ -59,18 +64,21 @@ LOG: H=(test) [127.0.0.1] F= rejected RCPT >> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing "unknown with spaces"@test.ex ->>> test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") ->>> test.ex in "! +local_domains"? no (matched "! +local_domains") ->>> unknown with spaces in "defer"? +>>> test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' +>>> test.ex in domains? no (matched "! +local_domains") +>>> unknown with spaces in local_parts? >>> list element: defer ->>> unknown with spaces in "defer"? no (end of list) ->>> unknown with spaces in "userx"? +>>> unknown with spaces in local_parts? no (end of list) +>>> unknown with spaces in local_parts? >>> list element: userx ->>> unknown with spaces in "userx"? no (end of list) +>>> unknown with spaces in local_parts? no (end of list) >>> no more routers >>> ----------- end verify ------------ >>> require: condition test failed in ACL "check_recipient" @@ -82,18 +90,21 @@ LOG: H=(test) [127.0.0.1] F=<"unknown with spaces"@test.ex> rejected RCPT >> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@test.ex ->>> test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") ->>> test.ex in "! +local_domains"? no (matched "! +local_domains") ->>> userx in "defer"? +>>> test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' +>>> test.ex in domains? no (matched "! +local_domains") +>>> userx in local_parts? >>> list element: defer ->>> userx in "defer"? no (end of list) ->>> userx in "userx"? +>>> userx in local_parts? no (end of list) +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling userx router >>> routed by userx router >>> ----------- end verify ------------ @@ -102,9 +113,12 @@ LOG: H=(test) [127.0.0.1] F=<"unknown with spaces"@test.ex> rejected RCPT >> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -115,18 +129,21 @@ LOG: H=(test) [127.0.0.1] F=<"unknown with spaces"@test.ex> rejected RCPT >> verifying From: header address unknown@test.ex >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing unknown@test.ex ->>> test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") ->>> test.ex in "! +local_domains"? no (matched "! +local_domains") ->>> unknown in "defer"? +>>> test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' +>>> test.ex in domains? no (matched "! +local_domains") +>>> unknown in local_parts? >>> list element: defer ->>> unknown in "defer"? no (end of list) ->>> unknown in "userx"? +>>> unknown in local_parts? no (end of list) +>>> unknown in local_parts? >>> list element: userx ->>> unknown in "userx"? no (end of list) +>>> unknown in local_parts? no (end of list) >>> no more routers >>> require: condition test failed in ACL "check_message" >>> end of ACL "check_message": not OK @@ -136,18 +153,21 @@ LOG: 10HmaX-000000005vi-0000 H=(test) [127.0.0.1] F= rejected aft >>> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@test.ex ->>> test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") ->>> test.ex in "! +local_domains"? no (matched "! +local_domains") ->>> userx in "defer"? +>>> test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' +>>> test.ex in domains? no (matched "! +local_domains") +>>> userx in local_parts? >>> list element: defer ->>> userx in "defer"? no (end of list) ->>> userx in "userx"? +>>> userx in local_parts? no (end of list) +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling userx router >>> routed by userx router >>> ----------- end verify ------------ @@ -156,13 +176,17 @@ LOG: 10HmaX-000000005vi-0000 H=(test) [127.0.0.1] F= rejected aft >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT >>> host in ignore_fromline_hosts? no (option unset) +LOG: 10HmaY-000000005vi-0000 qualify/rewrite: missing or malformed local part >>> using ACL "check_message" >>> processing "require" (TESTSUITE/test-config 27) >>> check verify = header_sender @@ -175,15 +199,18 @@ LOG: 10HmaY-000000005vi-0000 H=(test) [127.0.0.1] F= rejected aft >>> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing defer@test.ex ->>> test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") ->>> test.ex in "! +local_domains"? no (matched "! +local_domains") ->>> defer in "defer"? +>>> test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' +>>> test.ex in domains? no (matched "! +local_domains") +>>> defer in local_parts? >>> list element: defer ->>> defer in "defer"? yes (matched "defer") +>>> defer in local_parts? yes (matched "defer") >>> calling defer router >>> defer router: defer for defer@test.ex >>> message: forced defer @@ -196,18 +223,21 @@ LOG: H=(test) [127.0.0.1] F= temporarily rejected RCPT >> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@test.ex ->>> test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") ->>> test.ex in "! +local_domains"? no (matched "! +local_domains") ->>> userx in "defer"? +>>> test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' +>>> test.ex in domains? no (matched "! +local_domains") +>>> userx in local_parts? >>> list element: defer ->>> userx in "defer"? no (end of list) ->>> userx in "userx"? +>>> userx in local_parts? no (end of list) +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling userx router >>> routed by userx router >>> ----------- end verify ------------ @@ -216,9 +246,12 @@ LOG: H=(test) [127.0.0.1] F= temporarily rejected RCPT >> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -229,15 +262,18 @@ LOG: H=(test) [127.0.0.1] F= temporarily rejected RCPT >> verifying from: header address >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing defer@test.ex ->>> test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") ->>> test.ex in "! +local_domains"? no (matched "! +local_domains") ->>> defer in "defer"? +>>> test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' +>>> test.ex in domains? no (matched "! +local_domains") +>>> defer in local_parts? >>> list element: defer ->>> defer in "defer"? yes (matched "defer") +>>> defer in local_parts? yes (matched "defer") >>> calling defer router >>> defer router: defer for defer@test.ex >>> message: forced defer @@ -255,6 +291,8 @@ LOG: 10HmaZ-000000005vi-0000 H=(test) [127.0.0.1] F= temporarily >>> list element: @ >>> list element: @[] >>> foo.bar in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -268,16 +306,8 @@ LOG: 10HmaZ-000000005vi-0000 H=(test) [127.0.0.1] F= temporarily >>> list element: @ >>> list element: @[] >>> foo.bar in helo_lookup_domains? no (end of list) ->>> host in dsn_advertise_hosts? no (option unset) ->>> host in pipelining_advertise_hosts? >>> list element: * ->>> host in pipelining_advertise_hosts? yes (matched "*") ->>> host in chunking_advertise_hosts? ->>> host in chunking_advertise_hosts? no (end of list) ->>> foo.bar in helo_lookup_domains? ->>> list element: @ ->>> list element: @[] ->>> foo.bar in helo_lookup_domains? no (end of list) +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -288,6 +318,8 @@ LOG: 10HmaZ-000000005vi-0000 H=(test) [127.0.0.1] F= temporarily >>> list element: @ >>> list element: @[] >>> foo.bar in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -298,6 +330,8 @@ LOG: 10HmaZ-000000005vi-0000 H=(test) [127.0.0.1] F= temporarily >>> list element: @ >>> list element: @[] >>> foo.bar in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * diff --git a/test/stderr/0123 b/test/stderr/0123 index d9f4557f5..a25f0e5e0 100644 --- a/test/stderr/0123 +++ b/test/stderr/0123 @@ -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 diff --git a/test/stderr/0124 b/test/stderr/0124 index 144f84497..7d3983131 100644 --- a/test/stderr/0124 +++ b/test/stderr/0124 @@ -21,21 +21,25 @@ >>> check domains = +local_domains >>> external.test.ex in "+local_domains"? >>> list element: +local_domains ->>> external.test.ex in "test.ex"? ->>> list element: test.ex ->>> external.test.ex in "test.ex"? no (end of list) +>>> start sublist local_domains +>>> external.test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> external.test.ex in "test.ex"? no (end of list) +>>> end sublist local_domains >>> external.test.ex in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 22) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "*.friendly.test.ex"? ->>> list element: *.friendly.test.ex +>>> start sublist relay_hosts +>>> host in "*.friendly.test.ex"? +>>> ╎list element: *.friendly.test.ex >>> sender host name required, to match against *.friendly.test.ex >>> looking up host name for V4NET.0.0.97 LOG: no host name found for IP address V4NET.0.0.97 ->>> host in "*.friendly.test.ex"? no (failed to find host name for V4NET.0.0.97) +>>> ╎host in "*.friendly.test.ex"? no (failed to find host name for V4NET.0.0.97) +>>> end sublist relay_hosts >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 23) @@ -54,15 +58,20 @@ LOG: H=(test) [V4NET.0.0.97] F= rejected RCPT >> check domains = +local_domains >>> external.test.ex in "+local_domains"? >>> list element: +local_domains ->>> external.test.ex in "test.ex"? ->>> list element: test.ex ->>> external.test.ex in "test.ex"? no (end of list) +>>> start sublist local_domains +>>> ╎external.test.ex in "test.ex"? +>>> ╎ list element: test.ex +>>> ╎external.test.ex in "test.ex"? no (end of list) +>>> end sublist local_domains >>> external.test.ex in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 22) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts +>>> start sublist relay_hosts +>>> cached no match for +relay_hosts +>>> cached lookup data = NULL >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 23) diff --git a/test/stderr/0130 b/test/stderr/0130 index 5dbcd3e4b..afd439edd 100644 --- a/test/stderr/0130 +++ b/test/stderr/0130 @@ -16,12 +16,14 @@ >>> check !verify = recipient >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@not.test.ex ->>> not.test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> not.test.ex in "test.ex"? ->>> list element: test.ex ->>> not.test.ex in "test.ex"? no (end of list) ->>> not.test.ex in "! +local_domains"? yes (end of list) +>>> not.test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> not.test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> not.test.ex in "test.ex"? no (end of list) +>>> end sublist local_domains +>>> not.test.ex in domains? yes (end of list) >>> calling islocal router >>> not.test.ex in "*"? >>> list element: * diff --git a/test/stderr/0138 b/test/stderr/0138 index 9bea4c4f1..af38ad441 100644 --- a/test/stderr/0138 +++ b/test/stderr/0138 @@ -10,6 +10,8 @@ >>> list element: @ >>> list element: @[] >>> exim.test.ex in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -73,6 +75,8 @@ LOG: 10HmaX-000000005vi-0000 <= postmaster@exim.test.ex H=(exim.test.ex) [V4NET. >>> list element: @ >>> list element: @[] >>> exim.test.ex in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -128,9 +132,9 @@ LOG: 10HmaX-000000005vi-0000 <= postmaster@exim.test.ex H=(exim.test.ex) [V4NET. >>> routing userx@exim.test.ex >>> calling system_aliases router >>> system_aliases router declined for userx@exim.test.ex ->>> userx in "userx"? +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling localuser router >>> routed by localuser router >>> ----------- end verify ------------ @@ -142,9 +146,9 @@ LOG: 10HmaX-000000005vi-0000 <= postmaster@exim.test.ex H=(exim.test.ex) [V4NET. >>> routing userx@exim.test.ex >>> calling system_aliases router >>> system_aliases router declined for userx@exim.test.ex ->>> userx in "userx"? +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling localuser router >>> routed by localuser router >>> ----------- end verify ------------ @@ -153,9 +157,12 @@ LOG: 10HmaX-000000005vi-0000 <= postmaster@exim.test.ex H=(exim.test.ex) [V4NET. >>> check domains = +local_domains >>> exim.test.ex in "+local_domains"? >>> list element: +local_domains ->>> exim.test.ex in "exim.test.ex"? ->>> list element: exim.test.ex ->>> exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") +>>> start sublist local_domains +>>> exim.test.ex in "exim.test.ex"? +>>> ╎list element: exim.test.ex +>>> ╎exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'exim.test.ex' value 'exim.test.ex' >>> exim.test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT diff --git a/test/stderr/0139 b/test/stderr/0139 index a329e1ce5..9adf879de 100644 --- a/test/stderr/0139 +++ b/test/stderr/0139 @@ -70,9 +70,9 @@ >>> routing userx@exim.test.ex >>> calling system_aliases router >>> system_aliases router declined for userx@exim.test.ex ->>> userx in "userx"? +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling localuser router >>> routed by localuser router >>> ----------- end verify ------------ @@ -84,9 +84,9 @@ >>> routing userx@exim.test.ex >>> calling system_aliases router >>> system_aliases router declined for userx@exim.test.ex ->>> userx in "userx"? +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling localuser router >>> routed by localuser router >>> ----------- end verify ------------ @@ -95,9 +95,12 @@ >>> check domains = +local_domains >>> exim.test.ex in "+local_domains"? >>> list element: +local_domains ->>> exim.test.ex in "exim.test.ex"? ->>> list element: exim.test.ex ->>> exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") +>>> start sublist local_domains +>>> exim.test.ex in "exim.test.ex"? +>>> ╎list element: exim.test.ex +>>> ╎exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'exim.test.ex' value 'exim.test.ex' >>> exim.test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -136,9 +139,12 @@ >>> check domains = +local_domains >>> exim.test.ex in "+local_domains"? >>> list element: +local_domains ->>> exim.test.ex in "exim.test.ex"? ->>> list element: exim.test.ex ->>> exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") +>>> start sublist local_domains +>>> exim.test.ex in "exim.test.ex"? +>>> ╎list element: exim.test.ex +>>> ╎exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'exim.test.ex' value 'exim.test.ex' >>> exim.test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -415,9 +421,9 @@ LOG: H=[V4NET.11.12.15] F= rejected RCPT >> routing a@b >>> calling system_aliases router >>> system_aliases router declined for a@b ->>> a in "userx"? +>>> a in local_parts? >>> list element: userx ->>> a in "userx"? no (end of list) +>>> a in local_parts? no (end of list) >>> no more routers LOG: VRFY failed for a@b H=[V4NET.13.13.2] >>> host in hosts_connection_nolog? no (option unset) @@ -506,9 +512,9 @@ LOG: DNS list lookup for V4NET.13.13.100 at rbl.test.ex returned 0.0.0.0; not in >>> routing a@b >>> calling system_aliases router >>> system_aliases router declined for a@b ->>> a in "userx"? +>>> a in local_parts? >>> list element: userx ->>> a in "userx"? no (end of list) +>>> a in local_parts? no (end of list) >>> no more routers LOG: VRFY failed for a@b H=[V4NET.13.13.100] >>> host in hosts_connection_nolog? no (option unset) @@ -597,9 +603,9 @@ LOG: DNS list lookup for V4NET.13.13.101 at rbl.test.ex returned 126.255.255.255 >>> routing a@b >>> calling system_aliases router >>> system_aliases router declined for a@b ->>> a in "userx"? +>>> a in local_parts? >>> list element: userx ->>> a in "userx"? no (end of list) +>>> a in local_parts? no (end of list) >>> no more routers LOG: VRFY failed for a@b H=[V4NET.13.13.101] >>> host in hosts_connection_nolog? no (option unset) @@ -688,9 +694,9 @@ LOG: DNS list lookup for V4NET.13.13.102 at rbl.test.ex returned 128.0.0.0; not >>> routing a@b >>> calling system_aliases router >>> system_aliases router declined for a@b ->>> a in "userx"? +>>> a in local_parts? >>> list element: userx ->>> a in "userx"? no (end of list) +>>> a in local_parts? no (end of list) >>> no more routers LOG: VRFY failed for a@b H=[V4NET.13.13.102] >>> host in hosts_connection_nolog? no (option unset) @@ -779,9 +785,9 @@ LOG: DNS list lookup for V4NET.13.13.103 at rbl.test.ex returned 255.255.255.255 >>> routing a@b >>> calling system_aliases router >>> system_aliases router declined for a@b ->>> a in "userx"? +>>> a in local_parts? >>> list element: userx ->>> a in "userx"? no (end of list) +>>> a in local_parts? no (end of list) >>> no more routers LOG: VRFY failed for a@b H=[V4NET.13.13.103] >>> host in hosts_connection_nolog? no (option unset) @@ -871,9 +877,9 @@ LOG: DNS list lookup for V4NET.13.13.104 at rbl.test.ex returned 255.255.255.255 >>> routing a@b >>> calling system_aliases router >>> system_aliases router declined for a@b ->>> a in "userx"? +>>> a in local_parts? >>> list element: userx ->>> a in "userx"? no (end of list) +>>> a in local_parts? no (end of list) >>> no more routers LOG: VRFY failed for a@b H=[V4NET.13.13.104] >>> host in hosts_connection_nolog? no (option unset) @@ -963,8 +969,8 @@ LOG: DNS list lookup for V4NET.13.13.105 at rbl.test.ex returned 255.255.255.254 >>> routing a@b >>> calling system_aliases router >>> system_aliases router declined for a@b ->>> a in "userx"? +>>> a in local_parts? >>> list element: userx ->>> a in "userx"? no (end of list) +>>> a in local_parts? no (end of list) >>> no more routers LOG: VRFY failed for a@b H=[V4NET.13.13.105] diff --git a/test/stderr/0143 b/test/stderr/0143 index c6ff94fe7..0a73ce275 100644 --- a/test/stderr/0143 +++ b/test/stderr/0143 @@ -1,14 +1,18 @@ 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 dropping to exim gid; retaining priv uid +domain.com in "test.ex : *.test.ex"? no (end of list) +domain.com in domains? yes (end of list) router_name >>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>> --------> userx@domain.com <-------- @@ -20,7 +24,8 @@ hostlist: checking retry status of 127.0.0.1 127.0.0.1 [127.0.0.1]:1111/ip4.ip4.ip4.ip4 retry-status = usable delivering 10HmaX-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (userx@domain.com) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S from ip4.ip4.ip4.ip4 ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S from ip4.ip4.ip4.ip4 ... +connected SMTP<< 220 ESMTP SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes @@ -55,8 +60,9 @@ cmd buf flush ddd bytes (more expected) SMTP(shutdown)>> SMTP<< 250 OK SMTP(close)>> -cmdlog: '220:EHLO:250-:MAIL:250:RCPT:250:DATA:354:.:250:QUIT:250' +cmdlog: '220:EHLO:250-:MAIL:250:RCPT:250:DATA:354:.:250:QUIT+:250' Leaving my_smtp transport +>>>>>>>>>>>>>>>> Exim pid=p1236 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => userx@domain.com R=my_main_router T=my_smtp H=127.0.0.1 [127.0.0.1] C="250 OK" LOG: MAIN diff --git a/test/stderr/0145 b/test/stderr/0145 index 1bbb9fe95..176539a66 100644 --- a/test/stderr/0145 +++ b/test/stderr/0145 @@ -16,9 +16,12 @@ >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing x@mxt10.test.ex >>> calling domainlist router ->>> mxt10.test.ex in "*"? ->>> list element: * ->>> mxt10.test.ex in "*"? yes (matched "*") +>>> check dnssec require list +>>> mxt10.test.ex in dnssec_require_domains? no (option unset) +>>> check dnssec request list +>>> mxt10.test.ex in dnssec_request_domains? +>>> list element: * +>>> mxt10.test.ex in dnssec_request_domains? yes (matched "*") >>> domainlist router declined for x@mxt10.test.ex >>> "more" is false: skipping remaining routers >>> no more routers @@ -45,9 +48,12 @@ LOG: H=(test) [V4NET.9.8.7] F= rejected RCPT : Sender veri >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing x@ten-1.test.ex >>> calling domainlist router ->>> ten-1.test.ex in "*"? ->>> list element: * ->>> ten-1.test.ex in "*"? yes (matched "*") +>>> check dnssec require list +>>> ten-1.test.ex in dnssec_require_domains? no (option unset) +>>> check dnssec request list +>>> ten-1.test.ex in dnssec_request_domains? +>>> list element: * +>>> ten-1.test.ex in dnssec_request_domains? yes (matched "*") >>> routed by domainlist router >>> ----------- end verify ------------ >>> require: condition test succeeded in ACL "check_recipient" @@ -56,9 +62,12 @@ LOG: H=(test) [V4NET.9.8.7] F= rejected RCPT : Sender veri >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing x@mxt10.test.ex >>> calling domainlist router ->>> mxt10.test.ex in "*"? ->>> list element: * ->>> mxt10.test.ex in "*"? yes (matched "*") +>>> check dnssec require list +>>> mxt10.test.ex in dnssec_require_domains? no (option unset) +>>> check dnssec request list +>>> mxt10.test.ex in dnssec_request_domains? +>>> list element: * +>>> mxt10.test.ex in dnssec_request_domains? yes (matched "*") >>> domainlist router declined for x@mxt10.test.ex >>> "more" is false: skipping remaining routers >>> no more routers diff --git a/test/stderr/0149 b/test/stderr/0149 index b2ae45a25..81bf94397 100644 --- a/test/stderr/0149 +++ b/test/stderr/0149 @@ -1,4 +1,5 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config admin user >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -6,6 +7,8 @@ routing x@ten --------> domainlist1 router <-------- local_part=x domain=ten checking domains +ten in "<- test1 - test2-test3--4"? no (end of list) +ten in domains? yes (end of list) calling domainlist1 router domainlist1 router called for x@ten domain = ten @@ -30,10 +33,13 @@ routing y@two --------> domainlist1 router <-------- local_part=y domain=two checking domains +two in "<- test1 - test2-test3--4"? no (end of list) +two in domains? yes (end of list) calling domainlist1 router domainlist1 router called for y@two domain = two route_item = ten <+V4NET.0.0.0+V4NET.0.0.1 byname +two in "ten"? no (end of list) route_item = two V4NET.0.0.2:V4NET.0.0.4 byname original list of hosts = 'V4NET.0.0.2:V4NET.0.0.4' options = 'byname' expanded list of hosts = 'V4NET.0.0.2:V4NET.0.0.4' options = 'byname' @@ -122,19 +128,25 @@ routing x@one --------> domainlist1 router <-------- local_part=x domain=one checking domains +one in "<- test1 - test2-test3--4"? no (end of list) +one in domains? yes (end of list) calling domainlist1 router domainlist1 router called for x@one domain = one route_item = ten <+V4NET.0.0.0+V4NET.0.0.1 byname +one in "ten"? no (end of list) route_item = two V4NET.0.0.2:V4NET.0.0.4 byname +one in "two"? no (end of list) domainlist1 router declined for x@one --------> domainlist2 router <-------- local_part=x domain=one checking domains +one in domains? yes (end of list) calling domainlist2 router domainlist2 router called for x@one domain = one route_item = six <+V4NET.0.0.6+V4NET.0.0.7 byname +one in "six"? no (end of list) route_item = one V4NET.0.0.2:V4NET.0.0.4 byname original list of hosts = 'V4NET.0.0.2:V4NET.0.0.4' options = 'byname' expanded list of hosts = 'V4NET.0.0.2:V4NET.0.0.4' options = 'byname' @@ -156,15 +168,20 @@ routing x@six --------> domainlist1 router <-------- local_part=x domain=six checking domains +six in "<- test1 - test2-test3--4"? no (end of list) +six in domains? yes (end of list) calling domainlist1 router domainlist1 router called for x@six domain = six route_item = ten <+V4NET.0.0.0+V4NET.0.0.1 byname +six in "ten"? no (end of list) route_item = two V4NET.0.0.2:V4NET.0.0.4 byname +six in "two"? no (end of list) domainlist1 router declined for x@six --------> domainlist2 router <-------- local_part=x domain=six checking domains +six in domains? yes (end of list) calling domainlist2 router domainlist2 router called for x@six domain = six diff --git a/test/stderr/0157 b/test/stderr/0157 index 3a5a6fd65..e5f23273c 100644 --- a/test/stderr/0157 +++ b/test/stderr/0157 @@ -21,9 +21,11 @@ >>> check domains = +local_domains >>> b.c in "+local_domains"? >>> list element: +local_domains ->>> b.c in "test.ex"? ->>> list element: test.ex ->>> b.c in "test.ex"? no (end of list) +>>> start sublist local_domains +>>> b.c in "test.ex"? +>>> ╎list element: test.ex +>>> b.c in "test.ex"? no (end of list) +>>> end sublist local_domains >>> b.c in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) @@ -50,9 +52,11 @@ LOG: H=(test) [V4NET.0.0.1] F= rejected RCPT : invalid sender >>> check domains = +local_domains >>> b.c in "+local_domains"? >>> list element: +local_domains ->>> b.c in "test.ex"? ->>> list element: test.ex ->>> b.c in "test.ex"? no (end of list) +>>> start sublist local_domains +>>> b.c in "test.ex"? +>>> ╎list element: test.ex +>>> b.c in "test.ex"? no (end of list) +>>> end sublist local_domains >>> b.c in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) @@ -93,9 +97,11 @@ LOG: H=(test) [V4NET.0.0.1] F= rejected RCPT : invalid sender >>> check domains = +local_domains >>> b.c in "+local_domains"? >>> list element: +local_domains ->>> b.c in "test.ex"? ->>> list element: test.ex ->>> b.c in "test.ex"? no (end of list) +>>> start sublist local_domains +>>> b.c in "test.ex"? +>>> ╎list element: test.ex +>>> b.c in "test.ex"? no (end of list) +>>> end sublist local_domains >>> b.c in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) @@ -108,10 +114,12 @@ LOG: H=(test) [V4NET.0.0.1] F= rejected RCPT : invalid sender >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "V4NET.0.0.1 : V4NET.0.0.2"? ->>> list element: V4NET.0.0.1 ->>> list element: V4NET.0.0.2 ->>> host in "V4NET.0.0.1 : V4NET.0.0.2"? yes (matched "V4NET.0.0.2") +>>> start sublist relay_hosts +>>> host in "V4NET.0.0.1 : V4NET.0.0.2"? +>>> ╎list element: V4NET.0.0.1 +>>> ╎list element: V4NET.0.0.2 +>>> ╎host in "V4NET.0.0.1 : V4NET.0.0.2"? yes (matched "V4NET.0.0.2") +>>> end sublist relay_hosts >>> host in "+relay_hosts"? yes (matched "+relay_hosts") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -126,9 +134,11 @@ LOG: H=(test) [V4NET.0.0.1] F= rejected RCPT : invalid sender >>> check domains = +local_domains >>> b.c in "+local_domains"? >>> list element: +local_domains ->>> b.c in "test.ex"? ->>> list element: test.ex ->>> b.c in "test.ex"? no (end of list) +>>> start sublist local_domains +>>> b.c in "test.ex"? +>>> ╎list element: test.ex +>>> b.c in "test.ex"? no (end of list) +>>> end sublist local_domains >>> b.c in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) @@ -141,6 +151,9 @@ LOG: H=(test) [V4NET.0.0.1] F= rejected RCPT : invalid sender >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts +>>> start sublist relay_hosts +>>> cached yes match for +relay_hosts +>>> cached lookup data = NULL >>> host in "+relay_hosts"? yes (matched "+relay_hosts" - cached) >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -167,9 +180,11 @@ LOG: H=(test) [V4NET.0.0.1] F= rejected RCPT : invalid sender >>> check domains = +local_domains >>> b.c in "+local_domains"? >>> list element: +local_domains ->>> b.c in "test.ex"? ->>> list element: test.ex ->>> b.c in "test.ex"? no (end of list) +>>> start sublist local_domains +>>> b.c in "test.ex"? +>>> ╎list element: test.ex +>>> b.c in "test.ex"? no (end of list) +>>> end sublist local_domains >>> b.c in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) @@ -182,10 +197,12 @@ LOG: H=(test) [V4NET.0.0.1] F= rejected RCPT : invalid sender >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "V4NET.0.0.1 : V4NET.0.0.2"? ->>> list element: V4NET.0.0.1 ->>> list element: V4NET.0.0.2 ->>> host in "V4NET.0.0.1 : V4NET.0.0.2"? no (end of list) +>>> start sublist relay_hosts +>>> host in "V4NET.0.0.1 : V4NET.0.0.2"? +>>> ╎list element: V4NET.0.0.1 +>>> ╎list element: V4NET.0.0.2 +>>> host in "V4NET.0.0.1 : V4NET.0.0.2"? no (end of list) +>>> end sublist relay_hosts >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 26) @@ -204,9 +221,11 @@ LOG: H=(test) [V4NET.0.0.3] F= rejected RCPT : relay not permitted >>> check domains = +local_domains >>> b.c in "+local_domains"? >>> list element: +local_domains ->>> b.c in "test.ex"? ->>> list element: test.ex ->>> b.c in "test.ex"? no (end of list) +>>> start sublist local_domains +>>> b.c in "test.ex"? +>>> ╎list element: test.ex +>>> b.c in "test.ex"? no (end of list) +>>> end sublist local_domains >>> b.c in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 21) @@ -219,6 +238,9 @@ LOG: H=(test) [V4NET.0.0.3] F= rejected RCPT : relay not permitted >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts +>>> start sublist relay_hosts +>>> cached no match for +relay_hosts +>>> cached lookup data = NULL >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 26) diff --git a/test/stderr/0161 b/test/stderr/0161 index dad95576f..75986186e 100644 --- a/test/stderr/0161 +++ b/test/stderr/0161 @@ -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 @@ -7,14 +8,19 @@ routing xx@mxt6.test.ex --------> failuphost router <-------- local_part=xx domain=mxt6.test.ex checking domains +mxt6.test.ex in "test.ex : myhost.test.ex"? no (end of list) +mxt6.test.ex in domains? yes (end of list) checking local_parts +xx in local_parts? no (end of list) failuphost router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=xx domain=mxt6.test.ex checking domains +mxt6.test.ex in domains? yes (end of list) calling lookuphost router lookuphost router called for xx@mxt6.test.ex domain = mxt6.test.ex +main lookup for domain set transport remote_smtp queued for remote_smtp transport: local_part = xx domain = mxt6.test.ex @@ -26,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 @@ -34,24 +41,32 @@ routing myhost.test.ex@mxt1.test.ex --------> failuphost router <-------- local_part=myhost.test.ex domain=mxt1.test.ex checking domains +mxt1.test.ex in "test.ex : myhost.test.ex"? no (end of list) +mxt1.test.ex in domains? yes (end of list) checking local_parts +myhost.test.ex in local_parts? no (end of list) failuphost router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=myhost.test.ex domain=mxt1.test.ex checking domains +mxt1.test.ex in domains? yes (end of list) calling lookuphost router lookuphost router called for myhost.test.ex@mxt1.test.ex domain = mxt1.test.ex +main lookup for domain lowest numbered MX record points to local host: mxt1.test.ex: passed to next router (self = pass) lookuphost router passed for myhost.test.ex@mxt1.test.ex --------> fail router <-------- local_part=myhost.test.ex domain=mxt1.test.ex checking domains +mxt1.test.ex in domains? yes (end of list) checking local_parts +myhost.test.ex in local_parts? no (end of list) fail router skipped: local_parts mismatch --------> self router <-------- local_part=myhost.test.ex domain=mxt1.test.ex checking domains +mxt1.test.ex in domains? yes (end of list) self_hostname=eximtesthost.test.ex calling self router self router called for myhost.test.ex@mxt1.test.ex @@ -72,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 @@ -80,24 +96,32 @@ routing xx@mxt1.test.ex --------> failuphost router <-------- local_part=xx domain=mxt1.test.ex checking domains +mxt1.test.ex in "test.ex : myhost.test.ex"? no (end of list) +mxt1.test.ex in domains? yes (end of list) checking local_parts +xx in local_parts? no (end of list) failuphost router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=xx domain=mxt1.test.ex checking domains +mxt1.test.ex in domains? yes (end of list) calling lookuphost router lookuphost router called for xx@mxt1.test.ex domain = mxt1.test.ex +main lookup for domain lowest numbered MX record points to local host: mxt1.test.ex: passed to next router (self = pass) lookuphost router passed for xx@mxt1.test.ex --------> fail router <-------- local_part=xx domain=mxt1.test.ex checking domains +mxt1.test.ex in domains? yes (end of list) checking local_parts +xx in local_parts? no (end of list) fail router skipped: local_parts mismatch --------> self router <-------- local_part=xx domain=mxt1.test.ex checking domains +mxt1.test.ex in domains? yes (end of list) self_hostname=eximtesthost.test.ex calling self router self router called for xx@mxt1.test.ex @@ -112,6 +136,7 @@ self router passed for xx@mxt1.test.ex --------> self2 router <-------- local_part=xx domain=mxt1.test.ex checking domains +mxt1.test.ex in domains? yes (end of list) self_hostname=eximtesthost.test.ex calling self2 router self2 router called for xx@mxt1.test.ex @@ -132,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 @@ -140,19 +166,25 @@ routing xx@not-exist.test.ex --------> failuphost router <-------- local_part=xx domain=not-exist.test.ex checking domains +not-exist.test.ex in "test.ex : myhost.test.ex"? no (end of list) +not-exist.test.ex in domains? yes (end of list) checking local_parts +xx in local_parts? no (end of list) failuphost router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=xx domain=not-exist.test.ex checking domains +not-exist.test.ex in domains? yes (end of list) calling lookuphost router lookuphost router called for xx@not-exist.test.ex domain = not-exist.test.ex +main lookup for domain lookuphost router declined for xx@not-exist.test.ex "more" is false: skipping remaining routers 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 @@ -161,14 +193,18 @@ routing ff@mxt1.test.ex --------> failuphost router <-------- local_part=ff domain=mxt1.test.ex checking domains +mxt1.test.ex in "test.ex : myhost.test.ex"? no (end of list) +mxt1.test.ex in domains? yes (end of list) checking local_parts calling failuphost router failuphost router called for ff@mxt1.test.ex domain = mxt1.test.ex +main lookup for domain lowest numbered MX record points to local host: mxt1.test.ex: address failed (self = fail) 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 @@ -177,19 +213,25 @@ routing fff@mxt1.test.ex --------> failuphost router <-------- local_part=fff domain=mxt1.test.ex checking domains +mxt1.test.ex in "test.ex : myhost.test.ex"? no (end of list) +mxt1.test.ex in domains? yes (end of list) checking local_parts +fff in local_parts? no (end of list) failuphost router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=fff domain=mxt1.test.ex checking domains +mxt1.test.ex in domains? yes (end of list) calling lookuphost router lookuphost router called for fff@mxt1.test.ex domain = mxt1.test.ex +main lookup for domain lowest numbered MX record points to local host: mxt1.test.ex: passed to next router (self = pass) lookuphost router passed for fff@mxt1.test.ex --------> fail router <-------- local_part=fff domain=mxt1.test.ex checking domains +mxt1.test.ex in domains? yes (end of list) checking local_parts self_hostname=eximtesthost.test.ex calling fail router diff --git a/test/stderr/0169 b/test/stderr/0169 index 55fd2bcb0..5d4eb6dc1 100644 --- a/test/stderr/0169 +++ b/test/stderr/0169 @@ -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 @@ -17,7 +19,7 @@ appendfile: mode=600 notify_comsat=0 quota=52428800 warning=41% message_suffix=\n maildir_use_size_file=no locking by lockfile fcntl -de-tainting path 'TESTSUITE/test-mail/userx' +below-home: de-tainting path 'TESTSUITE/test-mail/userx' lock name: TESTSUITE/test-mail/userx.lock hitch name: TESTSUITE/test-mail/userx.lock.test.ex.dddddddd.pppppppp lock file created @@ -31,6 +33,7 @@ writing data block fd=dddd size=sss timeout=0 writing data block fd=dddd size=sss timeout=0 quota = 52428800 threshold = 21495808 old size = sssss message size = sss appendfile yields 0 with errno=dd more_errno=dd +>>>>>>>>>>>>>>>> Exim pid=p1236 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> appendfile transport returned OK for userx@myhost.test.ex added retry item for T:userx@myhost.test.ex: errno=dd more_errno=dd flags=1 LOG: MAIN diff --git a/test/stderr/0175 b/test/stderr/0175 index b45971a07..afaf05137 100644 --- a/test/stderr/0175 +++ b/test/stderr/0175 @@ -15,12 +15,14 @@ >>> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing user@bad.domain ->>> bad.domain in "! +local_domains"? ->>> list element: ! +local_domains ->>> bad.domain in "test.ex"? ->>> list element: test.ex ->>> bad.domain in "test.ex"? no (end of list) ->>> bad.domain in "! +local_domains"? yes (end of list) +>>> bad.domain in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> bad.domain in "test.ex"? +>>> ╎list element: test.ex +>>> bad.domain in "test.ex"? no (end of list) +>>> end sublist local_domains +>>> bad.domain in domains? yes (end of list) >>> calling fail_sender router >>> bad.domain in "bad.domain"? >>> list element: bad.domain @@ -53,20 +55,25 @@ LOG: H=(test) [V4NET.0.0.0] F= rejected RCPT : S >>> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing user@bad.domain2 ->>> bad.domain2 in "! +local_domains"? ->>> list element: ! +local_domains ->>> bad.domain2 in "test.ex"? ->>> list element: test.ex ->>> bad.domain2 in "test.ex"? no (end of list) ->>> bad.domain2 in "! +local_domains"? yes (end of list) +>>> bad.domain2 in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> bad.domain2 in "test.ex"? +>>> ╎list element: test.ex +>>> bad.domain2 in "test.ex"? no (end of list) +>>> end sublist local_domains +>>> bad.domain2 in domains? yes (end of list) >>> calling fail_sender router >>> bad.domain2 in "bad.domain"? >>> list element: bad.domain >>> bad.domain2 in "bad.domain"? no (end of list) >>> fail_sender router declined for user@bad.domain2 ->>> bad.domain2 in "! +local_domains"? ->>> list element: ! +local_domains ->>> bad.domain2 in "! +local_domains"? yes (end of list) +>>> bad.domain2 in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> cached no match for +local_domains +>>> cached lookup data = NULL +>>> bad.domain2 in domains? yes (end of list) >>> calling fail_sender2 router >>> bad.domain2 in "bad.domain2"? >>> list element: bad.domain2 @@ -98,32 +105,43 @@ LOG: H=(test) [V4NET.0.0.0] F= rejected RCPT : >>> check verify = sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing user@ten-1.test.ex ->>> ten-1.test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> ten-1.test.ex in "test.ex"? ->>> list element: test.ex ->>> ten-1.test.ex in "test.ex"? no (end of list) ->>> ten-1.test.ex in "! +local_domains"? yes (end of list) +>>> ten-1.test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> ten-1.test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ten-1.test.ex in "test.ex"? no (end of list) +>>> end sublist local_domains +>>> ten-1.test.ex in domains? yes (end of list) >>> calling fail_sender router >>> ten-1.test.ex in "bad.domain"? >>> list element: bad.domain >>> ten-1.test.ex in "bad.domain"? no (end of list) >>> fail_sender router declined for user@ten-1.test.ex ->>> ten-1.test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> ten-1.test.ex in "! +local_domains"? yes (end of list) +>>> ten-1.test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> cached no match for +local_domains +>>> cached lookup data = NULL +>>> ten-1.test.ex in domains? yes (end of list) >>> calling fail_sender2 router >>> ten-1.test.ex in "bad.domain2"? >>> list element: bad.domain2 >>> ten-1.test.ex in "bad.domain2"? no (end of list) >>> fail_sender2 router declined for user@ten-1.test.ex ->>> ten-1.test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> ten-1.test.ex in "! +local_domains"? yes (end of list) +>>> ten-1.test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> cached no match for +local_domains +>>> cached lookup data = NULL +>>> ten-1.test.ex in domains? yes (end of list) >>> calling lookuphost router ->>> ten-1.test.ex in "*"? ->>> list element: * ->>> ten-1.test.ex in "*"? yes (matched "*") +>>> check dnssec require list +>>> ten-1.test.ex in dnssec_require_domains? no (option unset) +>>> check dnssec request list +>>> ten-1.test.ex in dnssec_request_domains? +>>> list element: * +>>> ten-1.test.ex in dnssec_request_domains? yes (matched "*") >>> routed by lookuphost router >>> ----------- end verify ------------ >>> require: condition test succeeded in ACL "check_recipient" @@ -131,9 +149,12 @@ LOG: H=(test) [V4NET.0.0.0] F= rejected RCPT : >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT diff --git a/test/stderr/0180 b/test/stderr/0180 index 007e11063..9594566b8 100644 --- a/test/stderr/0180 +++ b/test/stderr/0180 @@ -10,6 +10,8 @@ >>> list element: @ >>> list element: @[] >>> some.host in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -28,6 +30,8 @@ >>> list element: @ >>> list element: @[] >>> some.host in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * diff --git a/test/stderr/0183 b/test/stderr/0183 index 36ab7a1b4..3501e48a7 100644 --- a/test/stderr/0183 +++ b/test/stderr/0183 @@ -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 @@ -16,37 +17,42 @@ routing userx@test.again.dns --------> srv router <-------- local_part=userx domain=test.again.dns checking local_parts -userx in "^srv"? +userx in local_parts? list element: ^srv compiled caseless RE '^srv' not found in local cache compiled RE '^srv' saved in local cache -userx in "^srv"? no (end of list) +userx in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=userx domain=test.again.dns checking local_parts -userx in "usery:userz"? +userx in local_parts? list element: usery list element: userz -userx in "usery:userz"? no (end of list) +userx in local_parts? no (end of list) useryz router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=userx domain=test.again.dns checking local_parts -userx in "!userd"? +userx in local_parts? list element: !userd -userx in "!userd"? yes (end of list) +userx in local_parts? yes (end of list) calling lookuphost router lookuphost router called for userx@test.again.dns domain = test.again.dns -test.again.dns in "*"? - list element: * - test.again.dns in "*"? yes (matched "*") -DNS lookup of test.again.dns (MX) using fakens -DNS lookup of test.again.dns (MX) gave TRY_AGAIN -test.again.dns in dns_again_means_nonexist? no (option unset) -returning DNS_AGAIN - writing neg-cache entry for test.again.dns-MX-xxxx, ttl -1 +main lookup for domain + check dnssec require list + test.again.dns in dnssec_require_domains? no (option unset) + check dnssec request list + test.again.dns in dnssec_request_domains? + list element: * + test.again.dns in dnssec_request_domains? yes (matched "*") + DNS lookup of test.again.dns (MX) using fakens + DNS lookup of test.again.dns (MX) gave TRY_AGAIN + test.again.dns in dns_again_means_nonexist? no (option unset) + returning DNS_AGAIN + writing neg-cache entry for test.again.dns-MX-xxxx, ttl -1 + test.again.dns not in empty list (option unset? cannot trace name) lookuphost router: defer for userx@test.again.dns message: host lookup did not complete >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -58,32 +64,37 @@ routing abcd@test.again.dns --------> srv router <-------- local_part=abcd domain=test.again.dns checking local_parts -abcd in "^srv"? +abcd in local_parts? list element: ^srv compiled caseless RE '^srv' found in local cache -abcd in "^srv"? no (end of list) +abcd in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=abcd domain=test.again.dns checking local_parts -abcd in "usery:userz"? +abcd in local_parts? list element: usery list element: userz -abcd in "usery:userz"? no (end of list) +abcd in local_parts? no (end of list) useryz router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=abcd domain=test.again.dns checking local_parts -abcd in "!userd"? +abcd in local_parts? list element: !userd -abcd in "!userd"? yes (end of list) +abcd in local_parts? yes (end of list) calling lookuphost router lookuphost router called for abcd@test.again.dns domain = test.again.dns -test.again.dns in "*"? - list element: * - test.again.dns in "*"? yes (matched "*") -DNS lookup of test.again.dns (MX): using cached value DNS_AGAIN +main lookup for domain + check dnssec require list + test.again.dns in dnssec_require_domains? no (option unset) + check dnssec request list + test.again.dns in dnssec_request_domains? + list element: * + test.again.dns in dnssec_request_domains? yes (matched "*") + DNS lookup of test.again.dns (MX): using cached value DNS_AGAIN + test.again.dns not in empty list (option unset? cannot trace name) lookuphost router: defer for abcd@test.again.dns message: host lookup did not complete >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -95,42 +106,45 @@ routing abcd@ten-1.test.ex --------> srv router <-------- local_part=abcd domain=ten-1.test.ex checking local_parts -abcd in "^srv"? +abcd in local_parts? list element: ^srv compiled caseless RE '^srv' found in local cache -abcd in "^srv"? no (end of list) +abcd in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=abcd domain=ten-1.test.ex checking local_parts -abcd in "usery:userz"? +abcd in local_parts? list element: usery list element: userz -abcd in "usery:userz"? no (end of list) +abcd in local_parts? no (end of list) useryz router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=abcd domain=ten-1.test.ex checking local_parts -abcd in "!userd"? +abcd in local_parts? list element: !userd -abcd in "!userd"? yes (end of list) +abcd in local_parts? yes (end of list) calling lookuphost router lookuphost router called for abcd@ten-1.test.ex domain = ten-1.test.ex -ten-1.test.ex in "*"? - list element: * - ten-1.test.ex in "*"? yes (matched "*") -DNS lookup of ten-1.test.ex (MX) using fakens -DNS lookup of ten-1.test.ex (MX) gave NO_DATA -returning DNS_NODATA -faking res_search(MX) response length as 65535 - writing neg-cache entry for ten-1.test.ex-MX-xxxx, ttl 3000 -ten-1.test.ex (MX resp) DNSSEC - list element: * -DNS lookup of ten-1.test.ex (A) using fakens -DNS lookup of ten-1.test.ex (A) succeeded -fully qualified name = ten-1.test.ex -ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx +main lookup for domain + check dnssec require list + ten-1.test.ex in dnssec_require_domains? no (option unset) + check dnssec request list + ten-1.test.ex in dnssec_request_domains? + list element: * + ten-1.test.ex in dnssec_request_domains? yes (matched "*") + DNS lookup of ten-1.test.ex (MX) using fakens + DNS lookup of ten-1.test.ex (MX) gave NO_DATA + returning DNS_NODATA + faking res_search(MX) response length as 65535 + writing neg-cache entry for ten-1.test.ex-MX-xxxx, ttl 3000 + ten-1.test.ex (MX resp) DNSSEC + DNS lookup of ten-1.test.ex (A) using fakens + DNS lookup of ten-1.test.ex (A) succeeded + fully qualified name = ten-1.test.ex + ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx set transport smtp queued for smtp transport: local_part = abcd domain = ten-1.test.ex @@ -149,17 +163,17 @@ routing usery@test.again.dns --------> srv router <-------- local_part=usery domain=test.again.dns checking local_parts -usery in "^srv"? +usery in local_parts? list element: ^srv compiled caseless RE '^srv' found in local cache -usery in "^srv"? no (end of list) +usery in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=usery domain=test.again.dns checking local_parts -usery in "usery:userz"? +usery in local_parts? list element: usery - usery in "usery:userz"? yes (matched "usery") + usery in local_parts? yes (matched "usery") calling useryz router useryz router called for usery@test.again.dns domain = test.again.dns @@ -172,10 +186,12 @@ expanded list of hosts = 'test.again.dns' options = 'bydns' set transport smtp finding IP address for test.again.dns doing DNS lookup -test.again.dns in "*"? - list element: * - test.again.dns in "*"? yes (matched "*") - list element: * +check dnssec require list + test.again.dns in dnssec_require_domains? no (option unset) +check dnssec request list + test.again.dns in dnssec_request_domains? + list element: * + test.again.dns in dnssec_request_domains? yes (matched "*") DNS lookup of test.again.dns (A) using fakens DNS lookup of test.again.dns (A) gave TRY_AGAIN test.again.dns in dns_again_means_nonexist? no (option unset) @@ -192,18 +208,18 @@ routing userz@test.again.dns --------> srv router <-------- local_part=userz domain=test.again.dns checking local_parts -userz in "^srv"? +userz in local_parts? list element: ^srv compiled caseless RE '^srv' found in local cache -userz in "^srv"? no (end of list) +userz in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=userz domain=test.again.dns checking local_parts -userz in "usery:userz"? +userz in local_parts? list element: usery list element: userz - userz in "usery:userz"? yes (matched "userz") + userz in local_parts? yes (matched "userz") calling useryz router useryz router called for userz@test.again.dns domain = test.again.dns @@ -215,10 +231,12 @@ original list of hosts = '$domain' options = 'bydns' expanded list of hosts = 'test.again.dns' options = 'bydns' finding IP address for test.again.dns doing DNS lookup -test.again.dns in "*"? - list element: * - test.again.dns in "*"? yes (matched "*") - list element: * +check dnssec require list + test.again.dns in dnssec_require_domains? no (option unset) +check dnssec request list + test.again.dns in dnssec_request_domains? + list element: * + test.again.dns in dnssec_request_domains? yes (matched "*") DNS lookup of test.again.dns (A): using cached value DNS_AGAIN useryz router: defer for userz@test.again.dns message: host lookup for test.again.dns did not complete (DNS timeout?) @@ -231,37 +249,40 @@ routing xyz@ten-1.test.ex --------> srv router <-------- local_part=xyz domain=ten-1.test.ex checking local_parts -xyz in "^srv"? +xyz in local_parts? list element: ^srv compiled caseless RE '^srv' found in local cache -xyz in "^srv"? no (end of list) +xyz in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=xyz domain=ten-1.test.ex checking local_parts -xyz in "usery:userz"? +xyz in local_parts? list element: usery list element: userz -xyz in "usery:userz"? no (end of list) +xyz in local_parts? no (end of list) useryz router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=xyz domain=ten-1.test.ex checking local_parts -xyz in "!userd"? +xyz in local_parts? list element: !userd -xyz in "!userd"? yes (end of list) +xyz in local_parts? yes (end of list) calling lookuphost router lookuphost router called for xyz@ten-1.test.ex domain = ten-1.test.ex -ten-1.test.ex in "*"? - list element: * - ten-1.test.ex in "*"? yes (matched "*") -DNS lookup of ten-1.test.ex (MX): using cached value DNS_NODATA - list element: * -DNS lookup of ten-1.test.ex (A) using fakens -DNS lookup of ten-1.test.ex (A) succeeded -fully qualified name = ten-1.test.ex -ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx +main lookup for domain + check dnssec require list + ten-1.test.ex in dnssec_require_domains? no (option unset) + check dnssec request list + ten-1.test.ex in dnssec_request_domains? + list element: * + ten-1.test.ex in dnssec_request_domains? yes (matched "*") + DNS lookup of ten-1.test.ex (MX): using cached value DNS_NODATA + DNS lookup of ten-1.test.ex (A) using fakens + DNS lookup of ten-1.test.ex (A) succeeded + fully qualified name = ten-1.test.ex + ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx queued for smtp transport: local_part = xyz domain = ten-1.test.ex errors_to=NULL @@ -273,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 @@ -290,36 +312,41 @@ routing userx@test.fail.dns --------> srv router <-------- local_part=userx domain=test.fail.dns checking local_parts -userx in "^srv"? +userx in local_parts? list element: ^srv compiled caseless RE '^srv' not found in local cache compiled RE '^srv' saved in local cache -userx in "^srv"? no (end of list) +userx in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=userx domain=test.fail.dns checking local_parts -userx in "usery:userz"? +userx in local_parts? list element: usery list element: userz -userx in "usery:userz"? no (end of list) +userx in local_parts? no (end of list) useryz router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=userx domain=test.fail.dns checking local_parts -userx in "!userd"? +userx in local_parts? list element: !userd -userx in "!userd"? yes (end of list) +userx in local_parts? yes (end of list) calling lookuphost router lookuphost router called for userx@test.fail.dns domain = test.fail.dns -test.fail.dns in "*"? - list element: * - test.fail.dns in "*"? yes (matched "*") -DNS lookup of test.fail.dns (MX) using fakens -DNS lookup of test.fail.dns (MX) gave NO_RECOVERY -returning DNS_FAIL - writing neg-cache entry for test.fail.dns-MX-xxxx, ttl -1 +main lookup for domain + check dnssec require list + test.fail.dns in dnssec_require_domains? no (option unset) + check dnssec request list + test.fail.dns in dnssec_request_domains? + list element: * + test.fail.dns in dnssec_request_domains? yes (matched "*") + DNS lookup of test.fail.dns (MX) using fakens + DNS lookup of test.fail.dns (MX) gave NO_RECOVERY + returning DNS_FAIL + writing neg-cache entry for test.fail.dns-MX-xxxx, ttl -1 + test.fail.dns not in empty list (option unset? cannot trace name) lookuphost router: defer for userx@test.fail.dns message: host lookup did not complete >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -331,32 +358,37 @@ routing abcd@test.fail.dns --------> srv router <-------- local_part=abcd domain=test.fail.dns checking local_parts -abcd in "^srv"? +abcd in local_parts? list element: ^srv compiled caseless RE '^srv' found in local cache -abcd in "^srv"? no (end of list) +abcd in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=abcd domain=test.fail.dns checking local_parts -abcd in "usery:userz"? +abcd in local_parts? list element: usery list element: userz -abcd in "usery:userz"? no (end of list) +abcd in local_parts? no (end of list) useryz router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=abcd domain=test.fail.dns checking local_parts -abcd in "!userd"? +abcd in local_parts? list element: !userd -abcd in "!userd"? yes (end of list) +abcd in local_parts? yes (end of list) calling lookuphost router lookuphost router called for abcd@test.fail.dns domain = test.fail.dns -test.fail.dns in "*"? - list element: * - test.fail.dns in "*"? yes (matched "*") -DNS lookup of test.fail.dns (MX): using cached value DNS_FAIL +main lookup for domain + check dnssec require list + test.fail.dns in dnssec_require_domains? no (option unset) + check dnssec request list + test.fail.dns in dnssec_request_domains? + list element: * + test.fail.dns in dnssec_request_domains? yes (matched "*") + DNS lookup of test.fail.dns (MX): using cached value DNS_FAIL + test.fail.dns not in empty list (option unset? cannot trace name) lookuphost router: defer for abcd@test.fail.dns message: host lookup did not complete >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -368,42 +400,45 @@ routing abcd@ten-1.test.ex --------> srv router <-------- local_part=abcd domain=ten-1.test.ex checking local_parts -abcd in "^srv"? +abcd in local_parts? list element: ^srv compiled caseless RE '^srv' found in local cache -abcd in "^srv"? no (end of list) +abcd in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=abcd domain=ten-1.test.ex checking local_parts -abcd in "usery:userz"? +abcd in local_parts? list element: usery list element: userz -abcd in "usery:userz"? no (end of list) +abcd in local_parts? no (end of list) useryz router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=abcd domain=ten-1.test.ex checking local_parts -abcd in "!userd"? +abcd in local_parts? list element: !userd -abcd in "!userd"? yes (end of list) +abcd in local_parts? yes (end of list) calling lookuphost router lookuphost router called for abcd@ten-1.test.ex domain = ten-1.test.ex -ten-1.test.ex in "*"? - list element: * - ten-1.test.ex in "*"? yes (matched "*") -DNS lookup of ten-1.test.ex (MX) using fakens -DNS lookup of ten-1.test.ex (MX) gave NO_DATA -returning DNS_NODATA -faking res_search(MX) response length as 65535 - writing neg-cache entry for ten-1.test.ex-MX-xxxx, ttl 3000 -ten-1.test.ex (MX resp) DNSSEC - list element: * -DNS lookup of ten-1.test.ex (A) using fakens -DNS lookup of ten-1.test.ex (A) succeeded -fully qualified name = ten-1.test.ex -ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx +main lookup for domain + check dnssec require list + ten-1.test.ex in dnssec_require_domains? no (option unset) + check dnssec request list + ten-1.test.ex in dnssec_request_domains? + list element: * + ten-1.test.ex in dnssec_request_domains? yes (matched "*") + DNS lookup of ten-1.test.ex (MX) using fakens + DNS lookup of ten-1.test.ex (MX) gave NO_DATA + returning DNS_NODATA + faking res_search(MX) response length as 65535 + writing neg-cache entry for ten-1.test.ex-MX-xxxx, ttl 3000 + ten-1.test.ex (MX resp) DNSSEC + DNS lookup of ten-1.test.ex (A) using fakens + DNS lookup of ten-1.test.ex (A) succeeded + fully qualified name = ten-1.test.ex + ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx set transport smtp queued for smtp transport: local_part = abcd domain = ten-1.test.ex @@ -422,17 +457,17 @@ routing usery@test.fail.dns --------> srv router <-------- local_part=usery domain=test.fail.dns checking local_parts -usery in "^srv"? +usery in local_parts? list element: ^srv compiled caseless RE '^srv' found in local cache -usery in "^srv"? no (end of list) +usery in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=usery domain=test.fail.dns checking local_parts -usery in "usery:userz"? +usery in local_parts? list element: usery - usery in "usery:userz"? yes (matched "usery") + usery in local_parts? yes (matched "usery") calling useryz router useryz router called for usery@test.fail.dns domain = test.fail.dns @@ -445,10 +480,12 @@ expanded list of hosts = 'test.fail.dns' options = 'bydns' set transport smtp finding IP address for test.fail.dns doing DNS lookup -test.fail.dns in "*"? - list element: * - test.fail.dns in "*"? yes (matched "*") - list element: * +check dnssec require list + test.fail.dns in dnssec_require_domains? no (option unset) +check dnssec request list + test.fail.dns in dnssec_request_domains? + list element: * + test.fail.dns in dnssec_request_domains? yes (matched "*") DNS lookup of test.fail.dns (A) using fakens DNS lookup of test.fail.dns (A) gave NO_RECOVERY returning DNS_FAIL @@ -464,18 +501,18 @@ routing userz@test.fail.dns --------> srv router <-------- local_part=userz domain=test.fail.dns checking local_parts -userz in "^srv"? +userz in local_parts? list element: ^srv compiled caseless RE '^srv' found in local cache -userz in "^srv"? no (end of list) +userz in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=userz domain=test.fail.dns checking local_parts -userz in "usery:userz"? +userz in local_parts? list element: usery list element: userz - userz in "usery:userz"? yes (matched "userz") + userz in local_parts? yes (matched "userz") calling useryz router useryz router called for userz@test.fail.dns domain = test.fail.dns @@ -487,10 +524,12 @@ original list of hosts = '$domain' options = 'bydns' expanded list of hosts = 'test.fail.dns' options = 'bydns' finding IP address for test.fail.dns doing DNS lookup -test.fail.dns in "*"? - list element: * - test.fail.dns in "*"? yes (matched "*") - list element: * +check dnssec require list + test.fail.dns in dnssec_require_domains? no (option unset) +check dnssec request list + test.fail.dns in dnssec_request_domains? + list element: * + test.fail.dns in dnssec_request_domains? yes (matched "*") DNS lookup of test.fail.dns (A): using cached value DNS_FAIL useryz router: defer for userz@test.fail.dns message: host lookup for test.fail.dns did not complete (DNS timeout?) @@ -503,37 +542,40 @@ routing xyz@ten-1.test.ex --------> srv router <-------- local_part=xyz domain=ten-1.test.ex checking local_parts -xyz in "^srv"? +xyz in local_parts? list element: ^srv compiled caseless RE '^srv' found in local cache -xyz in "^srv"? no (end of list) +xyz in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=xyz domain=ten-1.test.ex checking local_parts -xyz in "usery:userz"? +xyz in local_parts? list element: usery list element: userz -xyz in "usery:userz"? no (end of list) +xyz in local_parts? no (end of list) useryz router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=xyz domain=ten-1.test.ex checking local_parts -xyz in "!userd"? +xyz in local_parts? list element: !userd -xyz in "!userd"? yes (end of list) +xyz in local_parts? yes (end of list) calling lookuphost router lookuphost router called for xyz@ten-1.test.ex domain = ten-1.test.ex -ten-1.test.ex in "*"? - list element: * - ten-1.test.ex in "*"? yes (matched "*") -DNS lookup of ten-1.test.ex (MX): using cached value DNS_NODATA - list element: * -DNS lookup of ten-1.test.ex (A) using fakens -DNS lookup of ten-1.test.ex (A) succeeded -fully qualified name = ten-1.test.ex -ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx +main lookup for domain + check dnssec require list + ten-1.test.ex in dnssec_require_domains? no (option unset) + check dnssec request list + ten-1.test.ex in dnssec_request_domains? + list element: * + ten-1.test.ex in dnssec_request_domains? yes (matched "*") + DNS lookup of ten-1.test.ex (MX): using cached value DNS_NODATA + DNS lookup of ten-1.test.ex (A) using fakens + DNS lookup of ten-1.test.ex (A) succeeded + fully qualified name = ten-1.test.ex + ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx queued for smtp transport: local_part = xyz domain = ten-1.test.ex errors_to=NULL @@ -545,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 @@ -562,37 +605,41 @@ routing userx@nonexist.test.ex --------> srv router <-------- local_part=userx domain=nonexist.test.ex checking local_parts -userx in "^srv"? +userx in local_parts? list element: ^srv compiled caseless RE '^srv' not found in local cache compiled RE '^srv' saved in local cache -userx in "^srv"? no (end of list) +userx in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=userx domain=nonexist.test.ex checking local_parts -userx in "usery:userz"? +userx in local_parts? list element: usery list element: userz -userx in "usery:userz"? no (end of list) +userx in local_parts? no (end of list) useryz router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=userx domain=nonexist.test.ex checking local_parts -userx in "!userd"? +userx in local_parts? list element: !userd -userx in "!userd"? yes (end of list) +userx in local_parts? yes (end of list) calling lookuphost router lookuphost router called for userx@nonexist.test.ex domain = nonexist.test.ex -nonexist.test.ex in "*"? - list element: * - nonexist.test.ex in "*"? yes (matched "*") -DNS lookup of nonexist.test.ex (MX) using fakens -DNS lookup of nonexist.test.ex (MX) gave HOST_NOT_FOUND -returning DNS_NOMATCH -faking res_search(MX) response length as 65535 - writing neg-cache entry for nonexist.test.ex-MX-xxxx, ttl 3000 +main lookup for domain + check dnssec require list + nonexist.test.ex in dnssec_require_domains? no (option unset) + check dnssec request list + nonexist.test.ex in dnssec_request_domains? + list element: * + nonexist.test.ex in dnssec_request_domains? yes (matched "*") + DNS lookup of nonexist.test.ex (MX) using fakens + DNS lookup of nonexist.test.ex (MX) gave HOST_NOT_FOUND + returning DNS_NOMATCH + faking res_search(MX) response length as 65535 + writing neg-cache entry for nonexist.test.ex-MX-xxxx, ttl 3000 lookuphost router declined for userx@nonexist.test.ex "more" is false: skipping remaining routers no more routers @@ -605,32 +652,36 @@ routing abcd@nonexist.test.ex --------> srv router <-------- local_part=abcd domain=nonexist.test.ex checking local_parts -abcd in "^srv"? +abcd in local_parts? list element: ^srv compiled caseless RE '^srv' found in local cache -abcd in "^srv"? no (end of list) +abcd in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=abcd domain=nonexist.test.ex checking local_parts -abcd in "usery:userz"? +abcd in local_parts? list element: usery list element: userz -abcd in "usery:userz"? no (end of list) +abcd in local_parts? no (end of list) useryz router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=abcd domain=nonexist.test.ex checking local_parts -abcd in "!userd"? +abcd in local_parts? list element: !userd -abcd in "!userd"? yes (end of list) +abcd in local_parts? yes (end of list) calling lookuphost router lookuphost router called for abcd@nonexist.test.ex domain = nonexist.test.ex -nonexist.test.ex in "*"? - list element: * - nonexist.test.ex in "*"? yes (matched "*") -DNS lookup of nonexist.test.ex (MX): using cached value DNS_NOMATCH +main lookup for domain + check dnssec require list + nonexist.test.ex in dnssec_require_domains? no (option unset) + check dnssec request list + nonexist.test.ex in dnssec_request_domains? + list element: * + nonexist.test.ex in dnssec_request_domains? yes (matched "*") + DNS lookup of nonexist.test.ex (MX): using cached value DNS_NOMATCH lookuphost router declined for abcd@nonexist.test.ex "more" is false: skipping remaining routers no more routers @@ -643,42 +694,45 @@ routing abcd@ten-1.test.ex --------> srv router <-------- local_part=abcd domain=ten-1.test.ex checking local_parts -abcd in "^srv"? +abcd in local_parts? list element: ^srv compiled caseless RE '^srv' found in local cache -abcd in "^srv"? no (end of list) +abcd in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=abcd domain=ten-1.test.ex checking local_parts -abcd in "usery:userz"? +abcd in local_parts? list element: usery list element: userz -abcd in "usery:userz"? no (end of list) +abcd in local_parts? no (end of list) useryz router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=abcd domain=ten-1.test.ex checking local_parts -abcd in "!userd"? +abcd in local_parts? list element: !userd -abcd in "!userd"? yes (end of list) +abcd in local_parts? yes (end of list) calling lookuphost router lookuphost router called for abcd@ten-1.test.ex domain = ten-1.test.ex -ten-1.test.ex in "*"? - list element: * - ten-1.test.ex in "*"? yes (matched "*") -DNS lookup of ten-1.test.ex (MX) using fakens -DNS lookup of ten-1.test.ex (MX) gave NO_DATA -returning DNS_NODATA -faking res_search(MX) response length as 65535 - writing neg-cache entry for ten-1.test.ex-MX-xxxx, ttl 3000 -ten-1.test.ex (MX resp) DNSSEC - list element: * -DNS lookup of ten-1.test.ex (A) using fakens -DNS lookup of ten-1.test.ex (A) succeeded -fully qualified name = ten-1.test.ex -ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx +main lookup for domain + check dnssec require list + ten-1.test.ex in dnssec_require_domains? no (option unset) + check dnssec request list + ten-1.test.ex in dnssec_request_domains? + list element: * + ten-1.test.ex in dnssec_request_domains? yes (matched "*") + DNS lookup of ten-1.test.ex (MX) using fakens + DNS lookup of ten-1.test.ex (MX) gave NO_DATA + returning DNS_NODATA + faking res_search(MX) response length as 65535 + writing neg-cache entry for ten-1.test.ex-MX-xxxx, ttl 3000 + ten-1.test.ex (MX resp) DNSSEC + DNS lookup of ten-1.test.ex (A) using fakens + DNS lookup of ten-1.test.ex (A) succeeded + fully qualified name = ten-1.test.ex + ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx set transport smtp queued for smtp transport: local_part = abcd domain = ten-1.test.ex @@ -697,17 +751,17 @@ routing usery@nonexist.test.ex --------> srv router <-------- local_part=usery domain=nonexist.test.ex checking local_parts -usery in "^srv"? +usery in local_parts? list element: ^srv compiled caseless RE '^srv' found in local cache -usery in "^srv"? no (end of list) +usery in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=usery domain=nonexist.test.ex checking local_parts -usery in "usery:userz"? +usery in local_parts? list element: usery - usery in "usery:userz"? yes (matched "usery") + usery in local_parts? yes (matched "usery") calling useryz router useryz router called for usery@nonexist.test.ex domain = nonexist.test.ex @@ -720,10 +774,12 @@ expanded list of hosts = 'nonexist.test.ex' options = 'bydns' set transport smtp finding IP address for nonexist.test.ex doing DNS lookup -nonexist.test.ex in "*"? - list element: * - nonexist.test.ex in "*"? yes (matched "*") - list element: * +check dnssec require list + nonexist.test.ex in dnssec_require_domains? no (option unset) +check dnssec request list + nonexist.test.ex in dnssec_request_domains? + list element: * + nonexist.test.ex in dnssec_request_domains? yes (matched "*") DNS lookup of nonexist.test.ex (A) using fakens DNS lookup of nonexist.test.ex (A) gave HOST_NOT_FOUND returning DNS_NOMATCH @@ -740,18 +796,18 @@ routing userz@nonexist.test.ex --------> srv router <-------- local_part=userz domain=nonexist.test.ex checking local_parts -userz in "^srv"? +userz in local_parts? list element: ^srv compiled caseless RE '^srv' found in local cache -userz in "^srv"? no (end of list) +userz in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=userz domain=nonexist.test.ex checking local_parts -userz in "usery:userz"? +userz in local_parts? list element: usery list element: userz - userz in "usery:userz"? yes (matched "userz") + userz in local_parts? yes (matched "userz") calling useryz router useryz router called for userz@nonexist.test.ex domain = nonexist.test.ex @@ -763,10 +819,12 @@ original list of hosts = '$domain' options = 'bydns' expanded list of hosts = 'nonexist.test.ex' options = 'bydns' finding IP address for nonexist.test.ex doing DNS lookup -nonexist.test.ex in "*"? - list element: * - nonexist.test.ex in "*"? yes (matched "*") - list element: * +check dnssec require list + nonexist.test.ex in dnssec_require_domains? no (option unset) +check dnssec request list + nonexist.test.ex in dnssec_request_domains? + list element: * + nonexist.test.ex in dnssec_request_domains? yes (matched "*") DNS lookup of nonexist.test.ex (A): using cached value DNS_NOMATCH useryz router: defer for userz@nonexist.test.ex message: lookup of host "nonexist.test.ex" failed in useryz router @@ -779,37 +837,40 @@ routing xyz@ten-1.test.ex --------> srv router <-------- local_part=xyz domain=ten-1.test.ex checking local_parts -xyz in "^srv"? +xyz in local_parts? list element: ^srv compiled caseless RE '^srv' found in local cache -xyz in "^srv"? no (end of list) +xyz in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=xyz domain=ten-1.test.ex checking local_parts -xyz in "usery:userz"? +xyz in local_parts? list element: usery list element: userz -xyz in "usery:userz"? no (end of list) +xyz in local_parts? no (end of list) useryz router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=xyz domain=ten-1.test.ex checking local_parts -xyz in "!userd"? +xyz in local_parts? list element: !userd -xyz in "!userd"? yes (end of list) +xyz in local_parts? yes (end of list) calling lookuphost router lookuphost router called for xyz@ten-1.test.ex domain = ten-1.test.ex -ten-1.test.ex in "*"? - list element: * - ten-1.test.ex in "*"? yes (matched "*") -DNS lookup of ten-1.test.ex (MX): using cached value DNS_NODATA - list element: * -DNS lookup of ten-1.test.ex (A) using fakens -DNS lookup of ten-1.test.ex (A) succeeded -fully qualified name = ten-1.test.ex -ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx +main lookup for domain + check dnssec require list + ten-1.test.ex in dnssec_require_domains? no (option unset) + check dnssec request list + ten-1.test.ex in dnssec_request_domains? + list element: * + ten-1.test.ex in dnssec_request_domains? yes (matched "*") + DNS lookup of ten-1.test.ex (MX): using cached value DNS_NODATA + DNS lookup of ten-1.test.ex (A) using fakens + DNS lookup of ten-1.test.ex (A) succeeded + fully qualified name = ten-1.test.ex + ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx queued for smtp transport: local_part = xyz domain = ten-1.test.ex errors_to=NULL @@ -821,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 @@ -838,25 +900,29 @@ routing srv@test.again.dns --------> srv router <-------- local_part=srv domain=test.again.dns checking local_parts -srv in "^srv"? +srv in local_parts? list element: ^srv compiled caseless RE '^srv' not found in local cache compiled RE '^srv' saved in local cache - srv in "^srv"? yes (matched "^srv") + srv in local_parts? yes (matched "^srv") calling srv router srv router called for srv@test.again.dns domain = test.again.dns -test.again.dns in "*"? - list element: * - test.again.dns in "*"? yes (matched "*") -DNS lookup of _smtp._tcp.test.again.dns (SRV) using fakens -DNS lookup of _smtp._tcp.test.again.dns (SRV) gave TRY_AGAIN -_smtp._tcp.test.again.dns in dns_again_means_nonexist? no (option unset) -returning DNS_AGAIN - writing neg-cache entry for _smtp._tcp.test.again.dns-SRV-xxxx, ttl -1 -test.again.dns in "test.fail.dns"? - list element: test.fail.dns -test.again.dns in "test.fail.dns"? no (end of list) +main lookup for domain + check dnssec require list + test.again.dns in dnssec_require_domains? no (option unset) + check dnssec request list + test.again.dns in dnssec_request_domains? + list element: * + test.again.dns in dnssec_request_domains? yes (matched "*") + DNS lookup of _smtp._tcp.test.again.dns (SRV) using fakens + DNS lookup of _smtp._tcp.test.again.dns (SRV) gave TRY_AGAIN + _smtp._tcp.test.again.dns in dns_again_means_nonexist? no (option unset) + returning DNS_AGAIN + writing neg-cache entry for _smtp._tcp.test.again.dns-SRV-xxxx, ttl -1 + test.again.dns in srv_fail_domains? + list element: test.fail.dns + test.again.dns in srv_fail_domains? no (end of list) srv router: defer for srv@test.again.dns message: host lookup did not complete >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -868,42 +934,46 @@ routing srv@test.fail.dns --------> srv router <-------- local_part=srv domain=test.fail.dns checking local_parts -srv in "^srv"? +srv in local_parts? list element: ^srv compiled caseless RE '^srv' found in local cache - srv in "^srv"? yes (matched "^srv") + srv in local_parts? yes (matched "^srv") calling srv router srv router called for srv@test.fail.dns domain = test.fail.dns -test.fail.dns in "*"? - list element: * - test.fail.dns in "*"? yes (matched "*") -DNS lookup of _smtp._tcp.test.fail.dns (SRV) using fakens -DNS lookup of _smtp._tcp.test.fail.dns (SRV) gave NO_RECOVERY -returning DNS_FAIL - writing neg-cache entry for _smtp._tcp.test.fail.dns-SRV-xxxx, ttl -1 -test.fail.dns in "test.fail.dns"? - list element: test.fail.dns - test.fail.dns in "test.fail.dns"? yes (matched "test.fail.dns") -DNS_FAIL treated as DNS_NODATA (domain in srv_fail_domains) -DNS lookup of test.fail.dns (MX) using fakens -DNS lookup of test.fail.dns (MX) gave NO_RECOVERY -returning DNS_FAIL - writing neg-cache entry for test.fail.dns-MX-xxxx, ttl -1 -test.fail.dns in "test.fail.dns"? - list element: test.fail.dns - test.fail.dns in "test.fail.dns"? yes (matched "test.fail.dns") -DNS_FAIL treated as DNS_NODATA (domain in mx_fail_domains) - list element: * -DNS lookup of test.fail.dns (A) using fakens -DNS lookup of test.fail.dns (A) gave NO_RECOVERY -returning DNS_FAIL - writing neg-cache entry for test.fail.dns-A-xxxx, ttl -1 +main lookup for domain + check dnssec require list + test.fail.dns in dnssec_require_domains? no (option unset) + check dnssec request list + test.fail.dns in dnssec_request_domains? + list element: * + test.fail.dns in dnssec_request_domains? yes (matched "*") + DNS lookup of _smtp._tcp.test.fail.dns (SRV) using fakens + DNS lookup of _smtp._tcp.test.fail.dns (SRV) gave NO_RECOVERY + returning DNS_FAIL + writing neg-cache entry for _smtp._tcp.test.fail.dns-SRV-xxxx, ttl -1 + test.fail.dns in srv_fail_domains? + list element: test.fail.dns + test.fail.dns in srv_fail_domains? yes (matched "test.fail.dns") + DNS_FAIL treated as DNS_NODATA (domain in srv_fail_domains) + DNS lookup of test.fail.dns (MX) using fakens + DNS lookup of test.fail.dns (MX) gave NO_RECOVERY + returning DNS_FAIL + writing neg-cache entry for test.fail.dns-MX-xxxx, ttl -1 + test.fail.dns in mx_fail_domains? + list element: test.fail.dns + test.fail.dns in mx_fail_domains? yes (matched "test.fail.dns") + DNS_FAIL treated as DNS_NODATA (domain in mx_fail_domains) + DNS lookup of test.fail.dns (A) using fakens + DNS lookup of test.fail.dns (A) gave NO_RECOVERY + returning DNS_FAIL + writing neg-cache entry for test.fail.dns-A-xxxx, ttl -1 srv router: defer for srv@test.fail.dns message: host lookup did not complete 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 @@ -921,37 +991,41 @@ routing userx@nonexist.example.com --------> srv router <-------- local_part=userx domain=nonexist.example.com checking local_parts -userx in "^srv"? +userx in local_parts? list element: ^srv compiled caseless RE '^srv' not found in local cache compiled RE '^srv' saved in local cache -userx in "^srv"? no (end of list) +userx in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=userx domain=nonexist.example.com checking local_parts -userx in "usery:userz"? +userx in local_parts? list element: usery list element: userz -userx in "usery:userz"? no (end of list) +userx in local_parts? no (end of list) useryz router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=userx domain=nonexist.example.com checking local_parts -userx in "!userd"? +userx in local_parts? list element: !userd -userx in "!userd"? yes (end of list) +userx in local_parts? yes (end of list) calling lookuphost router lookuphost router called for userx@nonexist.example.com domain = nonexist.example.com -nonexist.example.com in "*"? - list element: * - nonexist.example.com in "*"? yes (matched "*") -DNS lookup of nonexist.example.com (MX) using fakens -DNS lookup of nonexist.example.com (MX) gave HOST_NOT_FOUND -returning DNS_NOMATCH -faking res_search(MX) response length as 65535 - writing neg-cache entry for nonexist.example.com-MX-xxxx, ttl 2 +main lookup for domain + check dnssec require list + nonexist.example.com in dnssec_require_domains? no (option unset) + check dnssec request list + nonexist.example.com in dnssec_request_domains? + list element: * + nonexist.example.com in dnssec_request_domains? yes (matched "*") + DNS lookup of nonexist.example.com (MX) using fakens + DNS lookup of nonexist.example.com (MX) gave HOST_NOT_FOUND + returning DNS_NOMATCH + faking res_search(MX) response length as 65535 + writing neg-cache entry for nonexist.example.com-MX-xxxx, ttl 2 lookuphost router declined for userx@nonexist.example.com "more" is false: skipping remaining routers no more routers @@ -964,25 +1038,25 @@ routing userd@nonexist.example.com --------> srv router <-------- local_part=userd domain=nonexist.example.com checking local_parts -userd in "^srv"? +userd in local_parts? list element: ^srv compiled caseless RE '^srv' found in local cache -userd in "^srv"? no (end of list) +userd in local_parts? no (end of list) srv router skipped: local_parts mismatch --------> useryz router <-------- local_part=userd domain=nonexist.example.com checking local_parts -userd in "usery:userz"? +userd in local_parts? list element: usery list element: userz -userd in "usery:userz"? no (end of list) +userd in local_parts? no (end of list) useryz router skipped: local_parts mismatch --------> lookuphost router <-------- local_part=userd domain=nonexist.example.com checking local_parts -userd in "!userd"? +userd in local_parts? list element: !userd - userd in "!userd"? no (matched "!userd") + userd in local_parts? no (matched "!userd") lookuphost router skipped: local_parts mismatch --------> delay router <-------- local_part=userd domain=nonexist.example.com @@ -997,15 +1071,19 @@ checking "condition" "${acl {delay}}"... calling delay router delay router called for userd@nonexist.example.com domain = nonexist.example.com -nonexist.example.com in "*"? - list element: * - nonexist.example.com in "*"? yes (matched "*") -DNS lookup of nonexist.example.com (MX): cached value DNS_NOMATCH past valid time -DNS lookup of nonexist.example.com (MX) using fakens -DNS lookup of nonexist.example.com (MX) gave HOST_NOT_FOUND -returning DNS_NOMATCH -faking res_search(MX) response length as 65535 - update neg-cache entry for nonexist.example.com-MX-xxxx, ttl 2 +main lookup for domain + check dnssec require list + nonexist.example.com in dnssec_require_domains? no (option unset) + check dnssec request list + nonexist.example.com in dnssec_request_domains? + list element: * + nonexist.example.com in dnssec_request_domains? yes (matched "*") + DNS lookup of nonexist.example.com (MX): cached value DNS_NOMATCH past valid time + DNS lookup of nonexist.example.com (MX) using fakens + DNS lookup of nonexist.example.com (MX) gave HOST_NOT_FOUND + returning DNS_NOMATCH + faking res_search(MX) response length as 65535 + update neg-cache entry for nonexist.example.com-MX-xxxx, ttl 2 delay router declined for userd@nonexist.example.com "more" is false: skipping remaining routers no more routers diff --git a/test/stderr/0217 b/test/stderr/0217 index f78a7d118..c03f53a2d 100644 --- a/test/stderr/0217 +++ b/test/stderr/0217 @@ -1,7 +1,8 @@ LOG: MAIN <= CALLER@test.ex U=CALLER P=local S=sss delivering 10HmbL-000000005vi-0000 -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-OK @@ -834,7 +835,8 @@ LOG: MAIN LOG: MAIN <= CALLER@test.ex U=CALLER P=local S=sss delivering 10HmbP-000000005vi-0000 -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-OK @@ -858,7 +860,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected SMTP(shutdown)>> SMTP(closed)<< SMTP(close)>> -cmdlog: '220:EHLO:250-:MAIL:250:RCPT:250:RCPT:250:RCPT:250:RCPT:250:DATA:351:.:250:QUIT' +cmdlog: '220:EHLO:250-:MAIL:250:RCPT:250:RCPT:250:RCPT:250:RCPT:250:DATA:351:.:250:QUIT+' LOG: MAIN => w@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] C="250 OK" LOG: MAIN diff --git a/test/stderr/0218 b/test/stderr/0218 index 43c39ff22..74109282a 100644 --- a/test/stderr/0218 +++ b/test/stderr/0218 @@ -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 @@ -8,19 +9,29 @@ LOG: queue_run MAIN queue running combined directories looking in TESTSUITE/spool//input delivering 10HmaX-000000005vi-0000 (queue run pid p1234) +test.ex in ""? no (end of list) +CALLER@test.ex in senders? no (end of list) R: client (ACL) T: send_to_server (ACL) ->>>>>>>>>>>>>>>> Exim pid=p1237 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1237 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1238 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> delivering 10HmaY-000000005vi-0000 (queue run pid p1234) +test.ex in ""? no (end of list) +CALLER@test.ex in senders? no (end of list) R: client (ACL) T: send_to_server (ACL) ->>>>>>>>>>>>>>>> Exim pid=p1238 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1239 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1240 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +queue_run phase 2 start queue running combined directories looking in TESTSUITE/spool//input delivering 10HmaX-000000005vi-0000 (queue run pid p1234) +test.ex in ""? no (end of list) +CALLER@test.ex in senders? no (end of list) R: client (ACL) T: send_to_server (ACL) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-OK @@ -36,17 +47,21 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected SMTP<< 250 OK SMTP(close)>> cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:351:.:250' +>>>>>>>>>>>>>>>> Exim pid=p1241 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => a@test.ex F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 OK" LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1239 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1242 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config trusted user admin user dropping to exim gid; retaining priv uid delivering 10HmaY-000000005vi-0000 (queue run pid p1234) +test.ex in ""? no (end of list) +CALLER@test.ex in senders? no (end of list) R: client (ACL) T: send_to_server (ACL) SMTP|> MAIL FROM: @@ -62,16 +77,18 @@ T: send_to_server (ACL) SMTP<< 250 OK SMTP<< 250 OK SMTP(close)>> -cmdlog: 'MAIL|:RCPT|:DATA:250:250:351:.:QUIT:250:250' +cmdlog: 'MAIL|:RCPT|:DATA:250:250:351:.:QUIT+:250:250' +>>>>>>>>>>>>>>>> Exim pid=p1244 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => b@test.ex F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* L C="250 OK" LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1240 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1243 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>> 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 @@ -81,19 +98,29 @@ LOG: queue_run MAIN queue running combined directories looking in TESTSUITE/spool//input delivering 10HmaZ-000000005vi-0000 (queue run pid p1235) +test.ex in ""? no (end of list) +CALLER@test.ex in senders? no (end of list) R: client (ACL) T: send_to_server (ACL) ->>>>>>>>>>>>>>>> Exim pid=p1241 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1245 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1246 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> delivering 10HmbA-000000005vi-0000 (queue run pid p1235) +test.ex in ""? no (end of list) +CALLER@test.ex in senders? no (end of list) R: client (ACL) T: send_to_server (ACL) ->>>>>>>>>>>>>>>> Exim pid=p1242 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1247 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1248 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +queue_run phase 2 start queue running combined directories looking in TESTSUITE/spool//input delivering 10HmaZ-000000005vi-0000 (queue run pid p1235) +test.ex in ""? no (end of list) +CALLER@test.ex in senders? no (end of list) R: client (ACL) T: send_to_server (ACL) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-OK @@ -108,41 +135,51 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected SMTP(shutdown)>> SMTP<< 250 OK SMTP(close)>> -cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:550:503:503:QUIT:250' +cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:550:503:503:QUIT+:250' +>>>>>>>>>>>>>>>> Exim pid=p1249 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN ** a@test.ex F= 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:: 550 NO Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config trusted user admin user LOG: MAIN <= <> R=10HmaZ-000000005vi-0000 U=EXIMUSER P=local S=sss ->>>>>>>>>>>>>>>> Exim pid=p1243 (bounce-message) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1250 (bounce-message) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1244 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1251 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> delivering 10HmbA-000000005vi-0000 (queue run pid p1235) +test.ex in ""? no (end of list) +CALLER@test.ex in senders? no (end of list) R: client (ACL) T: send_to_server (ACL) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... + failed: Connection refused LOG: MAIN H=127.0.0.1 [127.0.0.1] Connection refused +>>>>>>>>>>>>>>>> Exim pid=p1252 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN == b@test.ex R=client T=send_to_server defer (dd): Connection refused ->>>>>>>>>>>>>>>> Exim pid=p1245 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1253 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> 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 LOG: queue_run MAIN Start queue run: pid=p1236 -qqf delivering 10HmbA-000000005vi-0000 (queue run pid p1236) +test.ex in ""? no (end of list) +CALLER@test.ex in senders? no (end of list) R: client (ACL) T: send_to_server (ACL) ->>>>>>>>>>>>>>>> Exim pid=p1246 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1254 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1255 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> delivering 10HmbB-000000005vi-0000 (queue run pid p1236) R: bounce (ACL) LOG: MAIN @@ -151,15 +188,21 @@ LOG: MAIN CALLER@test.ex: error ignored LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1247 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1256 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> delivering 10HmbC-000000005vi-0000 (queue run pid p1236) +test.ex in ""? no (end of list) +CALLER@test.ex in senders? no (end of list) R: client (ACL) T: send_to_server (ACL) ->>>>>>>>>>>>>>>> Exim pid=p1248 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1257 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1258 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> delivering 10HmbA-000000005vi-0000 (queue run pid p1236) +test.ex in ""? no (end of list) +CALLER@test.ex in senders? no (end of list) R: client (ACL) T: send_to_server (ACL) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-OK @@ -174,24 +217,29 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected SMTP<< 250 OK SMTP(close)>> cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:250:550:503:RSET:250' +>>>>>>>>>>>>>>>> Exim pid=p1259 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN ** b@test.ex F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 550 Unknown Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config trusted user admin user LOG: MAIN <= <> R=10HmbA-000000005vi-0000 U=EXIMUSER P=local S=sss ->>>>>>>>>>>>>>>> Exim pid=p1249 (bounce-message) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1260 (bounce-message) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1250 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1261 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config trusted user admin user dropping to exim gid; retaining priv uid delivering 10HmbC-000000005vi-0000 (queue run pid p1236) +test.ex in ""? no (end of list) +CALLER@test.ex in senders? no (end of list) R: client (ACL) T: send_to_server (ACL) SMTP|> MAIL FROM: @@ -207,12 +255,13 @@ T: send_to_server (ACL) SMTP<< 250 OK SMTP<< 250 OK SMTP(close)>> -cmdlog: 'MAIL|:RCPT|:DATA:250:250:351:.:QUIT:250:250' +cmdlog: 'MAIL|:RCPT|:DATA:250:250:351:.:QUIT+:250:250' +>>>>>>>>>>>>>>>> Exim pid=p1263 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => c@test.ex F= R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* L C="250 OK" LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1251 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1262 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: queue_run MAIN End queue run: pid=p1236 -qqf >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0227 b/test/stderr/0227 index 0a4c4f1df..87667b9f1 100644 --- a/test/stderr/0227 +++ b/test/stderr/0227 @@ -1,6 +1,7 @@ LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -20,7 +21,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -40,7 +42,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -60,7 +63,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -78,7 +82,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -97,7 +102,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -115,7 +121,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S from 1.1.1.1 ... LOG: MAIN +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S from 1.1.1.1 ... +LOG: MAIN bind of [1.1.1.1]:1111 failed unable to bind outgoing SMTP call to 1.1.1.1: Netwk addr not available failed: Netwk addr not available @@ -129,7 +136,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -147,7 +155,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -166,7 +175,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -184,15 +194,18 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused -Connecting to ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4]:PORT_S ... failed: Connection refused +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... + failed: Connection refused +Connecting to ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4]:PORT_S ... + failed: Connection refused LOG: MAIN REJECT H=(test) [V4NET.0.0.3] U=root F= temporarily rejected RCPT : Could not complete recipient verify callout LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -210,7 +223,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -228,7 +242,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -253,7 +268,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -280,7 +296,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250- wotcher sverifier @@ -298,7 +315,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250- wotcher rverifier @@ -318,7 +336,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250- wotcher rverifier @@ -338,7 +357,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250- wotcher rverifier @@ -364,7 +384,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> LHLO myhost.test.ex SMTP<< 250 OK @@ -382,7 +403,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP(closed)<< SMTP(close)>> cmdlog: '(unset)' @@ -394,7 +416,8 @@ LOG: smtp_connection MAIN SMTP connection from root D=qqs closed by QUIT LOG: smtp_connection MAIN SMTP connection from root -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... + failed: Connection refused LOG: MAIN REJECT H=(test) [V4NET.0.0.1] U=root sender verify defer for : Could not complete sender verify callout: 127.0.0.1 [127.0.0.1] : Connection refused LOG: MAIN REJECT diff --git a/test/stderr/0234 b/test/stderr/0234 index 2a618bd17..211211964 100644 --- a/test/stderr/0234 +++ b/test/stderr/0234 @@ -15,9 +15,13 @@ >>> check domains = +relay_domains >>> d in "+relay_domains"? >>> list element: +relay_domains ->>> d in "@mx_any"? ->>> list element: @mx_any ->>> d in "@mx_any"? no (end of list) +>>> start sublist relay_domains +>>> d in "@mx_any"? +>>> ╎list element: @mx_any +>>> ╎check dnssec require list +>>> ╎check dnssec request list +>>> d in "@mx_any"? no (end of list) +>>> end sublist relay_domains >>> d in "+relay_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 20) @@ -30,10 +34,15 @@ LOG: H=(test) [V4NET.0.0.0] F= rejected RCPT : relay not permitted >>> check domains = +relay_domains >>> mxt1.test.ex in "+relay_domains"? >>> list element: +relay_domains ->>> mxt1.test.ex in "@mx_any"? ->>> list element: @mx_any +>>> start sublist relay_domains +>>> mxt1.test.ex in "@mx_any"? +>>> ╎list element: @mx_any +>>> ╎check dnssec require list +>>> ╎check dnssec request list >>> local host has lowest MX ->>> mxt1.test.ex in "@mx_any"? yes (matched "@mx_any") +>>> ╎mxt1.test.ex in "@mx_any"? yes (matched "@mx_any") +>>> end sublist relay_domains +>>> data from lookup saved for cache for +relay_domains: key 'mxt1.test.ex' value '@mx_any' >>> mxt1.test.ex in "+relay_domains"? yes (matched "+relay_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -42,12 +51,17 @@ LOG: H=(test) [V4NET.0.0.0] F= rejected RCPT : relay not permitted >>> check domains = +relay_domains >>> mxt6.test.ex in "+relay_domains"? >>> list element: +relay_domains ->>> mxt6.test.ex in "@mx_any"? ->>> list element: @mx_any +>>> start sublist relay_domains +>>> mxt6.test.ex in "@mx_any"? +>>> ╎list element: @mx_any +>>> ╎check dnssec require list +>>> ╎check dnssec request list >>> local host in host list - removed hosts: >>> ten-2.test.ex V4NET.0.0.2 6 >>> eximtesthost.test.ex ip4.ip4.ip4.ip4 6 ->>> mxt6.test.ex in "@mx_any"? yes (matched "@mx_any") +>>> ╎mxt6.test.ex in "@mx_any"? yes (matched "@mx_any") +>>> end sublist relay_domains +>>> data from lookup saved for cache for +relay_domains: key 'mxt6.test.ex' value '@mx_any' >>> mxt6.test.ex in "+relay_domains"? yes (matched "+relay_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT diff --git a/test/stderr/0243 b/test/stderr/0243 index 00f5d0a85..c92fc3e09 100644 --- a/test/stderr/0243 +++ b/test/stderr/0243 @@ -10,6 +10,8 @@ >>> list element: @ >>> list element: @[] >>> xxxx in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -22,16 +24,16 @@ >>> check !verify = recipient >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing faq@nl.demon.net ->>> nl.demon.net in "*.demon.net"? +>>> nl.demon.net in domains? >>> list element: *.demon.net ->>> nl.demon.net in "*.demon.net"? yes (matched "*.demon.net") +>>> nl.demon.net in domains? yes (matched "*.demon.net") >>> calling auto_antwoord router >>> routed by auto_antwoord router (unseen) >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing faq@nl.demon.net ->>> nl.demon.net in "nl.demon.net:*.nl.demon.net:fax-gw.demon.nl: www-3.demon.nl : localhost"? +>>> nl.demon.net in domains? >>> list element: nl.demon.net ->>> nl.demon.net in "nl.demon.net:*.nl.demon.net:fax-gw.demon.nl: www-3.demon.nl : localhost"? yes (matched "nl.demon.net") +>>> nl.demon.net in domains? yes (matched "nl.demon.net") >>> calling algemeen_aliases router >>> routed by algemeen_aliases router >>> ----------- end verify ------------ @@ -40,9 +42,12 @@ >>> check domains = +local_domains >>> nl.demon.net in "+local_domains"? >>> list element: +local_domains ->>> nl.demon.net in "nl.demon.net"? ->>> list element: nl.demon.net ->>> nl.demon.net in "nl.demon.net"? yes (matched "nl.demon.net") +>>> start sublist local_domains +>>> nl.demon.net in "nl.demon.net"? +>>> ╎list element: nl.demon.net +>>> ╎nl.demon.net in "nl.demon.net"? yes (matched "nl.demon.net") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'nl.demon.net' value 'nl.demon.net' >>> nl.demon.net in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT diff --git a/test/stderr/0249 b/test/stderr/0249 index b3281d30c..879ba7eeb 100644 --- a/test/stderr/0249 +++ b/test/stderr/0249 @@ -1,20 +1,98 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config admin user +c.domain in "a.domain"? no (end of list) +User@c.domain in "*@a.domain"? no (end of list) LOG: address_rewrite MAIN "User@c.domain" from sender: rewritten as "User@d.domain" by rule 2 +c.domain in "a.domain"? no (end of list) +User@c.domain in "*@a.domain"? no (end of list) LOG: address_rewrite MAIN "User@c.domain" from from: rewritten as "User@d.domain" by rule 2 +c.domain in "a.domain"? no (end of list) +User@c.domain in "*@a.domain"? no (end of list) LOG: address_rewrite MAIN "User@c.domain" from to: rewritten as "User@d.domain" by rule 2 +c.domain in "a.domain"? no (end of list) +User@c.domain in "*@a.domain"? no (end of list) LOG: address_rewrite MAIN "User@c.domain" from cc: rewritten as "User@d.domain" by rule 2 +c.domain in "a.domain"? no (end of list) +User@c.domain in "*@a.domain"? no (end of list) LOG: address_rewrite MAIN "User@c.domain" from bcc: rewritten as "User@d.domain" by rule 2 +c.domain in "a.domain"? no (end of list) +User@c.domain in "*@a.domain"? no (end of list) LOG: address_rewrite MAIN "User@c.domain" from reply-to: rewritten as "User@d.domain" by rule 2 +c.domain in "a.domain"? no (end of list) +User@c.domain in "*@a.domain"? no (end of list) LOG: address_rewrite MAIN "User@c.domain" from env-from rewritten as "User@d.domain" by rule 2 +c.domain in "a.domain"? no (end of list) +User@c.domain in "*@a.domain"? no (end of list) LOG: address_rewrite MAIN "User@c.domain" from env-to rewritten as "User@d.domain" by rule 2 +User@d.domain in "a@b"? no (end of list) >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> +>>> host in hosts_connection_nolog? no (option unset) +>>> host in host_lookup? no (option unset) +>>> host in host_reject_connection? no (option unset) +>>> host in sender_unqualified_hosts? no (option unset) +>>> host in recipient_unqualified_hosts? no (option unset) +>>> host in helo_verify_hosts? no (option unset) +>>> host in helo_try_verify_hosts? no (option unset) +>>> host in helo_accept_junk_hosts? no (option unset) +>>> tester in helo_lookup_domains? +>>> list element: @ +>>> list element: @[] +>>> tester in helo_lookup_domains? no (end of list) +>>> processing "accept" (TESTSUITE/test-config 20) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> host in ignore_fromline_hosts? no (option unset) +>>> a@text.ex in "*@a.domain"? +>>> list element: *@a.domain +>>> text.ex in "a.domain"? +>>> list element: a.domain +>>> text.ex in "a.domain"? no (end of list) +>>> a@text.ex in "*@a.domain"? no (end of list) +>>> a@text.ex in "*@c.domain"? +>>> list element: *@c.domain +>>> text.ex in "c.domain"? +>>> list element: c.domain +>>> text.ex in "c.domain"? no (end of list) +>>> a@text.ex in "*@c.domain"? no (end of list) +>>> a@text.ex in "a@b"? +>>> list element: a@b +>>> text.ex in "b"? +>>> list element: b +>>> text.ex in "b"? no (end of list) +>>> a@text.ex in "a@b"? no (end of list) +>>> a@b in "*@a.domain"? +>>> list element: *@a.domain +>>> b in "a.domain"? +>>> list element: a.domain +>>> b in "a.domain"? no (end of list) +>>> a@b in "*@a.domain"? no (end of list) +>>> a@b in "*@c.domain"? +>>> list element: *@c.domain +>>> b in "c.domain"? +>>> list element: c.domain +>>> b in "c.domain"? no (end of list) +>>> a@b in "*@c.domain"? no (end of list) +>>> someone@some.domain in "*@a.domain"? +>>> list element: *@a.domain +>>> some.domain in "a.domain"? +>>> list element: a.domain +>>> some.domain in "a.domain"? no (end of list) +>>> someone@some.domain in "*@a.domain"? no (end of list) +>>> someone@some.domain in "*@c.domain"? +>>> list element: *@c.domain +>>> some.domain in "c.domain"? +>>> list element: c.domain +>>> some.domain in "c.domain"? no (end of list) +>>> someone@some.domain in "*@c.domain"? no (end of list) +LOG: 10HmaX-000000005vi-0000 qualify/rewrite: malformed address: @c may not follow a@b +LOG: 10HmaX-000000005vi-0000 <= a@b H=(tester) [127.0.0.1] P=smtp S=sss diff --git a/test/stderr/0251 b/test/stderr/0251 index 558b3675e..816d4dd1a 100644 --- a/test/stderr/0251 +++ b/test/stderr/0251 @@ -16,31 +16,31 @@ >>> check !verify = recipient >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing oklist@listr.test.ex ->>> listr.test.ex in "listr.test.ex"? +>>> listr.test.ex in domains? >>> list element: listr.test.ex ->>> listr.test.ex in "listr.test.ex"? yes (matched "listr.test.ex") ->>> ok@sender in "TESTSUITE/aux-fixed/0251.restrict.oklist"? +>>> listr.test.ex in domains? yes (matched "listr.test.ex") +>>> ok@sender in senders? >>> list element: TESTSUITE/aux-fixed/0251.restrict.oklist >>> sender in "sender"? >>> list element: sender >>> sender in "sender"? yes (matched "sender") ->>> ok@sender in "TESTSUITE/aux-fixed/0251.restrict.oklist"? yes (matched "ok@sender" in TESTSUITE/aux-fixed/0251.restrict.oklist) +>>> ok@sender in senders? yes (matched "ok@sender" in TESTSUITE/aux-fixed/0251.restrict.oklist) >>> calling exeter_listr router >>> routed by exeter_listr router >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing xxx@listr.test.ex ->>> listr.test.ex in "listr.test.ex"? +>>> listr.test.ex in domains? >>> list element: listr.test.ex ->>> listr.test.ex in "listr.test.ex"? yes (matched "listr.test.ex") ->>> ok@sender in "zzzz"? +>>> listr.test.ex in domains? yes (matched "listr.test.ex") +>>> ok@sender in senders? >>> list element: zzzz >>> sender in "zzzz"? >>> list element: zzzz >>> sender in "zzzz"? no (end of list) ->>> ok@sender in "zzzz"? no (end of list) ->>> listr.test.ex in "listr.test.ex"? +>>> ok@sender in senders? no (end of list) +>>> listr.test.ex in domains? >>> list element: listr.test.ex ->>> listr.test.ex in "listr.test.ex"? yes (matched "listr.test.ex") +>>> listr.test.ex in domains? yes (matched "listr.test.ex") >>> calling exeter_listf router >>> routed by exeter_listf router >>> ----------- end verify ------------ @@ -49,10 +49,13 @@ >>> check domains = +local_domains >>> listr.test.ex in "+local_domains"? >>> list element: +local_domains ->>> listr.test.ex in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> list element: *.test.ex ->>> listr.test.ex in "test.ex : *.test.ex"? yes (matched "*.test.ex") +>>> start sublist local_domains +>>> listr.test.ex in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎list element: *.test.ex +>>> ╎listr.test.ex in "test.ex : *.test.ex"? yes (matched "*.test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'listr.test.ex' value '*.test.ex' >>> listr.test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -62,15 +65,15 @@ >>> check !verify = recipient >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing oklist@listr.test.ex ->>> listr.test.ex in "listr.test.ex"? +>>> listr.test.ex in domains? >>> list element: listr.test.ex ->>> listr.test.ex in "listr.test.ex"? yes (matched "listr.test.ex") ->>> bad@sender in "TESTSUITE/aux-fixed/0251.restrict.oklist"? +>>> listr.test.ex in domains? yes (matched "listr.test.ex") +>>> bad@sender in senders? >>> list element: TESTSUITE/aux-fixed/0251.restrict.oklist ->>> bad@sender in "TESTSUITE/aux-fixed/0251.restrict.oklist"? no (end of list) ->>> listr.test.ex in "listr.test.ex"? +>>> bad@sender in senders? no (end of list) +>>> listr.test.ex in domains? >>> list element: listr.test.ex ->>> listr.test.ex in "listr.test.ex"? yes (matched "listr.test.ex") +>>> listr.test.ex in domains? yes (matched "listr.test.ex") >>> calling exeter_listf router >>> routed by exeter_listf router >>> ----------- end verify ------------ @@ -79,10 +82,13 @@ >>> check domains = +local_domains >>> listr.test.ex in "+local_domains"? >>> list element: +local_domains ->>> listr.test.ex in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> list element: *.test.ex ->>> listr.test.ex in "test.ex : *.test.ex"? yes (matched "*.test.ex") +>>> start sublist local_domains +>>> listr.test.ex in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎list element: *.test.ex +>>> ╎listr.test.ex in "test.ex : *.test.ex"? yes (matched "*.test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'listr.test.ex' value '*.test.ex' >>> listr.test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT diff --git a/test/stderr/0264 b/test/stderr/0264 index 8a7b911e2..e2876c3eb 100644 --- a/test/stderr/0264 +++ b/test/stderr/0264 @@ -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 @@ -25,7 +27,6 @@ body_linecount=0 message_linecount=8 DSN: set orcpt: flags: 0x0 Delivery address list: rz.b@outside -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: rz.b@outside unique = rz.b@outside @@ -37,22 +38,27 @@ routing rz.b@outside --------> r1 router <-------- local_part=rz.b domain=outside checking domains +outside in domains? no (end of list) r1 router skipped: domains mismatch --------> r2 router <-------- local_part=rz.b domain=outside checking domains +outside in domains? no (end of list) r2 router skipped: domains mismatch --------> r3 router <-------- local_part=rz.b domain=outside checking local_parts +rz.b in local_parts? no (end of list) r3 router skipped: local_parts mismatch --------> r4 router <-------- local_part=rz.b domain=outside checking local_parts +rz.b in local_parts? no (end of list) r4 router skipped: local_parts mismatch --------> r5 router <-------- local_part=rz.b domain=outside checking local_parts +rz.b in local_parts? no (end of list) r5 router skipped: local_parts mismatch --------> r_remain router <-------- local_part=rz.b domain=outside @@ -77,16 +83,19 @@ After routing: rz.b@outside >>>>>>>>>>>>>>>> deliveries are done >>>>>>>>>>>>>>>> Processing retry items -Succeeded addresses: -Failed addresses: -Deferred addresses: - rz.b@outside -locking TESTSUITE/spool/db/retry.lockfile -retry for R:outside = * 0 0 -failing_interval=ttt message_age=ttt -Writing retry data for R:outside - first failed=dddd last try=dddd next try=+300 expired=0 - errno=-1 more_errno=dd not just now + Succeeded addresses: + Failed addresses: + Deferred addresses: + rz.b@outside + *@outside in "^\*@r5domain.ex"? no (end of list) + *@outside in "userx@test.ex"? no (end of list) + outside in "test.ex"? no (end of list) + *@outside in "test.ex"? no (end of list) + retry for R:outside = * 0 0 + failing_interval=ttt message_age=ttt + Writing retry data for R:outside + first failed=dddd last try=dddd next try=+300 expired=0 + errno=-1 more_errno=dd not just now end of retry processing time on queue = 0s id 10HmbJ-000000005vi-0000 addr rz.b@outside warning counts: required 0 done 0 diff --git a/test/stderr/0275 b/test/stderr/0275 index f59b6aac8..8015006e0 100644 --- a/test/stderr/0275 +++ b/test/stderr/0275 @@ -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 @@ -17,7 +18,7 @@ test.ex in percent_hack_domains? list element: +hold_domains start sublist hold_domains test.ex in "! *.ex"? - ╎list element: ! *.ex + ╎list element: !░*.ex ╎test.ex in "! *.ex"? no (matched "! *.ex") end sublist hold_domains list element: +not_queue_domains @@ -32,31 +33,31 @@ routing userx@test.ex --------> r00 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "+nocache"? +test.ex in domains? list element: +nocache start sublist nocache test.ex in "userx"? ╎list element: userx test.ex in "userx"? no (end of list) end sublist nocache -test.ex in "+nocache"? no (end of list) +test.ex in domains? no (end of list) r00 router skipped: domains mismatch --------> r01 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "+nocache"? +test.ex in domains? list element: +nocache start sublist nocache test.ex in "userx"? ╎list element: userx test.ex in "userx"? no (end of list) end sublist nocache -test.ex in "+nocache"? no (end of list) +test.ex in domains? no (end of list) r01 router skipped: domains mismatch --------> r02 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "+nocache2"? +test.ex in domains? list element: +nocache2 start sublist nocache2 test.ex in "+nocache"? @@ -68,12 +69,12 @@ test.ex in "+nocache2"? ╎ end sublist nocache test.ex in "+nocache"? no (end of list) end sublist nocache2 -test.ex in "+nocache2"? no (end of list) +test.ex in domains? no (end of list) r02 router skipped: domains mismatch --------> r03 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "+nocache2"? +test.ex in domains? list element: +nocache2 start sublist nocache2 test.ex in "+nocache"? @@ -85,34 +86,34 @@ test.ex in "+nocache2"? ╎ end sublist nocache test.ex in "+nocache"? no (end of list) end sublist nocache2 -test.ex in "+nocache2"? no (end of list) +test.ex in domains? no (end of list) r03 router skipped: domains mismatch --------> r04 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "+forcecache"? +test.ex in domains? list element: +forcecache start sublist forcecache test.ex in "userx"? ╎list element: userx test.ex in "userx"? no (end of list) end sublist forcecache -test.ex in "+forcecache"? no (end of list) +test.ex in domains? no (end of list) r04 router skipped: domains mismatch --------> r05 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "+forcecache"? +test.ex in domains? list element: +forcecache start sublist forcecache cached no match for +forcecache cached lookup data = NULL -test.ex in "+forcecache"? no (end of list) +test.ex in domains? no (end of list) r05 router skipped: domains mismatch --------> r1 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "+never_domains : +n1_domains : ! +local_domains"? +test.ex in domains? list element: +never_domains start sublist never_domains test.ex in "never.ex"? @@ -125,19 +126,19 @@ test.ex in "+never_domains : +n1_domains : ! +local_domains"? ╎list element: never1.ex test.ex in "never1.ex"? no (end of list) end sublist n1_domains - list element: ! +local_domains + list element: !░+local_domains start sublist local_domains test.ex in "test.ex"? ╎list element: test.ex ╎test.ex in "test.ex"? yes (matched "test.ex") end sublist local_domains data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' - test.ex in "+never_domains : +n1_domains : ! +local_domains"? no (matched "! +local_domains") + test.ex in domains? no (matched "! +local_domains") r1 router skipped: domains mismatch --------> r2 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "+never_domains : +n2_domains : !+local_domains"? +test.ex in domains? list element: +never_domains start sublist never_domains cached no match for +never_domains @@ -156,21 +157,21 @@ test.ex in "+never_domains : +n2_domains : !+local_domains"? start sublist local_domains cached yes match for +local_domains cached lookup data = test.ex - test.ex in "+never_domains : +n2_domains : !+local_domains"? no (matched "!+local_domains" - cached) + test.ex in domains? no (matched "!+local_domains" - cached) r2 router skipped: domains mismatch --------> r3 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "+local_domains"? +test.ex in domains? list element: +local_domains start sublist local_domains cached yes match for +local_domains cached lookup data = test.ex - test.ex in "+local_domains"? yes (matched "+local_domains" - cached) + test.ex in domains? yes (matched "+local_domains" - cached) checking local_parts -userx in "userx"? +userx in local_parts? list element: userx - userx in "userx"? yes (matched "userx") + userx in local_parts? yes (matched "userx") calling r3 router r3 router called for userx@test.ex domain = test.ex @@ -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 @@ -205,15 +207,15 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=F: From: CALLER_NAME search_tidyup called >>Headers after rewriting and local additions: -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaX-000000005vi-0000-D Data file written for message 10HmaX-000000005vi-0000 @@ -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 @@ -256,8 +259,6 @@ body_linecount=0 message_linecount=8 DSN: set orcpt: flags: 0x0 Delivery address list: userx@test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -268,7 +269,7 @@ test.ex in percent_hack_domains? list element: +hold_domains start sublist hold_domains test.ex in "! *.ex"? - ╎list element: ! *.ex + ╎list element: !░*.ex ╎test.ex in "! *.ex"? no (matched "! *.ex") end sublist hold_domains list element: +not_queue_domains @@ -297,31 +298,31 @@ routing userx@test.ex --------> r00 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "+nocache"? +test.ex in domains? list element: +nocache start sublist nocache test.ex in "userx"? ╎list element: userx test.ex in "userx"? no (end of list) end sublist nocache -test.ex in "+nocache"? no (end of list) +test.ex in domains? no (end of list) r00 router skipped: domains mismatch --------> r01 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "+nocache"? +test.ex in domains? list element: +nocache start sublist nocache test.ex in "userx"? ╎list element: userx test.ex in "userx"? no (end of list) end sublist nocache -test.ex in "+nocache"? no (end of list) +test.ex in domains? no (end of list) r01 router skipped: domains mismatch --------> r02 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "+nocache2"? +test.ex in domains? list element: +nocache2 start sublist nocache2 test.ex in "+nocache"? @@ -333,12 +334,12 @@ test.ex in "+nocache2"? ╎ end sublist nocache test.ex in "+nocache"? no (end of list) end sublist nocache2 -test.ex in "+nocache2"? no (end of list) +test.ex in domains? no (end of list) r02 router skipped: domains mismatch --------> r03 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "+nocache2"? +test.ex in domains? list element: +nocache2 start sublist nocache2 test.ex in "+nocache"? @@ -350,34 +351,34 @@ test.ex in "+nocache2"? ╎ end sublist nocache test.ex in "+nocache"? no (end of list) end sublist nocache2 -test.ex in "+nocache2"? no (end of list) +test.ex in domains? no (end of list) r03 router skipped: domains mismatch --------> r04 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "+forcecache"? +test.ex in domains? list element: +forcecache start sublist forcecache test.ex in "userx"? ╎list element: userx test.ex in "userx"? no (end of list) end sublist forcecache -test.ex in "+forcecache"? no (end of list) +test.ex in domains? no (end of list) r04 router skipped: domains mismatch --------> r05 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "+forcecache"? +test.ex in domains? list element: +forcecache start sublist forcecache cached no match for +forcecache cached lookup data = NULL -test.ex in "+forcecache"? no (end of list) +test.ex in domains? no (end of list) r05 router skipped: domains mismatch --------> r1 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "+never_domains : +n1_domains : ! +local_domains"? +test.ex in domains? list element: +never_domains start sublist never_domains test.ex in "never.ex"? @@ -390,19 +391,19 @@ test.ex in "+never_domains : +n1_domains : ! +local_domains"? ╎list element: never1.ex test.ex in "never1.ex"? no (end of list) end sublist n1_domains - list element: ! +local_domains + list element: !░+local_domains start sublist local_domains test.ex in "test.ex"? ╎list element: test.ex ╎test.ex in "test.ex"? yes (matched "test.ex") end sublist local_domains data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' - test.ex in "+never_domains : +n1_domains : ! +local_domains"? no (matched "! +local_domains") + test.ex in domains? no (matched "! +local_domains") r1 router skipped: domains mismatch --------> r2 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "+never_domains : +n2_domains : !+local_domains"? +test.ex in domains? list element: +never_domains start sublist never_domains cached no match for +never_domains @@ -421,21 +422,21 @@ test.ex in "+never_domains : +n2_domains : !+local_domains"? start sublist local_domains cached yes match for +local_domains cached lookup data = test.ex - test.ex in "+never_domains : +n2_domains : !+local_domains"? no (matched "!+local_domains" - cached) + test.ex in domains? no (matched "!+local_domains" - cached) r2 router skipped: domains mismatch --------> r3 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "+local_domains"? +test.ex in domains? list element: +local_domains start sublist local_domains cached yes match for +local_domains cached lookup data = test.ex - test.ex in "+local_domains"? yes (matched "+local_domains" - cached) + test.ex in domains? yes (matched "+local_domains" - cached) checking local_parts -userx in "userx"? +userx in local_parts? list element: userx - userx in "userx"? yes (matched "userx") + userx in local_parts? yes (matched "userx") calling r3 router r3 router called for userx@test.ex domain = test.ex @@ -457,8 +458,6 @@ After routing: search_tidyup called >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> userx@test.ex <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -476,6 +475,7 @@ appendfile: mode=600 notify_comsat=0 quota=0 warning=0 maildir_use_size_file=no locking by lockfile fcntl search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1237 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling userx@test.ex t1 transport returned OK for userx@test.ex post-process userx@test.ex (0) @@ -487,10 +487,10 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1236 set_process_info: pppp tidying up after delivering 10HmaX-000000005vi-0000 Processing retry items -Succeeded addresses: - userx@test.ex: no retry items -Failed addresses: -Deferred addresses: + Succeeded addresses: + userx@test.ex: no retry items + Failed addresses: + Deferred addresses: end of retry processing DSN: processing router : r3 DSN: processing successful delivery address: userx@test.ex @@ -509,6 +509,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 @@ -552,7 +553,7 @@ test.ex in percent_hack_domains? list element: +hold_domains start sublist hold_domains test.ex in "! *.ex"? - ╎list element: ! *.ex + ╎list element: !░*.ex ╎test.ex in "! *.ex"? no (matched "! *.ex") end sublist hold_domains list element: +not_queue_domains @@ -581,12 +582,12 @@ routing error@test.ex --------> r0f router <-------- local_part=error domain=test.ex checking domains -test.ex in "+no_such_list"? +test.ex in domains? list element: +no_such_list start sublist no_such_list LOG: MAIN PANIC unknown named domain list "+no_such_list" - test.ex in "+no_such_list"? list match deferred for +no_such_list + test.ex in domains? list match deferred for +no_such_list domains check lookup or other defer ----------- end verify ------------ accept: condition test deferred in inline ACL diff --git a/test/stderr/0276 b/test/stderr/0276 index 4e98a6c84..d19af1f2f 100644 --- a/test/stderr/0276 +++ b/test/stderr/0276 @@ -1,7 +1,8 @@ LOG: MAIN <= CALLER@test.ex U=CALLER P=local S=sss delivering 10HmaX-000000005vi-0000 -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-server id @@ -17,13 +18,14 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected SMTP(shutdown)>> SMTP<< 200 OK SMTP(close)>> -cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:500:QUIT:200' +cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:500:QUIT+:200' 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 pipelined DATA: 500 NO LOG: MAIN <= <> R=10HmaX-000000005vi-0000 U=EXIMUSER P=local S=sss delivering 10HmaY-000000005vi-0000 -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... + failed: Connection refused LOG: MAIN H=127.0.0.1 [127.0.0.1] Connection refused LOG: MAIN @@ -39,7 +41,8 @@ LOG: MAIN LOG: MAIN <= CALLER@test.ex U=CALLER P=local S=sss delivering 10HmaZ-000000005vi-0000 -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-server id @@ -54,13 +57,14 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected SMTP(shutdown)>> SMTP<< 200 OK SMTP(close)>> -cmdlog: '220:EHLO:250-:MAIL:250:RCPT:250:DATA:500:QUIT:200' +cmdlog: '220:EHLO:250-:MAIL:250:RCPT:250:DATA:500:QUIT+:200' LOG: MAIN ** usery@test.ex R=r1 T=t1 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after DATA: 500 NO LOG: MAIN <= <> R=10HmaZ-000000005vi-0000 U=EXIMUSER P=local S=sss delivering 10HmbA-000000005vi-0000 -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... + failed: Connection refused LOG: MAIN H=127.0.0.1 [127.0.0.1] Connection refused LOG: MAIN diff --git a/test/stderr/0277 b/test/stderr/0277 index 12c462e56..b92d4d832 100644 --- a/test/stderr/0277 +++ b/test/stderr/0277 @@ -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 @@ -21,12 +22,12 @@ host in host_lookup? end sublist lookup_hosts host in host_lookup? yes (matched "+lookup_hosts") looking up host name for V4NET.2.3.4 -DNS lookup of 4.3.2.V4NET.in-addr.arpa (PTR) using fakens -DNS lookup of 4.3.2.V4NET.in-addr.arpa (PTR) gave HOST_NOT_FOUND -returning DNS_NOMATCH -DNS: couldn't fake dnsa len -DNS: no SOA record found for neg-TTL - writing neg-cache entry for 4.3.2.V4NET.in-addr.arpa-PTR-xxxx, ttl -1 + DNS lookup of 4.3.2.V4NET.in-addr.arpa (PTR) using fakens + DNS lookup of 4.3.2.V4NET.in-addr.arpa (PTR) gave HOST_NOT_FOUND + returning DNS_NOMATCH + DNS: couldn't fake dnsa len + DNS: no SOA record found for neg-TTL + writing neg-cache entry for 4.3.2.V4NET.in-addr.arpa-PTR-xxxx, ttl -1 LOG: host_lookup_failed MAIN no host name found for IP address V4NET.2.3.4 sender_fullhost = [V4NET.2.3.4] @@ -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 @@ -138,12 +141,12 @@ host in host_lookup? end sublist never_hosts host in host_lookup? yes (end of list) looking up host name for V4NET.10.11.12 -DNS lookup of 12.11.10.V4NET.in-addr.arpa (PTR) using fakens -DNS lookup of 12.11.10.V4NET.in-addr.arpa (PTR) gave HOST_NOT_FOUND -returning DNS_NOMATCH -DNS: couldn't fake dnsa len -DNS: no SOA record found for neg-TTL - writing neg-cache entry for 12.11.10.V4NET.in-addr.arpa-PTR-xxxx, ttl -1 + DNS lookup of 12.11.10.V4NET.in-addr.arpa (PTR) using fakens + DNS lookup of 12.11.10.V4NET.in-addr.arpa (PTR) gave HOST_NOT_FOUND + returning DNS_NOMATCH + DNS: couldn't fake dnsa len + DNS: no SOA record found for neg-TTL + writing neg-cache entry for 12.11.10.V4NET.in-addr.arpa-PTR-xxxx, ttl -1 LOG: host_lookup_failed MAIN no host name found for IP address V4NET.10.11.12 sender_fullhost = [V4NET.10.11.12] @@ -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 @@ -208,12 +212,12 @@ host in host_lookup? end sublist never_hosts host in host_lookup? yes (end of list) looking up host name for V4NET.1.1.1 -DNS lookup of 1.1.1.V4NET.in-addr.arpa (PTR) using fakens -DNS lookup of 1.1.1.V4NET.in-addr.arpa (PTR) gave HOST_NOT_FOUND -returning DNS_NOMATCH -DNS: couldn't fake dnsa len -DNS: no SOA record found for neg-TTL - writing neg-cache entry for 1.1.1.V4NET.in-addr.arpa-PTR-xxxx, ttl -1 + DNS lookup of 1.1.1.V4NET.in-addr.arpa (PTR) using fakens + DNS lookup of 1.1.1.V4NET.in-addr.arpa (PTR) gave HOST_NOT_FOUND + returning DNS_NOMATCH + DNS: couldn't fake dnsa len + DNS: no SOA record found for neg-TTL + writing neg-cache entry for 1.1.1.V4NET.in-addr.arpa-PTR-xxxx, ttl -1 LOG: host_lookup_failed MAIN no host name found for IP address V4NET.1.1.1 sender_fullhost = [V4NET.1.1.1] @@ -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 @@ -278,12 +283,12 @@ host in host_lookup? end sublist never_hosts host in host_lookup? yes (end of list) looking up host name for V4NET.2.2.2 -DNS lookup of 2.2.2.V4NET.in-addr.arpa (PTR) using fakens -DNS lookup of 2.2.2.V4NET.in-addr.arpa (PTR) gave HOST_NOT_FOUND -returning DNS_NOMATCH -DNS: couldn't fake dnsa len -DNS: no SOA record found for neg-TTL - writing neg-cache entry for 2.2.2.V4NET.in-addr.arpa-PTR-xxxx, ttl -1 + DNS lookup of 2.2.2.V4NET.in-addr.arpa (PTR) using fakens + DNS lookup of 2.2.2.V4NET.in-addr.arpa (PTR) gave HOST_NOT_FOUND + returning DNS_NOMATCH + DNS: couldn't fake dnsa len + DNS: no SOA record found for neg-TTL + writing neg-cache entry for 2.2.2.V4NET.in-addr.arpa-PTR-xxxx, ttl -1 LOG: host_lookup_failed MAIN no host name found for IP address V4NET.2.2.2 sender_fullhost = [V4NET.2.2.2] diff --git a/test/stderr/0278 b/test/stderr/0278 index c5b926186..e0a55a4d8 100644 --- a/test/stderr/0278 +++ b/test/stderr/0278 @@ -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 @@ -18,7 +19,7 @@ routing CALLER@test.ex --------> r1 router <-------- local_part=CALLER domain=test.ex checking local_parts -CALLER in "+never_localparts : +n1_localparts : ! +local_localparts"? +CALLER in local_parts? list element: +never_localparts start sublist never_localparts CALLER in "never"? @@ -31,19 +32,19 @@ CALLER in "+never_localparts : +n1_localparts : ! +local_localparts"? ╎list element: never1 CALLER in "never1"? no (end of list) end sublist n1_localparts - list element: ! +local_localparts + list element: !░+local_localparts start sublist local_localparts CALLER in "CALLER"? ╎list element: CALLER ╎CALLER in "CALLER"? yes (matched "CALLER") end sublist local_localparts data from lookup saved for cache for +local_localparts: key 'CALLER' value 'CALLER' - CALLER in "+never_localparts : +n1_localparts : ! +local_localparts"? no (matched "! +local_localparts") + CALLER in local_parts? no (matched "! +local_localparts") r1 router skipped: local_parts mismatch --------> r2 router <-------- local_part=CALLER domain=test.ex checking local_parts -CALLER in "+never_localparts : +n2_localparts : !+local_localparts"? +CALLER in local_parts? list element: +never_localparts start sublist never_localparts cached no match for +never_localparts @@ -62,17 +63,17 @@ CALLER in "+never_localparts : +n2_localparts : !+local_localparts"? start sublist local_localparts cached yes match for +local_localparts cached lookup data = CALLER - CALLER in "+never_localparts : +n2_localparts : !+local_localparts"? no (matched "!+local_localparts" - cached) + CALLER in local_parts? no (matched "!+local_localparts" - cached) r2 router skipped: local_parts mismatch --------> r3 router <-------- local_part=CALLER domain=test.ex checking local_parts -CALLER in "+local_localparts"? +CALLER in local_parts? list element: +local_localparts start sublist local_localparts cached yes match for +local_localparts cached lookup data = CALLER - CALLER in "+local_localparts"? yes (matched "+local_localparts" - cached) + CALLER in local_parts? yes (matched "+local_localparts" - cached) checking for local user seeking password data for user "CALLER": using cached result getpwnam() succeeded uid=CALLER_UID gid=CALLER_GID @@ -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 @@ -110,15 +112,15 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=F: From: CALLER_NAME search_tidyup called >>Headers after rewriting and local additions: -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaX-000000005vi-0000-D Data file written for message 10HmaX-000000005vi-0000 @@ -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 @@ -161,8 +164,6 @@ body_linecount=0 message_linecount=8 DSN: set orcpt: flags: 0x0 Delivery address list: CALLER@test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -178,7 +179,7 @@ routing CALLER@test.ex --------> r1 router <-------- local_part=CALLER domain=test.ex checking local_parts -CALLER in "+never_localparts : +n1_localparts : ! +local_localparts"? +CALLER in local_parts? list element: +never_localparts start sublist never_localparts CALLER in "never"? @@ -191,19 +192,19 @@ CALLER in "+never_localparts : +n1_localparts : ! +local_localparts"? ╎list element: never1 CALLER in "never1"? no (end of list) end sublist n1_localparts - list element: ! +local_localparts + list element: !░+local_localparts start sublist local_localparts CALLER in "CALLER"? ╎list element: CALLER ╎CALLER in "CALLER"? yes (matched "CALLER") end sublist local_localparts data from lookup saved for cache for +local_localparts: key 'CALLER' value 'CALLER' - CALLER in "+never_localparts : +n1_localparts : ! +local_localparts"? no (matched "! +local_localparts") + CALLER in local_parts? no (matched "! +local_localparts") r1 router skipped: local_parts mismatch --------> r2 router <-------- local_part=CALLER domain=test.ex checking local_parts -CALLER in "+never_localparts : +n2_localparts : !+local_localparts"? +CALLER in local_parts? list element: +never_localparts start sublist never_localparts cached no match for +never_localparts @@ -222,17 +223,17 @@ CALLER in "+never_localparts : +n2_localparts : !+local_localparts"? start sublist local_localparts cached yes match for +local_localparts cached lookup data = CALLER - CALLER in "+never_localparts : +n2_localparts : !+local_localparts"? no (matched "!+local_localparts" - cached) + CALLER in local_parts? no (matched "!+local_localparts" - cached) r2 router skipped: local_parts mismatch --------> r3 router <-------- local_part=CALLER domain=test.ex checking local_parts -CALLER in "+local_localparts"? +CALLER in local_parts? list element: +local_localparts start sublist local_localparts cached yes match for +local_localparts cached lookup data = CALLER - CALLER in "+local_localparts"? yes (matched "+local_localparts" - cached) + CALLER in local_parts? yes (matched "+local_localparts" - cached) checking for local user seeking password data for user "CALLER": using cached result getpwnam() succeeded uid=CALLER_UID gid=CALLER_GID @@ -257,8 +258,6 @@ After routing: search_tidyup called >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> CALLER@test.ex <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -276,6 +275,7 @@ appendfile: mode=600 notify_comsat=0 quota=0 warning=0 maildir_use_size_file=no locking by lockfile fcntl search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1237 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling CALLER@test.ex t1 transport returned OK for CALLER@test.ex post-process CALLER@test.ex (0) @@ -287,10 +287,10 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1236 set_process_info: pppp tidying up after delivering 10HmaX-000000005vi-0000 Processing retry items -Succeeded addresses: - CALLER@test.ex: no retry items -Failed addresses: -Deferred addresses: + Succeeded addresses: + CALLER@test.ex: no retry items + Failed addresses: + Deferred addresses: end of retry processing DSN: processing router : r3 DSN: processing successful delivery address: CALLER@test.ex @@ -309,6 +309,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 @@ -328,7 +329,7 @@ routing unknown@test.ex --------> r1 router <-------- local_part=unknown domain=test.ex checking local_parts -unknown in "+never_localparts : +n1_localparts : ! +local_localparts"? +unknown in local_parts? list element: +never_localparts start sublist never_localparts unknown in "never"? @@ -341,13 +342,13 @@ unknown in "+never_localparts : +n1_localparts : ! +local_localparts"? ╎list element: never1 unknown in "never1"? no (end of list) end sublist n1_localparts - list element: ! +local_localparts + list element: !░+local_localparts start sublist local_localparts unknown in "CALLER"? ╎list element: CALLER unknown in "CALLER"? no (end of list) end sublist local_localparts -unknown in "+never_localparts : +n1_localparts : ! +local_localparts"? yes (end of list) +unknown in local_parts? yes (end of list) calling r1 router r1 router called for unknown@test.ex domain = test.ex @@ -359,7 +360,7 @@ r1 router declined for unknown@test.ex --------> r2 router <-------- local_part=unknown domain=test.ex checking local_parts -unknown in "+never_localparts : +n2_localparts : !+local_localparts"? +unknown in local_parts? list element: +never_localparts start sublist never_localparts cached no match for +never_localparts @@ -378,39 +379,43 @@ unknown in "+never_localparts : +n2_localparts : !+local_localparts"? start sublist local_localparts cached no match for +local_localparts cached lookup data = NULL -unknown in "+never_localparts : +n2_localparts : !+local_localparts"? yes (end of list) +unknown in local_parts? yes (end of list) calling r2 router r2 router called for unknown@test.ex domain = test.ex -test.ex in "*"? - list element: * - test.ex in "*"? yes (matched "*") -DNS lookup of test.ex (MX) using fakens -DNS lookup of test.ex (MX) gave NO_DATA -returning DNS_NODATA -faking res_search(MX) response length as 65535 - writing neg-cache entry for test.ex-MX-xxxx, ttl 3000 -test.ex (MX resp) DNSSEC -DNS lookup of test.ex (A) using fakens -DNS lookup of test.ex (A) gave NO_DATA -returning DNS_NODATA -faking res_search(A) response length as 65535 - writing neg-cache entry for test.ex-A-xxxx, ttl 3000 +main lookup for domain + check dnssec require list + test.ex in dnssec_require_domains? no (option unset) + check dnssec request list + test.ex in dnssec_request_domains? + list element: * + test.ex in dnssec_request_domains? yes (matched "*") + DNS lookup of test.ex (MX) using fakens + DNS lookup of test.ex (MX) gave NO_DATA + returning DNS_NODATA + faking res_search(MX) response length as 65535 + writing neg-cache entry for test.ex-MX-xxxx, ttl 3000 + test.ex (MX resp) DNSSEC + DNS lookup of test.ex (A) using fakens + DNS lookup of test.ex (A) gave NO_DATA + returning DNS_NODATA + faking res_search(A) response length as 65535 + writing neg-cache entry for test.ex-A-xxxx, ttl 3000 r2 router declined for unknown@test.ex --------> r3 router <-------- local_part=unknown domain=test.ex checking local_parts -unknown in "+local_localparts"? +unknown in local_parts? list element: +local_localparts start sublist local_localparts cached no match for +local_localparts cached lookup data = NULL -unknown in "+local_localparts"? no (end of list) +unknown in local_parts? no (end of list) r3 router skipped: local_parts mismatch --------> r4 router <-------- local_part=unknown domain=test.ex checking local_parts -unknown in "+local_localparts : +expanded : +unexpanded"? +unknown in local_parts? list element: +local_localparts start sublist local_localparts cached no match for +local_localparts @@ -427,12 +432,12 @@ unknown in "+local_localparts : +expanded : +unexpanded"? ╎list element: unexpanded unknown in "unexpanded"? no (end of list) end sublist unexpanded -unknown in "+local_localparts : +expanded : +unexpanded"? no (end of list) +unknown in local_parts? no (end of list) r4 router skipped: local_parts mismatch --------> r5 router <-------- local_part=unknown domain=test.ex checking local_parts -unknown in "+local_localparts : +expanded : +unexpanded"? +unknown in local_parts? list element: +local_localparts start sublist local_localparts cached no match for +local_localparts @@ -447,7 +452,7 @@ unknown in "+local_localparts : +expanded : +unexpanded"? start sublist unexpanded cached no match for +unexpanded cached lookup data = NULL -unknown in "+local_localparts : +expanded : +unexpanded"? no (end of list) +unknown in local_parts? no (end of list) r5 router skipped: local_parts mismatch no more routers search_tidyup called diff --git a/test/stderr/0279 b/test/stderr/0279 index 1885579cb..bbd876568 100644 --- a/test/stderr/0279 +++ b/test/stderr/0279 @@ -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 @@ -21,15 +22,15 @@ routing CALLER@test.ex --------> rr1 router <-------- local_part=CALLER domain=test.ex checking senders -CALLER@test.ex in "user1@+funny_domains"? +CALLER@test.ex in senders? list element: user1@+funny_domains address match test: subject=CALLER@test.ex pattern=user1@+funny_domains -CALLER@test.ex in "user1@+funny_domains"? no (end of list) +CALLER@test.ex in senders? no (end of list) rr1 router skipped: senders mismatch --------> r1 router <-------- local_part=CALLER domain=test.ex checking senders -CALLER@test.ex in "+never_addresses : +n1_addresses : ! +local_addresses"? +CALLER@test.ex in senders? list element: +never_addresses start sublist never_addresses CALLER@test.ex in "never@test.ex"? @@ -44,7 +45,7 @@ CALLER@test.ex in "+never_addresses : +n1_addresses : ! +local_addresses"? ╎address match test: subject=CALLER@test.ex pattern=never1@test.ex CALLER@test.ex in "never1@test.ex"? no (end of list) end sublist n1_addresses - list element: ! +local_addresses + list element: !░+local_addresses start sublist local_addresses CALLER@test.ex in "CALLER@test.ex"? ╎list element: CALLER@test.ex @@ -55,12 +56,12 @@ CALLER@test.ex in "+never_addresses : +n1_addresses : ! +local_addresses"? ╎CALLER@test.ex in "CALLER@test.ex"? yes (matched "CALLER@test.ex") end sublist local_addresses data from lookup saved for cache for +local_addresses: key 'CALLER@test.ex' value 'CALLER@test.ex' - CALLER@test.ex in "+never_addresses : +n1_addresses : ! +local_addresses"? no (matched "! +local_addresses") + CALLER@test.ex in senders? no (matched "! +local_addresses") r1 router skipped: senders mismatch --------> r2 router <-------- local_part=CALLER domain=test.ex checking senders -CALLER@test.ex in "+never_addresses : +n2_addresses : !+local_addresses"? +CALLER@test.ex in senders? list element: +never_addresses start sublist never_addresses cached no match for +never_addresses @@ -80,7 +81,7 @@ CALLER@test.ex in "+never_addresses : +n2_addresses : !+local_addresses"? start sublist local_addresses cached yes match for +local_addresses cached lookup data = CALLER@test.ex - CALLER@test.ex in "+never_addresses : +n2_addresses : !+local_addresses"? no (matched "!+local_addresses" - cached) + CALLER@test.ex in senders? no (matched "!+local_addresses" - cached) r2 router skipped: senders mismatch --------> r3 router <-------- local_part=CALLER domain=test.ex @@ -88,12 +89,12 @@ checking for local user seeking password data for user "CALLER": using cached result getpwnam() succeeded uid=CALLER_UID gid=CALLER_GID checking senders -CALLER@test.ex in "+local_addresses"? +CALLER@test.ex in senders? list element: +local_addresses start sublist local_addresses cached yes match for +local_addresses cached lookup data = CALLER@test.ex - CALLER@test.ex in "+local_addresses"? yes (matched "+local_addresses" - cached) + CALLER@test.ex in senders? yes (matched "+local_addresses" - cached) calling r3 router r3 router called for CALLER@test.ex domain = test.ex @@ -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 @@ -130,7 +132,7 @@ routing CALLER@test.ex --------> rr1 router <-------- local_part=CALLER domain=test.ex checking senders -user1@fun.1 in "user1@+funny_domains"? +user1@fun.1 in senders? list element: user1@+funny_domains address match test: subject=user1@fun.1 pattern=user1@+funny_domains fun.1 in "+funny_domains"? @@ -141,7 +143,7 @@ user1@fun.1 in "user1@+funny_domains"? ╎ fun.1 in "fun.1 : fun.2"? yes (matched "fun.1") end sublist funny_domains fun.1 in "+funny_domains"? yes (matched "+funny_domains") - user1@fun.1 in "user1@+funny_domains"? yes (matched "user1@+funny_domains") + user1@fun.1 in senders? yes (matched "user1@+funny_domains") calling rr1 router rda_interpret (string): ':fail: matched *@+funny_domains' expanded: ':fail: matched *@+funny_domains' diff --git a/test/stderr/0281 b/test/stderr/0281 index 0d9e1a3be..ade958445 100644 --- a/test/stderr/0281 +++ b/test/stderr/0281 @@ -50,6 +50,8 @@ LOG: H=(test) [V4NET.1.1.1] F= rejected RCPT <1@else.where>: domain doesn't >>> check domains = @mx_any >>> mxt13.test.ex in "@mx_any"? >>> list element: @mx_any +>>> check dnssec require list +>>> check dnssec request list >>> other1.test.ex in hosts_treat_as_local? >>> list element: other1.test.ex >>> other1.test.ex in hosts_treat_as_local? yes (matched "other1.test.ex") @@ -65,6 +67,8 @@ LOG: H=(test) [V4NET.1.1.1] F= rejected RCPT <1@else.where>: domain doesn't >>> check domains = @mx_any >>> mxt1.test.ex in "@mx_any"? >>> list element: @mx_any +>>> check dnssec require list +>>> check dnssec request list >>> eximtesthost.test.ex in hosts_treat_as_local? >>> list element: other1.test.ex >>> eximtesthost.test.ex in hosts_treat_as_local? no (end of list) @@ -80,6 +84,8 @@ LOG: H=(test) [V4NET.1.1.1] F= rejected RCPT <1@else.where>: domain doesn't >>> check domains = @mx_any >>> mxt6.test.ex in "@mx_any"? >>> list element: @mx_any +>>> check dnssec require list +>>> check dnssec request list >>> ten-1.test.ex in hosts_treat_as_local? >>> list element: other1.test.ex >>> ten-1.test.ex in hosts_treat_as_local? no (end of list) @@ -100,6 +106,8 @@ LOG: H=(test) [V4NET.1.1.1] F= rejected RCPT <1@else.where>: domain doesn't >>> check domains = @mx_any >>> mxt9.test.ex in "@mx_any"? >>> list element: @mx_any +>>> check dnssec require list +>>> check dnssec request list >>> ten-1.test.ex in hosts_treat_as_local? >>> list element: other1.test.ex >>> ten-1.test.ex in hosts_treat_as_local? no (end of list) @@ -119,6 +127,8 @@ LOG: H=(test) [V4NET.1.1.1] F= rejected RCPT <2@mxt9.test.ex>: domain doesn >>> check domains = @mx_any >>> mxnone.test.ex in "@mx_any"? >>> list element: @mx_any +>>> check dnssec require list +>>> check dnssec request list >>> mxnone.test.ex in "@mx_any"? no (end of list) >>> require: condition test failed in ACL "acl_rcpt_2" >>> end of ACL "acl_rcpt_2": not OK @@ -129,6 +139,8 @@ LOG: H=(test) [V4NET.1.1.1] F= rejected RCPT <2@mxnone.test.ex>: domain doe >>> check domains = @mx_primary >>> mxt5.test.ex in "@mx_primary"? >>> list element: @mx_primary +>>> check dnssec require list +>>> check dnssec request list >>> ten-1.test.ex in hosts_treat_as_local? >>> list element: other1.test.ex >>> ten-1.test.ex in hosts_treat_as_local? no (end of list) @@ -147,6 +159,8 @@ LOG: H=(test) [V4NET.1.1.1] F= rejected RCPT <2@mxnone.test.ex>: domain doe >>> check domains = @mx_primary >>> mxt6.test.ex in "@mx_primary"? >>> list element: @mx_primary +>>> check dnssec require list +>>> check dnssec request list >>> ten-1.test.ex in hosts_treat_as_local? >>> list element: other1.test.ex >>> ten-1.test.ex in hosts_treat_as_local? no (end of list) @@ -169,6 +183,8 @@ LOG: H=(test) [V4NET.1.1.1] F= rejected RCPT <3@mxt6.test.ex>: domain doesn >>> check domains = @mx_primary >>> mxt9.test.ex in "@mx_primary"? >>> list element: @mx_primary +>>> check dnssec require list +>>> check dnssec request list >>> ten-1.test.ex in hosts_treat_as_local? >>> list element: other1.test.ex >>> ten-1.test.ex in hosts_treat_as_local? no (end of list) @@ -188,6 +204,8 @@ LOG: H=(test) [V4NET.1.1.1] F= rejected RCPT <3@mxt9.test.ex>: domain doesn >>> check domains = @mx_primary >>> mxnone.test.ex in "@mx_primary"? >>> list element: @mx_primary +>>> check dnssec require list +>>> check dnssec request list >>> mxnone.test.ex in "@mx_primary"? no (end of list) >>> require: condition test failed in ACL "acl_rcpt_3" >>> end of ACL "acl_rcpt_3": not OK @@ -198,6 +216,8 @@ LOG: H=(test) [V4NET.1.1.1] F= rejected RCPT <3@mxnone.test.ex>: domain doe >>> check domains = @mx_secondary >>> mxt5.test.ex in "@mx_secondary"? >>> list element: @mx_secondary +>>> check dnssec require list +>>> check dnssec request list >>> eximtesthost.test.ex in hosts_treat_as_local? >>> list element: other1.test.ex >>> eximtesthost.test.ex in hosts_treat_as_local? no (end of list) @@ -212,6 +232,8 @@ LOG: H=(test) [V4NET.1.1.1] F= rejected RCPT <4@mxt5.test.ex>: domain doesn >>> check domains = @mx_secondary >>> mxt6.test.ex in "@mx_secondary"? >>> list element: @mx_secondary +>>> check dnssec require list +>>> check dnssec request list >>> ten-1.test.ex in hosts_treat_as_local? >>> list element: other1.test.ex >>> ten-1.test.ex in hosts_treat_as_local? no (end of list) @@ -235,6 +257,8 @@ LOG: H=(test) [V4NET.1.1.1] F= rejected RCPT <4@mxt5.test.ex>: domain doesn >>> check domains = @mx_secondary >>> mxt9.test.ex in "@mx_secondary"? >>> list element: @mx_secondary +>>> check dnssec require list +>>> check dnssec request list >>> ten-1.test.ex in hosts_treat_as_local? >>> list element: other1.test.ex >>> ten-1.test.ex in hosts_treat_as_local? no (end of list) @@ -254,6 +278,8 @@ LOG: H=(test) [V4NET.1.1.1] F= rejected RCPT <4@mxt9.test.ex>: domain doesn >>> check domains = @mx_secondary >>> mxnone.test.ex in "@mx_secondary"? >>> list element: @mx_secondary +>>> check dnssec require list +>>> check dnssec request list >>> mxnone.test.ex in "@mx_secondary"? no (end of list) >>> require: condition test failed in ACL "acl_rcpt_4" >>> end of ACL "acl_rcpt_4": not OK @@ -343,6 +369,8 @@ MUNGED: ::1 will be omitted in what follows >>> check domains = @mx_any >>> mxt3.test.ex in "@mx_any"? >>> list element: @mx_any +>>> check dnssec require list +>>> check dnssec request list >>> not-exist.test.ex in hosts_treat_as_local? >>> list element: other1.test.ex >>> not-exist.test.ex in hosts_treat_as_local? no (end of list) @@ -362,6 +390,8 @@ MUNGED: ::1 will be omitted in what follows >>> check domains = @mx_primary >>> mxt3.test.ex in "@mx_primary"? >>> list element: @mx_primary +>>> check dnssec require list +>>> check dnssec request list >>> not-exist.test.ex in hosts_treat_as_local? >>> list element: other1.test.ex >>> not-exist.test.ex in hosts_treat_as_local? no (end of list) @@ -380,6 +410,8 @@ LOG: H=(test) [V4NET.1.1.1] F= rejected RCPT <3@mxt3.test.ex>: domain doesn >>> check domains = @mx_secondary >>> mxt3.test.ex in "@mx_secondary"? >>> list element: @mx_secondary +>>> check dnssec require list +>>> check dnssec request list >>> not-exist.test.ex in hosts_treat_as_local? >>> list element: other1.test.ex >>> not-exist.test.ex in hosts_treat_as_local? no (end of list) diff --git a/test/stderr/0283 b/test/stderr/0283 index a41907c73..e4799ceb5 100644 --- a/test/stderr/0283 +++ b/test/stderr/0283 @@ -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 @@ -27,14 +29,18 @@ seeking password data for user "CALLER": cache not available getpwnam() succeeded uid=CALLER_UID gid=CALLER_GID seeking password data for user "root": cache not available getpwnam() succeeded uid=uuuu gid=gggg +somebody in local_parts? no (end of list) +somebody in local_parts? no (end of list) changed uid/gid: local delivery to somebody transport=t1 uid=EXIM_UID gid=EXIM_GID pid=p1236 transport error EPIPE ignored +>>>>>>>>>>>>>>>> Exim pid=p1236 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN ** somebody@myhost.test.ex R=rest T=t1: return message generated 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 @@ -51,6 +57,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 @@ -63,8 +70,10 @@ seeking password data for user "CALLER": cache not available getpwnam() succeeded uid=CALLER_UID gid=CALLER_GID seeking password data for user "root": cache not available getpwnam() succeeded uid=uuuu gid=gggg +CALLER in local_parts? no (end of list) changed uid/gid: local delivery to CALLER transport=t2 uid=CALLER_UID gid=CALLER_GID pid=p1239 +>>>>>>>>>>>>>>>> Exim pid=p1239 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => CALLER R=caller T=t2 changed uid/gid: post-delivery tidying @@ -78,6 +87,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 @@ -93,6 +103,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 diff --git a/test/stderr/0294 b/test/stderr/0294 index afffd2f51..fb876330c 100644 --- a/test/stderr/0294 +++ b/test/stderr/0294 @@ -1,4 +1,5 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config trusted user admin user @@ -15,27 +16,32 @@ spool directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 log directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 SMTP>> 250 OK SMTP<< rcpt to: +one in "reject"? no (end of list) SMTP>> 250 Accepted SMTP<< rcpt to: rate limit RCPT: delay 0.25 sec +one in "reject"? no (end of list) SMTP>> 250 Accepted SMTP<< rcpt to: rate limit RCPT: delay 0.263 sec +one in "reject"? no (end of list) SMTP>> 250 Accepted SMTP<< rcpt to: rate limit RCPT: delay 0.276 sec +one in "reject"? no (end of list) SMTP>> 250 Accepted SMTP<< rcpt to: rate limit RCPT: delay 0.289 sec +one in "reject"? no (end of list) SMTP>> 250 Accepted SMTP<< data SMTP>> 354 Enter message, ending with "." on a line by itself >>Headers received: >>Headers after rewriting and local additions: -I Message-Id: -F From: x@y - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: x@y + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaX-000000005vi-0000-D Data file written for message 10HmaX-000000005vi-0000 @@ -59,15 +65,16 @@ spool directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 log directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 SMTP>> 250 OK SMTP<< rcpt to: +two in "reject"? no (end of list) SMTP>> 250 Accepted SMTP<< data SMTP>> 354 Enter message, ending with "." on a line by itself >>Headers received: >>Headers after rewriting and local additions: -I Message-Id: -F From: x@y - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: x@y + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaY-000000005vi-0000-D Data file written for message 10HmaY-000000005vi-0000 @@ -96,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 @@ -155,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 @@ -215,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 diff --git a/test/stderr/0297 b/test/stderr/0297 index b902d1b1f..dc7e0c020 100644 --- a/test/stderr/0297 +++ b/test/stderr/0297 @@ -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: >>>>>>>>>>>>>>>> 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 diff --git a/test/stderr/0303 b/test/stderr/0303 index 6eb387a34..72553dcd8 100644 --- a/test/stderr/0303 +++ b/test/stderr/0303 @@ -11,6 +11,10 @@ >>> myhost.test.ex in helo_lookup_domains? yes (matched "@") >>> looking up host name for V4NET.0.0.1 >>> IP address lookup yielded "ten-1.test.ex" +>>> check dnssec require list +>>> ten-1.test.ex not in empty list (option unset? cannot trace name) +>>> check dnssec request list +>>> ten-1.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-1.test.ex >>> V4NET.0.0.1 OK >>> host in hosts_connection_nolog? no (option unset) @@ -27,8 +31,14 @@ >>> [127.0.0.1] in helo_lookup_domains? yes (matched "@[]") >>> looking up host name for V4NET.0.0.1 >>> IP address lookup yielded "ten-1.test.ex" +>>> check dnssec require list +>>> ten-1.test.ex not in empty list (option unset? cannot trace name) +>>> check dnssec request list +>>> ten-1.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-1.test.ex >>> V4NET.0.0.1 OK +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -48,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 @@ -82,6 +93,8 @@ SMTP<< EHLO [V4NET.2.3.4] sender_fullhost = ([V4NET.2.3.4]) [V4NET.2.3.4] sender_rcvhost = [V4NET.2.3.4] set_process_info: pppp handling incoming connection from ([V4NET.2.3.4]) [V4NET.2.3.4] + list element: * + host in limits_advertise_hosts? yes (matched "*") host in dsn_advertise_hosts? no (option unset) host in pipelining_advertise_hosts? list element: * @@ -90,6 +103,7 @@ host in chunking_advertise_hosts? host in chunking_advertise_hosts? no (end of list) SMTP>> 250-myhost.test.ex Hello [V4NET.2.3.4] [V4NET.2.3.4] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -108,8 +122,8 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers search_tidyup called >>Headers after rewriting and local additions: @@ -132,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 @@ -162,6 +177,8 @@ SMTP<< EHLO [V4NET.2.3.4] sender_fullhost = host.name.tld [V4NET.2.3.4] sender_rcvhost = host.name.tld ([V4NET.2.3.4]) set_process_info: pppp handling incoming connection from host.name.tld [V4NET.2.3.4] + list element: * + host in limits_advertise_hosts? yes (matched "*") host in dsn_advertise_hosts? no (option unset) host in pipelining_advertise_hosts? list element: * @@ -170,6 +187,7 @@ host in chunking_advertise_hosts? host in chunking_advertise_hosts? no (end of list) SMTP>> 250-myhost.test.ex Hello host.name.tld [V4NET.2.3.4] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -188,8 +206,8 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers search_tidyup called >>Headers after rewriting and local additions: diff --git a/test/stderr/0305 b/test/stderr/0305 index 5da648d50..0deee2c75 100644 --- a/test/stderr/0305 +++ b/test/stderr/0305 @@ -15,9 +15,11 @@ >>> check domains = +ok_domains >>> ten-1.test.ex in "+ok_domains"? >>> list element: +ok_domains ->>> ten-1.test.ex in "ten-1.test.ex"? ->>> list element: ten-1.test.ex ->>> ten-1.test.ex in "ten-1.test.ex"? yes (matched "ten-1.test.ex") +>>> start sublist ok_domains +>>> ten-1.test.ex in "ten-1.test.ex"? +>>> ╎list element: ten-1.test.ex +>>> ╎ten-1.test.ex in "ten-1.test.ex"? yes (matched "ten-1.test.ex") +>>> end sublist ok_domains >>> ten-1.test.ex in "+ok_domains"? yes (matched "+ok_domains") >>> accept: condition test succeeded in ACL "acl1" >>> end of ACL "acl1": ACCEPT @@ -26,8 +28,10 @@ >>> check domains = +ok_domains >>> junk.junk in "+ok_domains"? >>> list element: +ok_domains ->>> junk.junk in ""? ->>> junk.junk in ""? no (end of list) +>>> start sublist ok_domains +>>> junk.junk in ""? +>>> junk.junk in ""? no (end of list) +>>> end sublist ok_domains >>> junk.junk in "+ok_domains"? no (end of list) >>> accept: condition test failed in ACL "acl1" >>> end of ACL "acl1": implicit DENY diff --git a/test/stderr/0306 b/test/stderr/0306 index 37b5cd641..b2d3b50b3 100644 --- a/test/stderr/0306 +++ b/test/stderr/0306 @@ -15,24 +15,24 @@ >>> check verify = recipient >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing list1-request@lists.test.ex ->>> lists.test.ex in "lists.test.ex"? +>>> lists.test.ex in domains? >>> list element: lists.test.ex ->>> lists.test.ex in "lists.test.ex"? yes (matched "lists.test.ex") +>>> lists.test.ex in domains? yes (matched "lists.test.ex") >>> calling r1 router >>> routed by r1 router >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing manager-list1@test.ex ->>> test.ex in "lists.test.ex"? +>>> test.ex in domains? >>> list element: lists.test.ex ->>> test.ex in "lists.test.ex"? no (end of list) ->>> test.ex in "lists.test.ex"? +>>> test.ex in domains? no (end of list) +>>> test.ex in domains? >>> list element: lists.test.ex ->>> test.ex in "lists.test.ex"? no (end of list) ->>> anyone@anywhere in ":"? +>>> test.ex in domains? no (end of list) +>>> anyone@anywhere in senders? >>> list element: >>> anywhere in ""? >>> anywhere in ""? no (end of list) ->>> anyone@anywhere in ":"? no (end of list) +>>> anyone@anywhere in senders? no (end of list) >>> calling r5 router >>> routed by r5 router >>> ----------- end verify ------------ @@ -43,12 +43,12 @@ >>> check verify = recipient >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing list1@lists.test.ex ->>> lists.test.ex in "lists.test.ex"? +>>> lists.test.ex in domains? >>> list element: lists.test.ex ->>> lists.test.ex in "lists.test.ex"? yes (matched "lists.test.ex") ->>> sub1@test.ex in "lsearch;TESTSUITE/aux-fixed/0306/list1"? +>>> lists.test.ex in domains? yes (matched "lists.test.ex") +>>> sub1@test.ex in senders? >>> list element: lsearch;TESTSUITE/aux-fixed/0306/list1 ->>> sub1@test.ex in "lsearch;TESTSUITE/aux-fixed/0306/list1"? yes (matched "lsearch;TESTSUITE/aux-fixed/0306/list1") +>>> sub1@test.ex in senders? yes (matched "lsearch;TESTSUITE/aux-fixed/0306/list1") >>> calling r2 router >>> routed by r2 router >>> ----------- end verify ------------ @@ -62,15 +62,15 @@ >>> check verify = recipient >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing list1@lists.test.ex ->>> lists.test.ex in "lists.test.ex"? +>>> lists.test.ex in domains? >>> list element: lists.test.ex ->>> lists.test.ex in "lists.test.ex"? yes (matched "lists.test.ex") ->>> anyone@anywhere in "lsearch;TESTSUITE/aux-fixed/0306/list1"? +>>> lists.test.ex in domains? yes (matched "lists.test.ex") +>>> anyone@anywhere in senders? >>> list element: lsearch;TESTSUITE/aux-fixed/0306/list1 ->>> anyone@anywhere in "lsearch;TESTSUITE/aux-fixed/0306/list1"? no (end of list) ->>> lists.test.ex in "lists.test.ex"? +>>> anyone@anywhere in senders? no (end of list) +>>> lists.test.ex in domains? >>> list element: lists.test.ex ->>> lists.test.ex in "lists.test.ex"? yes (matched "lists.test.ex") +>>> lists.test.ex in domains? yes (matched "lists.test.ex") >>> calling r3 router >>> r3 router forced address failure >>> ----------- end verify ------------ @@ -82,20 +82,20 @@ LOG: H=(test) [1.2.3.4] F= rejected RCPT : >>> check verify = recipient >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing nonlist@lists.test.ex ->>> lists.test.ex in "lists.test.ex"? +>>> lists.test.ex in domains? >>> list element: lists.test.ex ->>> lists.test.ex in "lists.test.ex"? yes (matched "lists.test.ex") ->>> anyone@anywhere in "*"? +>>> lists.test.ex in domains? yes (matched "lists.test.ex") +>>> anyone@anywhere in senders? >>> list element: * >>> anywhere in "*"? >>> list element: * >>> anywhere in "*"? yes (matched "*") ->>> anyone@anywhere in "*"? yes (matched "*") +>>> anyone@anywhere in senders? yes (matched "*") >>> calling r2 router >>> r2 router declined for nonlist@lists.test.ex ->>> lists.test.ex in "lists.test.ex"? +>>> lists.test.ex in domains? >>> list element: lists.test.ex ->>> lists.test.ex in "lists.test.ex"? yes (matched "lists.test.ex") +>>> lists.test.ex in domains? yes (matched "lists.test.ex") >>> calling r3 router >>> r3 router forced address failure >>> ----------- end verify ------------ diff --git a/test/stderr/0308 b/test/stderr/0308 index 369fcf453..c030e8232 100644 --- a/test/stderr/0308 +++ b/test/stderr/0308 @@ -47,6 +47,10 @@ LOG: no host name found for IP address V4NET.0.0.97 >>> sender host name required, to match against *.test.ex >>> looking up host name for V4NET.0.0.1 >>> IP address lookup yielded "ten-1.test.ex" +>>> check dnssec require list +>>> ten-1.test.ex not in empty list (option unset? cannot trace name) +>>> check dnssec request list +>>> ten-1.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for ten-1.test.ex >>> V4NET.0.0.1 OK >>> host in "*.test.ex"? yes (matched "*.test.ex") diff --git a/test/stderr/0315 b/test/stderr/0315 index 4dc506af4..7495a8145 100644 --- a/test/stderr/0315 +++ b/test/stderr/0315 @@ -1,16 +1,17 @@ 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 dropping to exim gid; retaining priv uid delivering 10HmaX-000000005vi-0000 -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: x@ten-1.test.ex @@ -28,6 +29,7 @@ checking domains calling r1 router r1 router called for y@ten-1.test.ex domain = ten-1.test.ex +main lookup for domain set transport t1 queued for t1 transport: local_part = y domain = ten-1.test.ex @@ -48,7 +50,7 @@ After routing: y@ten-1.test.ex Failed addresses: Deferred addresses: -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1236 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN *> x@ten-1.test.ex R=r1 T=t1 H=ten-1.test.ex [V4NET.0.0.1] C="delivery bypassed by -N option" LOG: MAIN @@ -58,17 +60,18 @@ 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 dropping to exim gid; retaining priv uid delivering 10HmaY-000000005vi-0000 -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: x@ten-2.test.ex @@ -83,12 +86,14 @@ routing y@ten-2.test.ex --------> r1 router <-------- local_part=y domain=ten-2.test.ex checking domains +ten-2.test.ex in domains? no (end of list) r1 router skipped: domains mismatch --------> r2 router <-------- local_part=y domain=ten-2.test.ex calling r2 router r2 router called for y@ten-2.test.ex domain = ten-2.test.ex +main lookup for domain set transport t1 queued for t1 transport: local_part = y domain = ten-2.test.ex @@ -103,12 +108,14 @@ routing x@ten-2.test.ex --------> r1 router <-------- local_part=x domain=ten-2.test.ex checking domains +ten-2.test.ex in domains? no (end of list) r1 router skipped: domains mismatch --------> r2 router <-------- local_part=x domain=ten-2.test.ex calling r2 router r2 router called for x@ten-2.test.ex domain = ten-2.test.ex +main lookup for domain queued for t1 transport: local_part = x domain = ten-2.test.ex errors_to=NULL @@ -125,12 +132,12 @@ After routing: y@ten-2.test.ex Failed addresses: Deferred addresses: -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1239 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN *> x@ten-2.test.ex R=r2 T=t1 H=ten-2.test.ex [V4NET.0.0.2] C="delivery bypassed by -N option" LOG: MAIN *> y@ten-2.test.ex R=r2 T=t1 H=ten-2.test.ex [V4NET.0.0.2] C="delivery bypassed by -N option" LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1237 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1238 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0317 b/test/stderr/0317 index aaa9efce6..c3e17cacc 100644 --- a/test/stderr/0317 +++ b/test/stderr/0317 @@ -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 @@ -12,12 +13,12 @@ Cc: a@b.c Bcc: p@q.r >>Headers after rewriting and local additions: -T To: x@y.z -C Cc: a@b.c -* Bcc: p@q.r -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + T To: x@y.z + C Cc: a@b.c + * Bcc: p@q.r + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaX-000000005vi-0000-D Data file written for message 10HmaX-000000005vi-0000 @@ -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 @@ -50,15 +52,15 @@ Resent-cc: pp@qq.rr Resent-bcc: xx@yy.zz >>Headers after rewriting and local additions: - Resent-Date: Tue, 2 Mar 1999 09:44:33 +0000 -I Resent-Message-Id: -T To: x@y.z -C Cc: a@b.c -B Bcc: p@q.r -T Resent-to: aa@bb.cc -C Resent-cc: pp@qq.rr -* Resent-bcc: xx@yy.zz -F Resent-From: CALLER_NAME + Resent-Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Resent-Message-Id: + T To: x@y.z + C Cc: a@b.c + B Bcc: p@q.r + T Resent-to: aa@bb.cc + C Resent-cc: pp@qq.rr + * Resent-bcc: xx@yy.zz + F Resent-From: CALLER_NAME Data file name: TESTSUITE/spool//input//10HmaY-000000005vi-0000-D Data file written for message 10HmaY-000000005vi-0000 diff --git a/test/stderr/0325 b/test/stderr/0325 index d5550ea88..633a5b0ab 100644 --- a/test/stderr/0325 +++ b/test/stderr/0325 @@ -23,16 +23,22 @@ r4: $local_part_data = LOCAL PART DATA >>> check domains = +test_domains >>> a.b.c in "+test_domains"? >>> list element: +test_domains ->>> a.b.c in "lsearch; TESTSUITE/aux-fixed/0325.data"? ->>> list element: lsearch; TESTSUITE/aux-fixed/0325.data ->>> a.b.c in "lsearch; TESTSUITE/aux-fixed/0325.data"? yes (matched "lsearch; TESTSUITE/aux-fixed/0325.data") +>>> start sublist test_domains +>>> a.b.c in "lsearch; TESTSUITE/aux-fixed/0325.data"? +>>> ╎list element: lsearch;░TESTSUITE/aux-fixed/0325.data +>>> ╎a.b.c in "lsearch; TESTSUITE/aux-fixed/0325.data"? yes (matched "lsearch; TESTSUITE/aux-fixed/0325.data") +>>> end sublist test_domains +>>> data from lookup saved for cache for +test_domains: key 'a.b.c' value 'DOMAIN DATA' >>> a.b.c in "+test_domains"? yes (matched "+test_domains") >>> check local_parts = +test_local_parts >>> xxx in "+test_local_parts"? >>> list element: +test_local_parts ->>> xxx in "lsearch;TESTSUITE/aux-fixed/0325.data"? ->>> list element: lsearch;TESTSUITE/aux-fixed/0325.data ->>> xxx in "lsearch;TESTSUITE/aux-fixed/0325.data"? yes (matched "lsearch;TESTSUITE/aux-fixed/0325.data") +>>> start sublist test_local_parts +>>> xxx in "lsearch;TESTSUITE/aux-fixed/0325.data"? +>>> ╎list element: lsearch;TESTSUITE/aux-fixed/0325.data +>>> ╎xxx in "lsearch;TESTSUITE/aux-fixed/0325.data"? yes (matched "lsearch;TESTSUITE/aux-fixed/0325.data") +>>> end sublist test_local_parts +>>> data from lookup saved for cache for +test_local_parts: key 'xxx' value 'LOCAL PART DATA' >>> xxx in "+test_local_parts"? yes (matched "+test_local_parts") >>> check condition = ${if eq{$domain_data/$local_part_data}{DOMAIN DATA/LOCAL PART DATA}{no}{yes}} >>> = no @@ -41,10 +47,16 @@ r4: $local_part_data = LOCAL PART DATA >>> check domains = +test_domains >>> a.b.c in "+test_domains"? >>> list element: +test_domains +>>> start sublist test_domains +>>> cached yes match for +test_domains +>>> cached lookup data = DOMAIN DATA >>> a.b.c in "+test_domains"? yes (matched "+test_domains" - cached) >>> check local_parts = +test_local_parts >>> xxx in "+test_local_parts"? >>> list element: +test_local_parts +>>> start sublist test_local_parts +>>> cached yes match for +test_local_parts +>>> cached lookup data = LOCAL PART DATA >>> xxx in "+test_local_parts"? yes (matched "+test_local_parts" - cached) >>> message: \$domain_data=$domain_data \$local_part_data=$local_part_data >>> deny: condition test succeeded in ACL "a1" diff --git a/test/stderr/0332 b/test/stderr/0332 index 11f0429dc..70dc4bddb 100644 --- a/test/stderr/0332 +++ b/test/stderr/0332 @@ -1,10 +1,10 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config admin user dropping to exim gid; retaining priv uid LOG: queue_run MAIN Start queue run: pid=p1234 -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: ok@no.delay unique = ok@no.delay @@ -32,20 +32,19 @@ After routing: ok@no.delay Failed addresses: Deferred addresses: -locking TESTSUITE/spool/db/retry.lockfile -locking TESTSUITE/spool/db/wait-t1.lockfile cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:354:.:250' +>>>>>>>>>>>>>>>> Exim pid=p1235 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => ok@no.delay R=r1 T=t1 H=127.0.0.1 [127.0.0.1] C="250 OK" LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1235 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1236 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config trusted user admin user dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: delay@test.again.dns unique = delay@test.again.dns @@ -79,13 +78,11 @@ After routing: Failed addresses: Deferred addresses: delay@test.again.dns -locking TESTSUITE/spool/db/retry.lockfile -locking TESTSUITE/spool/db/wait-t1.lockfile -cmdlog: 'MAIL|:RCPT|:DATA:250:250:354:.:250:QUIT:250' +cmdlog: 'MAIL|:RCPT|:DATA:250:250:354:.:250:QUIT+:250' +>>>>>>>>>>>>>>>> Exim pid=p1238 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => ok@no.delay R=r1 T=t1 H=127.0.0.1 [127.0.0.1]* C="250 OK" ->>>>>>>>>>>>>>>> Exim pid=p1236 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>> -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1237 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: delay@test.again.dns unique = delay@test.again.dns @@ -98,7 +95,7 @@ After routing: Failed addresses: Deferred addresses: delay@test.again.dns ->>>>>>>>>>>>>>>> Exim pid=p1237 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1239 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: queue_run MAIN End queue run: pid=p1234 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0333 b/test/stderr/0333 index 422ed67bb..8a7d6dd42 100644 --- a/test/stderr/0333 +++ b/test/stderr/0333 @@ -1,8 +1,8 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config admin user dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: ok@no.delay unique = ok@no.delay @@ -30,20 +30,19 @@ After routing: ok@no.delay Failed addresses: Deferred addresses: -locking TESTSUITE/spool/db/retry.lockfile -locking TESTSUITE/spool/db/wait-t1.lockfile cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:354:.:250' +>>>>>>>>>>>>>>>> Exim pid=p1235 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => ok@no.delay R=r1 T=t1 H=127.0.0.1 [127.0.0.1] C="250 OK" 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 dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: delay@test.again.dns unique = delay@test.again.dns @@ -77,9 +76,8 @@ After routing: Failed addresses: Deferred addresses: delay@test.again.dns -locking TESTSUITE/spool/db/retry.lockfile -locking TESTSUITE/spool/db/wait-t1.lockfile -cmdlog: 'MAIL|:RCPT|:DATA:250:250:354:.:250:QUIT:250' +cmdlog: 'MAIL|:RCPT|:DATA:250:250:354:.:250:QUIT+:250' +>>>>>>>>>>>>>>>> Exim pid=p1237 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => ok@no.delay R=r1 T=t1 H=127.0.0.1 [127.0.0.1]* C="250 OK" ->>>>>>>>>>>>>>>> Exim pid=p1235 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1236 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0342 b/test/stderr/0342 index c4414fe0c..454d93956 100644 --- a/test/stderr/0342 +++ b/test/stderr/0342 @@ -17,16 +17,22 @@ >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing x@ten-1 >>> calling dnslookup router ->>> ten-1 in "*"? ->>> list element: * ->>> ten-1 in "*"? yes (matched "*") +>>> check dnssec require list +>>> ten-1 in dnssec_require_domains? no (option unset) +>>> check dnssec request list +>>> ten-1 in dnssec_request_domains? +>>> list element: * +>>> ten-1 in dnssec_request_domains? yes (matched "*") >>> re-routed to x@ten-1.test.ex >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing x@ten-1.test.ex >>> calling dnslookup router ->>> ten-1.test.ex in "*"? ->>> list element: * ->>> ten-1.test.ex in "*"? yes (matched "*") +>>> check dnssec require list +>>> ten-1.test.ex in dnssec_require_domains? no (option unset) +>>> check dnssec request list +>>> ten-1.test.ex in dnssec_request_domains? +>>> list element: * +>>> ten-1.test.ex in dnssec_request_domains? yes (matched "*") >>> routed by dnslookup router >>> ----------- end verify ------------ >>> deny: condition test failed in ACL "check_rcpt" diff --git a/test/stderr/0357 b/test/stderr/0357 index c07db78d6..2bb5a7fc9 100644 --- a/test/stderr/0357 +++ b/test/stderr/0357 @@ -1,15 +1,16 @@ 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 dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: userx@test.ex @@ -23,35 +24,34 @@ After routing: Failed addresses: Deferred addresses: checking retry status of 127.0.0.1 -locking TESTSUITE/spool/db/retry.lockfile no retry data available added retry item for R:userx@test.ex:: errno=-44 more_errno=dd,A flags=0 -cmdlog: '220:EHLO:250:MAIL:250:RCPT:451:QUIT:250' +cmdlog: '220:EHLO:250:MAIL:250:RCPT:451:QUIT+:250' +>>>>>>>>>>>>>>>> Exim pid=p1239 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> reading retry information for R:userx@test.ex: from subprocess added retry item LOG: MAIN == userx@test.ex R=r1 T=t1 defer (-44) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error Processing retry items -Succeeded addresses: -Failed addresses: -Deferred addresses: - userx@test.ex -locking TESTSUITE/spool/db/retry.lockfile -retry for R:userx@test.ex: = * 0 0 -failing_interval=ttt message_age=ttt -Writing retry data for R:userx@test.ex: - first failed=dddd last try=dddd next try=+2 expired=0 - errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error + Succeeded addresses: + Failed addresses: + Deferred addresses: + userx@test.ex + retry for R:userx@test.ex: = * 0 0 + failing_interval=ttt message_age=ttt + Writing retry data for R:userx@test.ex: + first failed=dddd last try=dddd next try=+2 expired=0 + errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error 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 LOG: queue_run MAIN Start queue run: pid=p1234 -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: userx@test.ex no domain retry record @@ -67,11 +67,11 @@ After routing: Failed addresses: Deferred addresses: checking retry status of 127.0.0.1 -locking TESTSUITE/spool/db/retry.lockfile no host retry record no message retry record added retry item for R:userx@test.ex:: errno=-44 more_errno=dd,A flags=0 -cmdlog: '220:EHLO:250:MAIL:250:RCPT:451:QUIT:250' +cmdlog: '220:EHLO:250:MAIL:250:RCPT:451:QUIT+:250' +>>>>>>>>>>>>>>>> Exim pid=p1240 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> reading retry information for R:userx@test.ex: from subprocess existing delete item dropped added retry item @@ -86,30 +86,29 @@ reading retry information for R:userx@test.ex: from subprocess LOG: MAIN == userx@test.ex R=r1 T=t1 defer (-44) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error Processing retry items -Succeeded addresses: -Failed addresses: -Deferred addresses: - userx@test.ex -locking TESTSUITE/spool/db/retry.lockfile -deleted retry information for R:userx@test.ex -deleted retry information for R:test.ex -retry for R:userx@test.ex: = * 0 0 -failing_interval=ttt message_age=ttt -Writing retry data for R:userx@test.ex: - first failed=dddd last try=dddd next try=+2 expired=0 - errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error + Succeeded addresses: + Failed addresses: + Deferred addresses: + userx@test.ex + deleted retry information for R:userx@test.ex + deleted retry information for R:test.ex + retry for R:userx@test.ex: = * 0 0 + failing_interval=ttt message_age=ttt + Writing retry data for R:userx@test.ex: + first failed=dddd last try=dddd next try=+2 expired=0 + errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error end of retry processing ->>>>>>>>>>>>>>>> Exim pid=p1239 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1241 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> 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 LOG: queue_run MAIN Start queue run: pid=p1235 -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: userx@test.ex no domain retry record @@ -125,11 +124,11 @@ After routing: Failed addresses: Deferred addresses: checking retry status of 127.0.0.1 -locking TESTSUITE/spool/db/retry.lockfile no host retry record no message retry record added retry item for R:userx@test.ex:: errno=-44 more_errno=dd,A flags=0 -cmdlog: '220:EHLO:250:MAIL:250:RCPT:451:QUIT:250' +cmdlog: '220:EHLO:250:MAIL:250:RCPT:451:QUIT+:250' +>>>>>>>>>>>>>>>> Exim pid=p1242 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> reading retry information for R:userx@test.ex: from subprocess existing delete item dropped added retry item @@ -144,30 +143,29 @@ reading retry information for R:userx@test.ex: from subprocess LOG: MAIN == userx@test.ex R=r1 T=t1 defer (-44) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error Processing retry items -Succeeded addresses: -Failed addresses: -Deferred addresses: - userx@test.ex -locking TESTSUITE/spool/db/retry.lockfile -deleted retry information for R:userx@test.ex -deleted retry information for R:test.ex -retry for R:userx@test.ex: = * 0 0 -failing_interval=ttt message_age=ttt -Writing retry data for R:userx@test.ex: - first failed=dddd last try=dddd next try=+4 expired=0 - errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error + Succeeded addresses: + Failed addresses: + Deferred addresses: + userx@test.ex + deleted retry information for R:userx@test.ex + deleted retry information for R:test.ex + retry for R:userx@test.ex: = * 0 0 + failing_interval=ttt message_age=ttt + Writing retry data for R:userx@test.ex: + first failed=dddd last try=dddd next try=+4 expired=0 + errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error end of retry processing ->>>>>>>>>>>>>>>> Exim pid=p1240 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1243 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> 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 LOG: queue_run MAIN Start queue run: pid=p1236 -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: userx@test.ex no domain retry record @@ -185,12 +183,12 @@ After routing: Deferred addresses: userx@test.ex Processing retry items -Succeeded addresses: -Failed addresses: -Deferred addresses: - userx@test.ex: no retry items + Succeeded addresses: + Failed addresses: + Deferred addresses: + userx@test.ex: no retry items end of retry processing ->>>>>>>>>>>>>>>> Exim pid=p1241 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1244 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: queue_run MAIN End queue run: pid=p1236 >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0358 b/test/stderr/0358 index ea889aad7..e2e392095 100644 --- a/test/stderr/0358 +++ b/test/stderr/0358 @@ -1,15 +1,16 @@ 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 dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: userx@test.ex @@ -28,11 +29,11 @@ After routing: Failed addresses: Deferred addresses: checking retry status of 127.0.0.1 -locking TESTSUITE/spool/db/retry.lockfile no retry data available added retry item for R:userx@test.ex:: errno=-44 more_errno=dd,A flags=0 added retry item for R:usery@test.ex:: errno=-44 more_errno=dd,A flags=0 -cmdlog: '220:EHLO:250:MAIL:250:RCPT:451:RCPT:451:QUIT:250' +cmdlog: '220:EHLO:250:MAIL:250:RCPT:451:RCPT:451:QUIT+:250' +>>>>>>>>>>>>>>>> Exim pid=p1237 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> reading retry information for R:userx@test.ex: from subprocess added retry item reading retry information for R:usery@test.ex: from subprocess @@ -42,32 +43,31 @@ LOG: MAIN LOG: MAIN == usery@test.ex R=r1 T=t1 defer (-44) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error Processing retry items -Succeeded addresses: -Failed addresses: -Deferred addresses: - usery@test.ex -locking TESTSUITE/spool/db/retry.lockfile -retry for R:usery@test.ex: = * 0 0 -failing_interval=ttt message_age=ttt -Writing retry data for R:usery@test.ex: - first failed=dddd last try=dddd next try=+2 expired=0 - errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error - userx@test.ex -retry for R:userx@test.ex: = * 0 0 -failing_interval=ttt message_age=ttt -Writing retry data for R:userx@test.ex: - first failed=dddd last try=dddd next try=+2 expired=0 - errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error + Succeeded addresses: + Failed addresses: + Deferred addresses: + usery@test.ex + retry for R:usery@test.ex: = * 0 0 + failing_interval=ttt message_age=ttt + Writing retry data for R:usery@test.ex: + first failed=dddd last try=dddd next try=+2 expired=0 + errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error + userx@test.ex + retry for R:userx@test.ex: = * 0 0 + failing_interval=ttt message_age=ttt + Writing retry data for R:userx@test.ex: + first failed=dddd last try=dddd next try=+2 expired=0 + errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error 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 LOG: queue_run MAIN Start queue run: pid=p1234 -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: userx@test.ex no domain retry record @@ -91,12 +91,12 @@ After routing: Failed addresses: Deferred addresses: checking retry status of 127.0.0.1 -locking TESTSUITE/spool/db/retry.lockfile no host retry record no message retry record added retry item for R:userx@test.ex:: errno=-44 more_errno=dd,A flags=0 added retry item for R:usery@test.ex:: errno=-44 more_errno=dd,A flags=0 -cmdlog: '220:EHLO:250:MAIL:250:RCPT:451:RCPT:451:QUIT:250' +cmdlog: '220:EHLO:250:MAIL:250:RCPT:451:RCPT:451:QUIT+:250' +>>>>>>>>>>>>>>>> Exim pid=p1238 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> reading retry information for R:userx@test.ex: from subprocess existing delete item dropped added retry item @@ -124,28 +124,27 @@ LOG: MAIN LOG: MAIN == usery@test.ex R=r1 T=t1 defer (-44) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error Processing retry items -Succeeded addresses: -Failed addresses: -Deferred addresses: - usery@test.ex -locking TESTSUITE/spool/db/retry.lockfile -deleted retry information for R:usery@test.ex -deleted retry information for R:test.ex -retry for R:usery@test.ex: = * 0 0 -failing_interval=ttt message_age=ttt -Writing retry data for R:usery@test.ex: - first failed=dddd last try=dddd next try=+4 expired=0 - errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error - userx@test.ex -deleted retry information for R:userx@test.ex -deleted retry information for R:test.ex -retry for R:userx@test.ex: = * 0 0 -failing_interval=ttt message_age=ttt -Writing retry data for R:userx@test.ex: - first failed=dddd last try=dddd next try=+4 expired=0 - errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error + Succeeded addresses: + Failed addresses: + Deferred addresses: + usery@test.ex + deleted retry information for R:usery@test.ex + deleted retry information for R:test.ex + retry for R:usery@test.ex: = * 0 0 + failing_interval=ttt message_age=ttt + Writing retry data for R:usery@test.ex: + first failed=dddd last try=dddd next try=+4 expired=0 + errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error + userx@test.ex + deleted retry information for R:userx@test.ex + deleted retry information for R:test.ex + retry for R:userx@test.ex: = * 0 0 + failing_interval=ttt message_age=ttt + Writing retry data for R:userx@test.ex: + first failed=dddd last try=dddd next try=+4 expired=0 + errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error end of retry processing ->>>>>>>>>>>>>>>> Exim pid=p1237 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1239 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: queue_run MAIN End queue run: pid=p1234 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0360 b/test/stderr/0360 index 7e30058bc..724a67d02 100644 --- a/test/stderr/0360 +++ b/test/stderr/0360 @@ -1,16 +1,17 @@ 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 dropping to exim gid; retaining priv uid delivering 10HmaX-000000005vi-0000 -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: cms@test.ex @@ -61,7 +62,6 @@ routed by r2 router envelope to: cms@test.ex transport: errors to postmaster@test.ex -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: unknown@recurse.test.ex @@ -100,14 +100,16 @@ v0 router skipped: verify_only set --------> r1 router <-------- local_part=unknown domain=recurse.test.ex checking domains +recurse.test.ex in domains? yes (end of list) calling r1 router r1 router called for unknown@recurse.test.ex domain = recurse.test.ex +main lookup for domain r1 router widened recurse.test.ex to recurse.test.ex.test.ex +main lookup for domain domain changed to recurse.test.ex.test.ex rewriting header lines re-routed to unknown@recurse.test.ex.test.ex -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: unknown@recurse.test.ex.test.ex @@ -121,9 +123,11 @@ v0 router skipped: verify_only set --------> r1 router <-------- local_part=unknown domain=recurse.test.ex.test.ex checking domains +recurse.test.ex.test.ex in domains? yes (end of list) calling r1 router r1 router called for unknown@recurse.test.ex.test.ex domain = recurse.test.ex.test.ex +main lookup for domain set transport t1 queued for t1 transport: local_part = unknown domain = recurse.test.ex.test.ex @@ -142,18 +146,18 @@ After routing: Failed addresses: Deferred addresses: defer@test.ex -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1237 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN *> unknown@recurse.test.ex.test.ex R=r1 T=t1 H=recurse.test.ex.test.ex [V4NET.99.0.2] C="delivery bypassed by -N option" >>>>>>>>>>>>>>>> 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 LOG: queue_run MAIN Start queue run: pid=p1234 -qf -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: cms@test.ex @@ -204,7 +208,6 @@ routed by r2 router envelope to: cms@test.ex transport: errors to postmaster@test.ex -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: unknown@recurse.test.ex @@ -242,7 +245,7 @@ After routing: Failed addresses: Deferred addresses: defer@test.ex ->>>>>>>>>>>>>>>> Exim pid=p1237 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1238 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: queue_run MAIN End queue run: pid=p1234 -qf >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0361 b/test/stderr/0361 index 6ae3012bd..f84c58517 100644 --- a/test/stderr/0361 +++ b/test/stderr/0361 @@ -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 @@ -26,15 +27,15 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=F: From: CALLER_NAME search_tidyup called >>Headers after rewriting and local additions: -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaY-000000005vi-0000-D Data file written for message 10HmaY-000000005vi-0000 @@ -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 @@ -76,8 +78,6 @@ body_linecount=0 message_linecount=8 DSN: set orcpt: flags: 0x0 Delivery address list: kilos@recurse.test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -93,42 +93,48 @@ routing kilos@recurse.test.ex --------> r1 router <-------- local_part=kilos domain=recurse.test.ex checking domains -recurse.test.ex in "!thishost.test.ex : !recurse.test.ex.test.ex"? +recurse.test.ex in domains? list element: !thishost.test.ex list element: !recurse.test.ex.test.ex -recurse.test.ex in "!thishost.test.ex : !recurse.test.ex.test.ex"? yes (end of list) +recurse.test.ex in domains? yes (end of list) calling r1 router r1 router called for kilos@recurse.test.ex domain = recurse.test.ex -recurse.test.ex in "*"? - list element: * - recurse.test.ex in "*"? yes (matched "*") -DNS lookup of recurse.test.ex (MX) using fakens -DNS lookup of recurse.test.ex (MX) gave HOST_NOT_FOUND -returning DNS_NOMATCH -faking res_search(MX) response length as 65535 - writing neg-cache entry for recurse.test.ex-MX-xxxx, ttl 3000 +main lookup for domain + check dnssec require list + recurse.test.ex in dnssec_require_domains? no (option unset) + check dnssec request list + recurse.test.ex in dnssec_request_domains? + list element: * + recurse.test.ex in dnssec_request_domains? yes (matched "*") + DNS lookup of recurse.test.ex (MX) using fakens + DNS lookup of recurse.test.ex (MX) gave HOST_NOT_FOUND + returning DNS_NOMATCH + faking res_search(MX) response length as 65535 + writing neg-cache entry for recurse.test.ex-MX-xxxx, ttl 3000 r1 router widened recurse.test.ex to recurse.test.ex.test.ex -recurse.test.ex.test.ex in "*"? - list element: * - recurse.test.ex.test.ex in "*"? yes (matched "*") -DNS lookup of recurse.test.ex.test.ex (MX) using fakens -DNS lookup of recurse.test.ex.test.ex (MX) gave NO_DATA -returning DNS_NODATA -faking res_search(MX) response length as 65535 - writing neg-cache entry for recurse.test.ex.test.ex-MX-xxxx, ttl 3000 -recurse.test.ex.test.ex (MX resp) DNSSEC -DNS lookup of recurse.test.ex.test.ex (A) using fakens -DNS lookup of recurse.test.ex.test.ex (A) succeeded -fully qualified name = recurse.test.ex.test.ex -recurse.test.ex.test.ex V4NET.99.0.2 mx=-1 sort=xx +main lookup for domain + check dnssec require list + recurse.test.ex.test.ex in dnssec_require_domains? no (option unset) + check dnssec request list + recurse.test.ex.test.ex in dnssec_request_domains? + list element: * + recurse.test.ex.test.ex in dnssec_request_domains? yes (matched "*") + DNS lookup of recurse.test.ex.test.ex (MX) using fakens + DNS lookup of recurse.test.ex.test.ex (MX) gave NO_DATA + returning DNS_NODATA + faking res_search(MX) response length as 65535 + writing neg-cache entry for recurse.test.ex.test.ex-MX-xxxx, ttl 3000 + recurse.test.ex.test.ex (MX resp) DNSSEC + DNS lookup of recurse.test.ex.test.ex (A) using fakens + DNS lookup of recurse.test.ex.test.ex (A) succeeded + fully qualified name = recurse.test.ex.test.ex + recurse.test.ex.test.ex V4NET.99.0.2 mx=-1 sort=xx domain changed to recurse.test.ex.test.ex rewriting header lines rewrite_one_header: type=F: From: CALLER_NAME re-routed to kilos@recurse.test.ex.test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -144,24 +150,24 @@ routing kilos@recurse.test.ex.test.ex --------> r1 router <-------- local_part=kilos domain=recurse.test.ex.test.ex checking domains -recurse.test.ex.test.ex in "!thishost.test.ex : !recurse.test.ex.test.ex"? +recurse.test.ex.test.ex in domains? list element: !thishost.test.ex list element: !recurse.test.ex.test.ex - recurse.test.ex.test.ex in "!thishost.test.ex : !recurse.test.ex.test.ex"? no (matched "!recurse.test.ex.test.ex") + recurse.test.ex.test.ex in domains? no (matched "!recurse.test.ex.test.ex") r1 router skipped: domains mismatch --------> r2 router <-------- local_part=kilos domain=recurse.test.ex.test.ex checking local_parts -kilos in "miles"? +kilos in local_parts? list element: miles -kilos in "miles"? no (end of list) +kilos in local_parts? no (end of list) r2 router skipped: local_parts mismatch --------> r3 router <-------- local_part=kilos domain=recurse.test.ex.test.ex checking local_parts -kilos in "kilos"? +kilos in local_parts? list element: kilos - kilos in "kilos"? yes (matched "kilos") + kilos in local_parts? yes (matched "kilos") calling r3 router rda_interpret (string): '$local_part@$domain' expanded: 'kilos@recurse.test.ex.test.ex' (tainted) @@ -174,8 +180,6 @@ r3 router generated kilos@recurse.test.ex.test.ex routed by r3 router envelope to: kilos@recurse.test.ex.test.ex transport: - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -191,17 +195,17 @@ routing kilos@recurse.test.ex.test.ex --------> r1 router <-------- local_part=kilos domain=recurse.test.ex.test.ex checking domains -recurse.test.ex.test.ex in "!thishost.test.ex : !recurse.test.ex.test.ex"? +recurse.test.ex.test.ex in domains? list element: !thishost.test.ex list element: !recurse.test.ex.test.ex - recurse.test.ex.test.ex in "!thishost.test.ex : !recurse.test.ex.test.ex"? no (matched "!recurse.test.ex.test.ex") + recurse.test.ex.test.ex in domains? no (matched "!recurse.test.ex.test.ex") r1 router skipped: domains mismatch --------> r2 router <-------- local_part=kilos domain=recurse.test.ex.test.ex checking local_parts -kilos in "miles"? +kilos in local_parts? list element: miles -kilos in "miles"? no (end of list) +kilos in local_parts? no (end of list) r2 router skipped: local_parts mismatch --------> r3 router <-------- r3 router skipped: previously routed kilos@recurse.test.ex.test.ex @@ -228,8 +232,6 @@ After routing: search_tidyup called >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> kilos@recurse.test.ex.test.ex <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -248,6 +250,7 @@ appendfile: mode=600 notify_comsat=0 quota=0 warning=0 locking by lockfile fcntl *** delivery by t2 transport bypassed by -N option search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1236 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling kilos@recurse.test.ex.test.ex/t2 t2 transport returned OK for kilos@recurse.test.ex.test.ex post-process kilos@recurse.test.ex.test.ex (0) diff --git a/test/stderr/0362 b/test/stderr/0362 index 35e64615b..84d28eb82 100644 --- a/test/stderr/0362 +++ b/test/stderr/0362 @@ -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 @@ -80,19 +81,19 @@ routing x@x.test.ex --------> r1 router <-------- local_part=x domain=x.test.ex checking domains -x.test.ex in "+relay_domains"? +x.test.ex in domains? list element: +relay_domains start sublist relay_domains x.test.ex in "a.b.c"? ╎list element: a.b.c x.test.ex in "a.b.c"? no (end of list) end sublist relay_domains -x.test.ex in "+relay_domains"? no (end of list) +x.test.ex in domains? no (end of list) r1 router skipped: domains mismatch --------> r2 router <-------- local_part=x domain=x.test.ex checking domains -x.test.ex in "+local_domains"? +x.test.ex in domains? list element: +local_domains start sublist local_domains x.test.ex in "*.test.ex"? @@ -100,7 +101,7 @@ x.test.ex in "+local_domains"? ╎x.test.ex in "*.test.ex"? yes (matched "*.test.ex") end sublist local_domains data from lookup saved for cache for +local_domains: key 'x.test.ex' value '*.test.ex' - x.test.ex in "+local_domains"? yes (matched "+local_domains") + x.test.ex in domains? yes (matched "+local_domains") calling r2 router r2 router called for x@x.test.ex domain = x.test.ex diff --git a/test/stderr/0364 b/test/stderr/0364 index a09400659..4a3328516 100644 --- a/test/stderr/0364 +++ b/test/stderr/0364 @@ -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 @@ -70,13 +71,16 @@ routing solik@otherhost.test.ex --------> r2 router <-------- local_part=solik domain=otherhost.test.ex checking domains +otherhost.test.ex in domains? yes (end of list) calling r2 router r2 router called for solik@otherhost.test.ex domain = otherhost.test.ex +main lookup for domain r2 router declined for solik@otherhost.test.ex --------> r3 router <-------- local_part=solik domain=otherhost.test.ex checking domains +otherhost.test.ex in domains? yes (end of list) checking "condition" "${if eq{$address_data}{}{no}{yes}}"... processing address_data calling r3 router @@ -96,18 +100,22 @@ routing solik@otherhost.sub.test.ex --------> r2 router <-------- local_part=solik domain=otherhost.sub.test.ex checking domains +otherhost.sub.test.ex in domains? yes (end of list) calling r2 router r2 router called for solik@otherhost.sub.test.ex domain = otherhost.sub.test.ex +main lookup for domain r2 router declined for solik@otherhost.sub.test.ex --------> r3 router <-------- local_part=solik domain=otherhost.sub.test.ex checking domains +otherhost.sub.test.ex in domains? yes (end of list) checking "condition" "${if eq{$address_data}{}{no}{yes}}"... r3 router skipped: condition failure --------> r4 router <-------- local_part=solik domain=otherhost.sub.test.ex checking domains +otherhost.sub.test.ex in domains? yes (end of list) calling r4 router rda_interpret (string): ':fail:Can't route to $domain' expanded: ':fail:Can't route to otherhost.sub.test.ex' (tainted) @@ -138,9 +146,11 @@ routing xxx@ten-1.test.ex --------> r2 router <-------- local_part=xxx domain=ten-1.test.ex checking domains +ten-1.test.ex in domains? yes (end of list) calling r2 router r2 router called for xxx@ten-1.test.ex domain = ten-1.test.ex +main lookup for domain set transport t1 queued for t1 transport: local_part = xxx domain = ten-1.test.ex @@ -173,13 +183,16 @@ routing xxx@testsub.test.ex --------> r2 router <-------- local_part=xxx domain=testsub.test.ex checking domains +testsub.test.ex in domains? yes (end of list) calling r2 router r2 router called for xxx@testsub.test.ex domain = testsub.test.ex +main lookup for domain r2 router declined for xxx@testsub.test.ex --------> r3 router <-------- local_part=xxx domain=testsub.test.ex checking domains +testsub.test.ex in domains? yes (end of list) checking "condition" "${if eq{$address_data}{}{no}{yes}}"... processing address_data calling r3 router @@ -199,9 +212,11 @@ routing xxx@testsub.sub.test.ex --------> r2 router <-------- local_part=xxx domain=testsub.sub.test.ex checking domains +testsub.sub.test.ex in domains? yes (end of list) calling r2 router r2 router called for xxx@testsub.sub.test.ex domain = testsub.sub.test.ex +main lookup for domain queued for t1 transport: local_part = xxx domain = testsub.sub.test.ex errors_to=NULL diff --git a/test/stderr/0368 b/test/stderr/0368 index 0d3ccb719..e67722e26 100644 --- a/test/stderr/0368 +++ b/test/stderr/0368 @@ -1,29 +1,42 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config admin user dropping to exim gid; retaining priv uid -discarded duplicate host ten-1.test.ex (MX=8) -fully qualified name = mxt9.test.ex -host_find_bydns yield = HOST_FOUND (3); returned hosts: - ten-1.test.ex V4NET.0.0.1 MX=5 - ten-2.test.ex V4NET.0.0.2 MX=6 - ten-3.test.ex V4NET.0.0.3 MX=7 +mxt9.test.ex in domains? no (end of list) + check dnssec require list + check dnssec request list + discarded duplicate host ten-1.test.ex (MX=8) + fully qualified name = mxt9.test.ex + host_find_bydns yield = HOST_FOUND (3); returned hosts: + ten-1.test.ex V4NET.0.0.1 MX=5 + ten-2.test.ex V4NET.0.0.2 MX=6 + ten-3.test.ex V4NET.0.0.3 MX=7 +mxt14.test.ex in domains? no (end of list) + check dnssec require list + check dnssec request list duplicate IP address V4NET.0.0.5 (MX=5) removed duplicate IP address V4NET.0.0.6 (MX=6) removed -fully qualified name = mxt14.test.ex -host_find_bydns yield = HOST_FOUND (3); returned hosts: - ten-5-6.test.ex V4NET.0.0.5 MX=4 - ten-5-6.test.ex V4NET.0.0.6 MX=4 + fully qualified name = mxt14.test.ex + host_find_bydns yield = HOST_FOUND (3); returned hosts: + ten-5-6.test.ex V4NET.0.0.5 MX=4 + ten-5-6.test.ex V4NET.0.0.6 MX=4 finding IP address for ten-1.test.ex doing DNS lookup +check dnssec require list +check dnssec request list fully qualified name = ten-1.test.ex ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx finding IP address for ten-1.test.ex doing DNS lookup +check dnssec require list +check dnssec request list fully qualified name = ten-1.test.ex ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx finding IP address for ten-2.test.ex doing DNS lookup +check dnssec require list +check dnssec request list fully qualified name = ten-2.test.ex ten-2.test.ex V4NET.0.0.2 mx=-1 sort=xx >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0370 b/test/stderr/0370 index c2de395fa..5b619f8f6 100644 --- a/test/stderr/0370 +++ b/test/stderr/0370 @@ -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 @@ -27,6 +29,7 @@ writing data block fd=dddd size=sss timeout=3600 writing error EEE: Broken pipe transport error EPIPE ignored t1 transport yielded 0 +>>>>>>>>>>>>>>>> Exim pid=p1236 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> t1 transport returned OK for |TESTSUITE/bin/iefbr14 LOG: MAIN => |TESTSUITE/bin/iefbr14 R=r1 T=t1 diff --git a/test/stderr/0371 b/test/stderr/0371 index 9105d6473..6795f8dac 100644 --- a/test/stderr/0371 +++ b/test/stderr/0371 @@ -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 @@ -38,6 +39,8 @@ something in helo_lookup_domains? no (end of list) sender_fullhost = (something) [V4NET.0.0.0] sender_rcvhost = [V4NET.0.0.0] (helo=something) set_process_info: pppp handling incoming connection from (something) [V4NET.0.0.0] + list element: * + host in limits_advertise_hosts? yes (matched "*") host in dsn_advertise_hosts? no (option unset) host in pipelining_advertise_hosts? list element: * @@ -46,6 +49,7 @@ host in chunking_advertise_hosts? host in chunking_advertise_hosts? no (end of list) SMTP>> 250-mail.test.ex Hello something [V4NET.0.0.0] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-VRFY 250-PIPELINING @@ -82,8 +86,8 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers search_tidyup called >>Headers after rewriting and local additions: diff --git a/test/stderr/0374 b/test/stderr/0374 index dc55b780a..3c8f9d6d8 100644 --- a/test/stderr/0374 +++ b/test/stderr/0374 @@ -1,15 +1,16 @@ 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 dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: a1@myhost.test.ex @@ -40,14 +41,17 @@ routing d3@myhost.test.ex --------> u1 router <-------- local_part=d3 domain=myhost.test.ex checking local_parts +d3 in local_parts? no (end of list) u1 router skipped: local_parts mismatch --------> ut2 router <-------- local_part=d3 domain=myhost.test.ex checking local_parts +d3 in local_parts? no (end of list) ut2 router skipped: local_parts mismatch --------> ut3 router <-------- local_part=d3 domain=myhost.test.ex checking local_parts +d3 in local_parts? no (end of list) ut3 router skipped: local_parts mismatch --------> ut4 router <-------- local_part=d3 domain=myhost.test.ex @@ -69,14 +73,17 @@ routing d2@myhost.test.ex --------> u1 router <-------- local_part=d2 domain=myhost.test.ex checking local_parts +d2 in local_parts? no (end of list) u1 router skipped: local_parts mismatch --------> ut2 router <-------- local_part=d2 domain=myhost.test.ex checking local_parts +d2 in local_parts? no (end of list) ut2 router skipped: local_parts mismatch --------> ut3 router <-------- local_part=d2 domain=myhost.test.ex checking local_parts +d2 in local_parts? no (end of list) ut3 router skipped: local_parts mismatch --------> ut4 router <-------- local_part=d2 domain=myhost.test.ex @@ -97,14 +104,17 @@ routing d1@myhost.test.ex --------> u1 router <-------- local_part=d1 domain=myhost.test.ex checking local_parts +d1 in local_parts? no (end of list) u1 router skipped: local_parts mismatch --------> ut2 router <-------- local_part=d1 domain=myhost.test.ex checking local_parts +d1 in local_parts? no (end of list) ut2 router skipped: local_parts mismatch --------> ut3 router <-------- local_part=d1 domain=myhost.test.ex checking local_parts +d1 in local_parts? no (end of list) ut3 router skipped: local_parts mismatch --------> ut4 router <-------- local_part=d1 domain=myhost.test.ex @@ -125,10 +135,12 @@ routing c1@myhost.test.ex --------> u1 router <-------- local_part=c1 domain=myhost.test.ex checking local_parts +c1 in local_parts? no (end of list) u1 router skipped: local_parts mismatch --------> ut2 router <-------- local_part=c1 domain=myhost.test.ex checking local_parts +c1 in local_parts? no (end of list) ut2 router skipped: local_parts mismatch --------> ut3 router <-------- local_part=c1 domain=myhost.test.ex @@ -150,6 +162,7 @@ routing b1@myhost.test.ex --------> u1 router <-------- local_part=b1 domain=myhost.test.ex checking local_parts +b1 in local_parts? no (end of list) u1 router skipped: local_parts mismatch --------> ut2 router <-------- local_part=b1 domain=myhost.test.ex @@ -183,7 +196,6 @@ routed by u1 router (unseen) envelope to: a1@myhost.test.ex transport: ut1 "unseen" set: replicated a1@myhost.test.ex -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: a1@myhost.test.ex @@ -257,6 +269,7 @@ routing c1@myhost.test.ex --------> ut4 router <-------- local_part=c1 domain=myhost.test.ex checking local_parts +c1 in local_parts? no (end of list) ut4 router skipped: local_parts mismatch --------> real router <-------- local_part=c1 domain=myhost.test.ex @@ -275,10 +288,12 @@ routing b1@myhost.test.ex --------> ut3 router <-------- local_part=b1 domain=myhost.test.ex checking local_parts +b1 in local_parts? no (end of list) ut3 router skipped: local_parts mismatch --------> ut4 router <-------- local_part=b1 domain=myhost.test.ex checking local_parts +b1 in local_parts? no (end of list) ut4 router skipped: local_parts mismatch --------> real router <-------- local_part=b1 domain=myhost.test.ex @@ -297,14 +312,17 @@ routing a1@myhost.test.ex --------> ut2 router <-------- local_part=a1 domain=myhost.test.ex checking local_parts +a1 in local_parts? no (end of list) ut2 router skipped: local_parts mismatch --------> ut3 router <-------- local_part=a1 domain=myhost.test.ex checking local_parts +a1 in local_parts? no (end of list) ut3 router skipped: local_parts mismatch --------> ut4 router <-------- local_part=a1 domain=myhost.test.ex checking local_parts +a1 in local_parts? no (end of list) ut4 router skipped: local_parts mismatch --------> real router <-------- local_part=a1 domain=myhost.test.ex @@ -336,62 +354,60 @@ After routing: d3@myhost.test.ex Failed addresses: Deferred addresses: -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1237 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => a1 R=real T=real -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1238 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => b1 R=real T=real -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1239 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => c1 R=real T=real -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1240 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => d1 R=real T=real -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1241 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => d2 R=real T=real -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1242 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => d3 R=real T=real -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1243 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => a1 R=u1 T=ut1 -locking TESTSUITE/spool/db/retry.lockfile transport error EPIPE ignored +>>>>>>>>>>>>>>>> Exim pid=p1244 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN ** b1@myhost.test.ex R=ut2 T=ut2: Child process of ut2 transport returned 127 (could mean unable to exec or command does not exist) from command: /non/existent/file -locking TESTSUITE/spool/db/retry.lockfile transport error EPIPE ignored +>>>>>>>>>>>>>>>> Exim pid=p1245 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN == c1@myhost.test.ex R=ut3 T=ut3 defer (0): Child process of ut3 transport returned 127 (could mean unable to exec or command does not exist) from command: /non/existent/file -locking TESTSUITE/spool/db/retry.lockfile -locking TESTSUITE/spool/db/wait-ut4.lockfile cmdlog: '220' +>>>>>>>>>>>>>>>> Exim pid=p1246 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => d1@myhost.test.ex R=ut4 T=ut4 H=127.0.0.1 [127.0.0.1] C="250 OK" -locking TESTSUITE/spool/db/retry.lockfile cmdlog: '220' +>>>>>>>>>>>>>>>> Exim pid=p1247 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN == d2@myhost.test.ex R=ut4 T=ut4 defer (-44) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 450 soft error -locking TESTSUITE/spool/db/retry.lockfile -locking TESTSUITE/spool/db/wait-ut4.lockfile cmdlog: '220' +>>>>>>>>>>>>>>>> Exim pid=p1248 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> 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:: 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 dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: CALLER@myhost.test.ex unique = CALLER@myhost.test.ex @@ -401,18 +417,22 @@ routing CALLER@myhost.test.ex --------> u1 router <-------- local_part=CALLER domain=myhost.test.ex checking local_parts +CALLER in local_parts? no (end of list) u1 router skipped: local_parts mismatch --------> ut2 router <-------- local_part=CALLER domain=myhost.test.ex checking local_parts +CALLER in local_parts? no (end of list) ut2 router skipped: local_parts mismatch --------> ut3 router <-------- local_part=CALLER domain=myhost.test.ex checking local_parts +CALLER in local_parts? no (end of list) ut3 router skipped: local_parts mismatch --------> ut4 router <-------- local_part=CALLER domain=myhost.test.ex checking local_parts +CALLER in local_parts? no (end of list) ut4 router skipped: local_parts mismatch --------> real router <-------- local_part=CALLER domain=myhost.test.ex @@ -434,12 +454,12 @@ After routing: Remote deliveries: Failed addresses: Deferred addresses: -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1251 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => CALLER R=real T=real LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1238 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1237 (bounce-message) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1250 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1249 (bounce-message) terminating with rc=0 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Exim pid=p1236 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0375 b/test/stderr/0375 index 138e9ecc9..e6a7b9402 100644 --- a/test/stderr/0375 +++ b/test/stderr/0375 @@ -1,15 +1,16 @@ 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 dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: a1@myhost.test.ex @@ -60,26 +61,32 @@ routing g1@myhost.test.ex --------> u1 router <-------- local_part=g1 domain=myhost.test.ex checking local_parts +g1 in local_parts? no (end of list) u1 router skipped: local_parts mismatch --------> ut2 router <-------- local_part=g1 domain=myhost.test.ex checking local_parts +g1 in local_parts? no (end of list) ut2 router skipped: local_parts mismatch --------> ut3 router <-------- local_part=g1 domain=myhost.test.ex checking local_parts +g1 in local_parts? no (end of list) ut3 router skipped: local_parts mismatch --------> ut4 router <-------- local_part=g1 domain=myhost.test.ex checking local_parts +g1 in local_parts? no (end of list) ut4 router skipped: local_parts mismatch --------> ut5 router <-------- local_part=g1 domain=myhost.test.ex checking local_parts +g1 in local_parts? no (end of list) ut5 router skipped: local_parts mismatch --------> ut6 router <-------- local_part=g1 domain=myhost.test.ex checking local_parts +g1 in local_parts? no (end of list) ut6 router skipped: local_parts mismatch --------> ut7 router <-------- local_part=g1 domain=myhost.test.ex @@ -93,22 +100,27 @@ routing f3@myhost.test.ex --------> u1 router <-------- local_part=f3 domain=myhost.test.ex checking local_parts +f3 in local_parts? no (end of list) u1 router skipped: local_parts mismatch --------> ut2 router <-------- local_part=f3 domain=myhost.test.ex checking local_parts +f3 in local_parts? no (end of list) ut2 router skipped: local_parts mismatch --------> ut3 router <-------- local_part=f3 domain=myhost.test.ex checking local_parts +f3 in local_parts? no (end of list) ut3 router skipped: local_parts mismatch --------> ut4 router <-------- local_part=f3 domain=myhost.test.ex checking local_parts +f3 in local_parts? no (end of list) ut4 router skipped: local_parts mismatch --------> ut5 router <-------- local_part=f3 domain=myhost.test.ex checking local_parts +f3 in local_parts? no (end of list) ut5 router skipped: local_parts mismatch --------> ut6 router <-------- local_part=f3 domain=myhost.test.ex @@ -132,22 +144,27 @@ routing f2@myhost.test.ex --------> u1 router <-------- local_part=f2 domain=myhost.test.ex checking local_parts +f2 in local_parts? no (end of list) u1 router skipped: local_parts mismatch --------> ut2 router <-------- local_part=f2 domain=myhost.test.ex checking local_parts +f2 in local_parts? no (end of list) ut2 router skipped: local_parts mismatch --------> ut3 router <-------- local_part=f2 domain=myhost.test.ex checking local_parts +f2 in local_parts? no (end of list) ut3 router skipped: local_parts mismatch --------> ut4 router <-------- local_part=f2 domain=myhost.test.ex checking local_parts +f2 in local_parts? no (end of list) ut4 router skipped: local_parts mismatch --------> ut5 router <-------- local_part=f2 domain=myhost.test.ex checking local_parts +f2 in local_parts? no (end of list) ut5 router skipped: local_parts mismatch --------> ut6 router <-------- local_part=f2 domain=myhost.test.ex @@ -170,22 +187,27 @@ routing f1@myhost.test.ex --------> u1 router <-------- local_part=f1 domain=myhost.test.ex checking local_parts +f1 in local_parts? no (end of list) u1 router skipped: local_parts mismatch --------> ut2 router <-------- local_part=f1 domain=myhost.test.ex checking local_parts +f1 in local_parts? no (end of list) ut2 router skipped: local_parts mismatch --------> ut3 router <-------- local_part=f1 domain=myhost.test.ex checking local_parts +f1 in local_parts? no (end of list) ut3 router skipped: local_parts mismatch --------> ut4 router <-------- local_part=f1 domain=myhost.test.ex checking local_parts +f1 in local_parts? no (end of list) ut4 router skipped: local_parts mismatch --------> ut5 router <-------- local_part=f1 domain=myhost.test.ex checking local_parts +f1 in local_parts? no (end of list) ut5 router skipped: local_parts mismatch --------> ut6 router <-------- local_part=f1 domain=myhost.test.ex @@ -208,18 +230,22 @@ routing e1@myhost.test.ex --------> u1 router <-------- local_part=e1 domain=myhost.test.ex checking local_parts +e1 in local_parts? no (end of list) u1 router skipped: local_parts mismatch --------> ut2 router <-------- local_part=e1 domain=myhost.test.ex checking local_parts +e1 in local_parts? no (end of list) ut2 router skipped: local_parts mismatch --------> ut3 router <-------- local_part=e1 domain=myhost.test.ex checking local_parts +e1 in local_parts? no (end of list) ut3 router skipped: local_parts mismatch --------> ut4 router <-------- local_part=e1 domain=myhost.test.ex checking local_parts +e1 in local_parts? no (end of list) ut4 router skipped: local_parts mismatch --------> ut5 router <-------- local_part=e1 domain=myhost.test.ex @@ -241,14 +267,17 @@ routing d3@myhost.test.ex --------> u1 router <-------- local_part=d3 domain=myhost.test.ex checking local_parts +d3 in local_parts? no (end of list) u1 router skipped: local_parts mismatch --------> ut2 router <-------- local_part=d3 domain=myhost.test.ex checking local_parts +d3 in local_parts? no (end of list) ut2 router skipped: local_parts mismatch --------> ut3 router <-------- local_part=d3 domain=myhost.test.ex checking local_parts +d3 in local_parts? no (end of list) ut3 router skipped: local_parts mismatch --------> ut4 router <-------- local_part=d3 domain=myhost.test.ex @@ -271,14 +300,17 @@ routing d2@myhost.test.ex --------> u1 router <-------- local_part=d2 domain=myhost.test.ex checking local_parts +d2 in local_parts? no (end of list) u1 router skipped: local_parts mismatch --------> ut2 router <-------- local_part=d2 domain=myhost.test.ex checking local_parts +d2 in local_parts? no (end of list) ut2 router skipped: local_parts mismatch --------> ut3 router <-------- local_part=d2 domain=myhost.test.ex checking local_parts +d2 in local_parts? no (end of list) ut3 router skipped: local_parts mismatch --------> ut4 router <-------- local_part=d2 domain=myhost.test.ex @@ -300,14 +332,17 @@ routing d1@myhost.test.ex --------> u1 router <-------- local_part=d1 domain=myhost.test.ex checking local_parts +d1 in local_parts? no (end of list) u1 router skipped: local_parts mismatch --------> ut2 router <-------- local_part=d1 domain=myhost.test.ex checking local_parts +d1 in local_parts? no (end of list) ut2 router skipped: local_parts mismatch --------> ut3 router <-------- local_part=d1 domain=myhost.test.ex checking local_parts +d1 in local_parts? no (end of list) ut3 router skipped: local_parts mismatch --------> ut4 router <-------- local_part=d1 domain=myhost.test.ex @@ -329,10 +364,12 @@ routing c1@myhost.test.ex --------> u1 router <-------- local_part=c1 domain=myhost.test.ex checking local_parts +c1 in local_parts? no (end of list) u1 router skipped: local_parts mismatch --------> ut2 router <-------- local_part=c1 domain=myhost.test.ex checking local_parts +c1 in local_parts? no (end of list) ut2 router skipped: local_parts mismatch --------> ut3 router <-------- local_part=c1 domain=myhost.test.ex @@ -355,6 +392,7 @@ routing b1@myhost.test.ex --------> u1 router <-------- local_part=b1 domain=myhost.test.ex checking local_parts +b1 in local_parts? no (end of list) u1 router skipped: local_parts mismatch --------> ut2 router <-------- local_part=b1 domain=myhost.test.ex @@ -390,7 +428,6 @@ routed by u1 router (unseen) transport: ut1 errors to "unseen" set: replicated a1@myhost.test.ex -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: a1@myhost.test.ex @@ -437,10 +474,12 @@ routing f3@myhost.test.ex --------> ut7 router <-------- local_part=f3 domain=myhost.test.ex checking local_parts +f3 in local_parts? no (end of list) ut7 router skipped: local_parts mismatch --------> ut8 router <-------- local_part=f3 domain=myhost.test.ex checking local_parts +f3 in local_parts? no (end of list) ut8 router skipped: local_parts mismatch --------> real router <-------- local_part=f3 domain=myhost.test.ex @@ -460,10 +499,12 @@ routing f2@myhost.test.ex --------> ut7 router <-------- local_part=f2 domain=myhost.test.ex checking local_parts +f2 in local_parts? no (end of list) ut7 router skipped: local_parts mismatch --------> ut8 router <-------- local_part=f2 domain=myhost.test.ex checking local_parts +f2 in local_parts? no (end of list) ut8 router skipped: local_parts mismatch --------> real router <-------- local_part=f2 domain=myhost.test.ex @@ -482,10 +523,12 @@ routing f1@myhost.test.ex --------> ut7 router <-------- local_part=f1 domain=myhost.test.ex checking local_parts +f1 in local_parts? no (end of list) ut7 router skipped: local_parts mismatch --------> ut8 router <-------- local_part=f1 domain=myhost.test.ex checking local_parts +f1 in local_parts? no (end of list) ut8 router skipped: local_parts mismatch --------> real router <-------- local_part=f1 domain=myhost.test.ex @@ -504,14 +547,17 @@ routing e1@myhost.test.ex --------> ut6 router <-------- local_part=e1 domain=myhost.test.ex checking local_parts +e1 in local_parts? no (end of list) ut6 router skipped: local_parts mismatch --------> ut7 router <-------- local_part=e1 domain=myhost.test.ex checking local_parts +e1 in local_parts? no (end of list) ut7 router skipped: local_parts mismatch --------> ut8 router <-------- local_part=e1 domain=myhost.test.ex checking local_parts +e1 in local_parts? no (end of list) ut8 router skipped: local_parts mismatch --------> real router <-------- local_part=e1 domain=myhost.test.ex @@ -530,18 +576,22 @@ routing d3@myhost.test.ex --------> ut5 router <-------- local_part=d3 domain=myhost.test.ex checking local_parts +d3 in local_parts? no (end of list) ut5 router skipped: local_parts mismatch --------> ut6 router <-------- local_part=d3 domain=myhost.test.ex checking local_parts +d3 in local_parts? no (end of list) ut6 router skipped: local_parts mismatch --------> ut7 router <-------- local_part=d3 domain=myhost.test.ex checking local_parts +d3 in local_parts? no (end of list) ut7 router skipped: local_parts mismatch --------> ut8 router <-------- local_part=d3 domain=myhost.test.ex checking local_parts +d3 in local_parts? no (end of list) ut8 router skipped: local_parts mismatch --------> real router <-------- local_part=d3 domain=myhost.test.ex @@ -560,18 +610,22 @@ routing d2@myhost.test.ex --------> ut5 router <-------- local_part=d2 domain=myhost.test.ex checking local_parts +d2 in local_parts? no (end of list) ut5 router skipped: local_parts mismatch --------> ut6 router <-------- local_part=d2 domain=myhost.test.ex checking local_parts +d2 in local_parts? no (end of list) ut6 router skipped: local_parts mismatch --------> ut7 router <-------- local_part=d2 domain=myhost.test.ex checking local_parts +d2 in local_parts? no (end of list) ut7 router skipped: local_parts mismatch --------> ut8 router <-------- local_part=d2 domain=myhost.test.ex checking local_parts +d2 in local_parts? no (end of list) ut8 router skipped: local_parts mismatch --------> real router <-------- local_part=d2 domain=myhost.test.ex @@ -590,18 +644,22 @@ routing d1@myhost.test.ex --------> ut5 router <-------- local_part=d1 domain=myhost.test.ex checking local_parts +d1 in local_parts? no (end of list) ut5 router skipped: local_parts mismatch --------> ut6 router <-------- local_part=d1 domain=myhost.test.ex checking local_parts +d1 in local_parts? no (end of list) ut6 router skipped: local_parts mismatch --------> ut7 router <-------- local_part=d1 domain=myhost.test.ex checking local_parts +d1 in local_parts? no (end of list) ut7 router skipped: local_parts mismatch --------> ut8 router <-------- local_part=d1 domain=myhost.test.ex checking local_parts +d1 in local_parts? no (end of list) ut8 router skipped: local_parts mismatch --------> real router <-------- local_part=d1 domain=myhost.test.ex @@ -620,22 +678,27 @@ routing c1@myhost.test.ex --------> ut4 router <-------- local_part=c1 domain=myhost.test.ex checking local_parts +c1 in local_parts? no (end of list) ut4 router skipped: local_parts mismatch --------> ut5 router <-------- local_part=c1 domain=myhost.test.ex checking local_parts +c1 in local_parts? no (end of list) ut5 router skipped: local_parts mismatch --------> ut6 router <-------- local_part=c1 domain=myhost.test.ex checking local_parts +c1 in local_parts? no (end of list) ut6 router skipped: local_parts mismatch --------> ut7 router <-------- local_part=c1 domain=myhost.test.ex checking local_parts +c1 in local_parts? no (end of list) ut7 router skipped: local_parts mismatch --------> ut8 router <-------- local_part=c1 domain=myhost.test.ex checking local_parts +c1 in local_parts? no (end of list) ut8 router skipped: local_parts mismatch --------> real router <-------- local_part=c1 domain=myhost.test.ex @@ -654,26 +717,32 @@ routing b1@myhost.test.ex --------> ut3 router <-------- local_part=b1 domain=myhost.test.ex checking local_parts +b1 in local_parts? no (end of list) ut3 router skipped: local_parts mismatch --------> ut4 router <-------- local_part=b1 domain=myhost.test.ex checking local_parts +b1 in local_parts? no (end of list) ut4 router skipped: local_parts mismatch --------> ut5 router <-------- local_part=b1 domain=myhost.test.ex checking local_parts +b1 in local_parts? no (end of list) ut5 router skipped: local_parts mismatch --------> ut6 router <-------- local_part=b1 domain=myhost.test.ex checking local_parts +b1 in local_parts? no (end of list) ut6 router skipped: local_parts mismatch --------> ut7 router <-------- local_part=b1 domain=myhost.test.ex checking local_parts +b1 in local_parts? no (end of list) ut7 router skipped: local_parts mismatch --------> ut8 router <-------- local_part=b1 domain=myhost.test.ex checking local_parts +b1 in local_parts? no (end of list) ut8 router skipped: local_parts mismatch --------> real router <-------- local_part=b1 domain=myhost.test.ex @@ -692,30 +761,37 @@ routing a1@myhost.test.ex --------> ut2 router <-------- local_part=a1 domain=myhost.test.ex checking local_parts +a1 in local_parts? no (end of list) ut2 router skipped: local_parts mismatch --------> ut3 router <-------- local_part=a1 domain=myhost.test.ex checking local_parts +a1 in local_parts? no (end of list) ut3 router skipped: local_parts mismatch --------> ut4 router <-------- local_part=a1 domain=myhost.test.ex checking local_parts +a1 in local_parts? no (end of list) ut4 router skipped: local_parts mismatch --------> ut5 router <-------- local_part=a1 domain=myhost.test.ex checking local_parts +a1 in local_parts? no (end of list) ut5 router skipped: local_parts mismatch --------> ut6 router <-------- local_part=a1 domain=myhost.test.ex checking local_parts +a1 in local_parts? no (end of list) ut6 router skipped: local_parts mismatch --------> ut7 router <-------- local_part=a1 domain=myhost.test.ex checking local_parts +a1 in local_parts? no (end of list) ut7 router skipped: local_parts mismatch --------> ut8 router <-------- local_part=a1 domain=myhost.test.ex checking local_parts +a1 in local_parts? no (end of list) ut8 router skipped: local_parts mismatch --------> real router <-------- local_part=a1 domain=myhost.test.ex @@ -756,106 +832,101 @@ After routing: Failed addresses: Deferred addresses: g1@myhost.test.ex -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1237 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => a1 P= R=real T=real -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1238 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => b1 P= R=real T=real -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1239 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => c1 P= R=real T=real -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1240 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => d1 P= R=real T=real -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1241 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => d2 P= R=real T=real -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1242 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => d3 P= R=real T=real -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1243 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => e1 P= R=real T=real -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1244 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => f1 P= R=real T=real -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1245 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => f2 P= R=real T=real -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1246 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => f3 P= R=real T=real -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1247 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => a1 P=<> R=u1 T=ut1 log writing disabled -locking TESTSUITE/spool/db/retry.lockfile transport error EPIPE ignored +>>>>>>>>>>>>>>>> Exim pid=p1248 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN ** b1@myhost.test.ex P=<> R=ut2 T=ut2: Child process of ut2 transport returned 127 (could mean unable to exec or command does not exist) from command: /non/existent/file log writing disabled -locking TESTSUITE/spool/db/retry.lockfile transport error EPIPE ignored +>>>>>>>>>>>>>>>> Exim pid=p1249 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN == c1@myhost.test.ex R=ut3 T=ut3 defer (0): Child process of ut3 transport returned 127 (could mean unable to exec or command does not exist) from command: /non/existent/file log writing disabled -locking TESTSUITE/spool/db/retry.lockfile -locking TESTSUITE/spool/db/wait-ut4.lockfile cmdlog: '220' +>>>>>>>>>>>>>>>> Exim pid=p1250 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => d1@myhost.test.ex P=<> R=ut4 T=ut4 H=127.0.0.1 [127.0.0.1] C="250 OK" log writing disabled -locking TESTSUITE/spool/db/retry.lockfile cmdlog: '220' +>>>>>>>>>>>>>>>> Exim pid=p1251 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN == d2@myhost.test.ex R=ut4 T=ut4 defer (-44) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 450 soft error log writing disabled -locking TESTSUITE/spool/db/retry.lockfile -locking TESTSUITE/spool/db/wait-ut4.lockfile cmdlog: '220' +>>>>>>>>>>>>>>>> Exim pid=p1252 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN ** d3@myhost.test.ex P=<> R=ut4 T=ut4 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 550 hard error log writing disabled -locking TESTSUITE/spool/db/retry.lockfile -locking TESTSUITE/spool/db/wait-ut5.lockfile cmdlog: '220' +>>>>>>>>>>>>>>>> Exim pid=p1253 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN ** e1@myhost.test.ex P=<> R=ut5 T=ut5 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 550 hard error log writing disabled -locking TESTSUITE/spool/db/retry.lockfile -locking TESTSUITE/spool/db/wait-ut6.lockfile cmdlog: '220' +>>>>>>>>>>>>>>>> Exim pid=p1254 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => f1@myhost.test.ex P= R=ut6 T=ut6 H=127.0.0.1 [127.0.0.1] C="250 OK" log writing disabled -locking TESTSUITE/spool/db/retry.lockfile cmdlog: '220' +>>>>>>>>>>>>>>>> Exim pid=p1255 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN == f2@myhost.test.ex R=ut6 T=ut6 defer (-44) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 450 soft error log writing disabled -locking TESTSUITE/spool/db/retry.lockfile -locking TESTSUITE/spool/db/wait-ut6.lockfile cmdlog: '220' +>>>>>>>>>>>>>>>> Exim pid=p1256 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN ** f3@myhost.test.ex P= R=ut6 T=ut6 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 550 hard error log writing disabled -locking TESTSUITE/spool/db/retry.lockfile LOG: MAIN 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 dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: CALLER@myhost.test.ex unique = CALLER@myhost.test.ex @@ -865,34 +936,42 @@ routing CALLER@myhost.test.ex --------> u1 router <-------- local_part=CALLER domain=myhost.test.ex checking local_parts +CALLER in local_parts? no (end of list) u1 router skipped: local_parts mismatch --------> ut2 router <-------- local_part=CALLER domain=myhost.test.ex checking local_parts +CALLER in local_parts? no (end of list) ut2 router skipped: local_parts mismatch --------> ut3 router <-------- local_part=CALLER domain=myhost.test.ex checking local_parts +CALLER in local_parts? no (end of list) ut3 router skipped: local_parts mismatch --------> ut4 router <-------- local_part=CALLER domain=myhost.test.ex checking local_parts +CALLER in local_parts? no (end of list) ut4 router skipped: local_parts mismatch --------> ut5 router <-------- local_part=CALLER domain=myhost.test.ex checking local_parts +CALLER in local_parts? no (end of list) ut5 router skipped: local_parts mismatch --------> ut6 router <-------- local_part=CALLER domain=myhost.test.ex checking local_parts +CALLER in local_parts? no (end of list) ut6 router skipped: local_parts mismatch --------> ut7 router <-------- local_part=CALLER domain=myhost.test.ex checking local_parts +CALLER in local_parts? no (end of list) ut7 router skipped: local_parts mismatch --------> ut8 router <-------- local_part=CALLER domain=myhost.test.ex checking local_parts +CALLER in local_parts? no (end of list) ut8 router skipped: local_parts mismatch --------> real router <-------- local_part=CALLER domain=myhost.test.ex @@ -914,13 +993,13 @@ After routing: Remote deliveries: Failed addresses: Deferred addresses: -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1259 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => CALLER P=<> R=real T=real LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1238 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1237 (bounce-message) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1258 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1257 (bounce-message) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN d3@myhost.test.ex : error ignored log writing disabled @@ -930,16 +1009,17 @@ 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 dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: h1@myhost.test.ex unique = h1@myhost.test.ex @@ -949,30 +1029,37 @@ routing h1@myhost.test.ex --------> u1 router <-------- local_part=h1 domain=myhost.test.ex checking local_parts +h1 in local_parts? no (end of list) u1 router skipped: local_parts mismatch --------> ut2 router <-------- local_part=h1 domain=myhost.test.ex checking local_parts +h1 in local_parts? no (end of list) ut2 router skipped: local_parts mismatch --------> ut3 router <-------- local_part=h1 domain=myhost.test.ex checking local_parts +h1 in local_parts? no (end of list) ut3 router skipped: local_parts mismatch --------> ut4 router <-------- local_part=h1 domain=myhost.test.ex checking local_parts +h1 in local_parts? no (end of list) ut4 router skipped: local_parts mismatch --------> ut5 router <-------- local_part=h1 domain=myhost.test.ex checking local_parts +h1 in local_parts? no (end of list) ut5 router skipped: local_parts mismatch --------> ut6 router <-------- local_part=h1 domain=myhost.test.ex checking local_parts +h1 in local_parts? no (end of list) ut6 router skipped: local_parts mismatch --------> ut7 router <-------- local_part=h1 domain=myhost.test.ex checking local_parts +h1 in local_parts? no (end of list) ut7 router skipped: local_parts mismatch --------> ut8 router <-------- local_part=h1 domain=myhost.test.ex @@ -990,7 +1077,6 @@ routed by ut8 router (unseen) envelope to: h1@myhost.test.ex transport: ut1 "unseen" set: replicated h1@myhost.test.ex -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: h1@myhost.test.ex unique = \0\h1@myhost.test.ex @@ -1018,14 +1104,14 @@ After routing: Remote deliveries: Failed addresses: Deferred addresses: -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1262 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => h1 P= R=real T=real -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1263 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => h1 P= R=ut8 T=ut1 log writing disabled LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1240 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1239 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1261 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1260 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0376 b/test/stderr/0376 index c8cd1b9da..9ef0c67a3 100644 --- a/test/stderr/0376 +++ b/test/stderr/0376 @@ -1,9 +1,11 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config trusted user admin user LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@localhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -12,7 +14,8 @@ Attempting full verification using callout callout cache: no domain record found for localhost callout cache: no address record found for ok@localhost interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -27,15 +30,25 @@ cmdlog: '220:EHLO:250:MAIL:250:RCPT:250:QUIT:250' wrote callout cache domain record for localhost: result=1 postmaster=0 random=0 wrote positive callout cache address record for ok@localhost +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@localhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -44,15 +57,25 @@ Attempting full verification using callout callout cache: found domain record for localhost callout cache: found address record for ok@localhost callout cache: address record is positive +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@localhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -61,7 +84,8 @@ Attempting full verification using callout callout cache: found domain record for localhost callout cache: address record expired for ok@localhost interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... + failed: Connection refused LOG: MAIN REJECT H=(test) [V4NET.0.0.1] U=root sender verify defer for : Could not complete sender verify callout: 127.0.0.1 [127.0.0.1] : Connection refused created log directory TESTSUITE/spool/log @@ -71,11 +95,13 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying bad@localhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -84,7 +110,8 @@ Attempting full verification using callout callout cache: found domain record for localhost callout cache: no address record found for bad@localhost interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -107,11 +134,13 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying bad@localhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -128,11 +157,13 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@localhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -141,7 +172,8 @@ Attempting full verification using callout callout cache: found domain record for localhost callout cache: address record expired for ok@localhost interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -161,11 +193,13 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@localhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -181,11 +215,14 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -194,7 +231,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost callout cache: no address record found for ok@otherhost interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -224,11 +262,14 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -244,11 +285,14 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost2 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -257,7 +301,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost2 callout cache: no address record found for ok@otherhost2 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -279,15 +324,25 @@ cmdlog: '220:EHLO:250:MAIL:250:RCPT:250:RSET:250:MAIL:250:RCPT:250:QUIT:250' wrote callout cache domain record for otherhost2: result=1 postmaster=1 random=0 wrote positive callout cache address record for ok@otherhost2 +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost2 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -297,15 +352,26 @@ callout cache: found domain record for otherhost2 callout cache: domain accepts RCPT TO: callout cache: found address record for ok@otherhost2 callout cache: address record is positive +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost3 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -314,7 +380,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost3 callout cache: no address record found for ok@otherhost3 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -328,17 +395,27 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected cmdlog: '220:EHLO:250:MAIL:250:RCPT:250:QUIT:250' wrote callout cache domain record for otherhost3: result=1 postmaster=0 random=1 +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) LOG: MAIN (random) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying otherok@otherhost3 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -346,17 +423,28 @@ Considering otherok@otherhost3 Attempting full verification using callout callout cache: found domain record for otherhost3 callout cache: domain accepts random addresses +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) LOG: MAIN (random) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost4 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -365,7 +453,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost4 callout cache: no address record found for ok@otherhost4 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -379,17 +468,27 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected cmdlog: '220:EHLO:250:MAIL:250:RCPT:250:QUIT:250' wrote callout cache domain record for otherhost4: result=1 postmaster=0 random=1 +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) LOG: MAIN (random) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost4 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -397,17 +496,27 @@ Considering ok@otherhost4 Attempting full verification using callout callout cache: found domain record for otherhost4 callout cache: domain accepts random addresses +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) LOG: MAIN (random) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost41 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -416,7 +525,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost41 callout cache: no address record found for ok@otherhost41 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -444,15 +554,25 @@ cmdlog: '220:EHLO:250:MAIL:250:RCPT:550:RSET:250:MAIL:250:RCPT:250:RSET:250:MAIL wrote callout cache domain record for otherhost41: result=1 postmaster=1 random=2 wrote positive callout cache address record for ok@otherhost41 +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost41 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -463,15 +583,23 @@ callout cache: domain rejects random addresses callout cache: domain accepts RCPT TO: callout cache: found address record for ok@otherhost41 callout cache: address record is positive +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost21 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -480,7 +608,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost21 callout cache: no address record found for ok@otherhost21 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -502,15 +631,25 @@ cmdlog: '220:EHLO:250:MAIL:250:RCPT:250:RSET:250:MAIL:250:RCPT:250:QUIT:250' wrote callout cache domain record for otherhost21: result=1 postmaster=1 random=0 wrote positive callout cache address record for ok@otherhost21 +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok2@otherhost21 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -520,7 +659,8 @@ callout cache: found domain record for otherhost21 callout cache: domain accepts RCPT TO: callout cache: no address record found for ok2@otherhost21 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -535,15 +675,26 @@ cmdlog: '220:EHLO:250:MAIL:250:RCPT:250:QUIT:250' wrote callout cache domain record for otherhost21: result=1 postmaster=1 random=0 wrote positive callout cache address record for ok2@otherhost21 +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost31 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -552,7 +703,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost31 callout cache: no address record found for ok@otherhost31 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -573,15 +725,25 @@ cmdlog: '220:EHLO:250:MAIL:250:RCPT:550:RSET:250:MAIL:250:RCPT:250:QUIT:250' wrote callout cache domain record for otherhost31: result=1 postmaster=0 random=2 wrote positive callout cache address record for ok@otherhost31 +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying okok@otherhost31 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -591,7 +753,8 @@ callout cache: found domain record for otherhost31 callout cache: domain rejects random addresses callout cache: no address record found for okok@otherhost31 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -606,15 +769,25 @@ cmdlog: '220:EHLO:250:MAIL:250:RCPT:250:QUIT:250' wrote callout cache domain record for otherhost31: result=1 postmaster=0 random=2 wrote positive callout cache address record for okok@otherhost31 +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying okokok@otherhost31 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -623,7 +796,8 @@ Attempting full verification using callout callout cache: domain record expired for otherhost31 callout cache: no address record found for okokok@otherhost31 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -644,15 +818,27 @@ cmdlog: '220:EHLO:250:MAIL:250:RCPT:550:RSET:250:MAIL:250:RCPT:250:QUIT:250' wrote callout cache domain record for otherhost31: result=1 postmaster=0 random=2 wrote positive callout cache address record for okokok@otherhost31 +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying okok@otherhost51 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -661,7 +847,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost51 callout cache: no address record found for okok@otherhost51 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -682,11 +869,18 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying okokok@otherhost52 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -695,7 +889,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost52 callout cache: no address record found for okokok@otherhost52 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -717,15 +912,29 @@ cmdlog: '220:EHLO:250:MAIL:250:RCPT:250:RSET:250:MAIL:250:RCPT:250:QUIT:250' wrote callout cache domain record for otherhost52: result=1 postmaster=1 random=0 wrote positive callout cache address record for okokok@otherhost52 +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) verifying Reply-To: header address abcd@x.y.z >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying abcd@x.y.z @@ -735,7 +944,8 @@ Attempting full verification using callout callout cache: no domain record found for x.y.z callout cache: no address record found for abcd@x.y.z/ interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -750,17 +960,30 @@ cmdlog: '220:EHLO:250:MAIL:250:RCPT:250:QUIT:250' wrote callout cache domain record for x.y.z: result=1 postmaster=0 random=0 wrote positive callout cache address record for abcd@x.y.z/ +host in "V4NET.0.0.8"? no (end of list) LOG: MAIN <= ok7@otherhost53 H=(test) [V4NET.0.0.7] U=root P=smtp S=sss 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.7"? no (end of list) verifying Reply-To: header address abcd@x.y.z >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying abcd@x.y.z @@ -770,7 +993,8 @@ Attempting full verification using callout callout cache: found domain record for x.y.z callout cache: no address record found for abcd@x.y.z interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -789,11 +1013,19 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost9 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -802,7 +1034,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost9 callout cache: no address record found for ok@otherhost9 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -826,15 +1059,26 @@ cmdlog: '220:EHLO:250:MAIL:250:RCPT:250:RSET:250:MAIL:250:RCPT:550:RCPT:250:QUIT wrote callout cache domain record for otherhost9: result=1 postmaster=1 random=0 wrote positive callout cache address record for ok@otherhost9 +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying z@test.ex >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -843,7 +1087,8 @@ Attempting full verification using callout callout cache: no domain record found for test.ex callout cache: no address record found for z@test.ex/ interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK diff --git a/test/stderr/0377 b/test/stderr/0377 index 192d87f43..f212cdb2e 100644 --- a/test/stderr/0377 +++ b/test/stderr/0377 @@ -1,15 +1,16 @@ 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 dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: aaaa@myhost.test.ex @@ -28,22 +29,27 @@ routing cccc@myhost.test.ex --------> defer router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> unseen_aaaa router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) unseen_aaaa router skipped: local_parts mismatch --------> seen_aaaa router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) seen_aaaa router skipped: local_parts mismatch --------> bbbb router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) bbbb router skipped: local_parts mismatch --------> bbbb_0 router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) bbbb_0 router skipped: local_parts mismatch --------> cccc_2nd_time router <-------- local_part=cccc domain=myhost.test.ex @@ -74,14 +80,17 @@ routing bbbb@myhost.test.ex --------> defer router <-------- local_part=bbbb domain=myhost.test.ex checking local_parts +bbbb in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> unseen_aaaa router <-------- local_part=bbbb domain=myhost.test.ex checking local_parts +bbbb in local_parts? no (end of list) unseen_aaaa router skipped: local_parts mismatch --------> seen_aaaa router <-------- local_part=bbbb domain=myhost.test.ex checking local_parts +bbbb in local_parts? no (end of list) seen_aaaa router skipped: local_parts mismatch --------> bbbb router <-------- local_part=bbbb domain=myhost.test.ex @@ -108,6 +117,7 @@ routing aaaa@myhost.test.ex --------> defer router <-------- local_part=aaaa domain=myhost.test.ex checking local_parts +aaaa in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> unseen_aaaa router <-------- local_part=aaaa domain=myhost.test.ex @@ -126,7 +136,6 @@ routed by unseen_aaaa router (unseen) envelope to: aaaa@myhost.test.ex transport: "unseen" set: replicated aaaa@myhost.test.ex -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: aaaa@myhost.test.ex @@ -172,22 +181,27 @@ routing cccc@myhost.test.ex --------> defer router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> unseen_aaaa router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) unseen_aaaa router skipped: local_parts mismatch --------> seen_aaaa router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) seen_aaaa router skipped: local_parts mismatch --------> bbbb router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) bbbb router skipped: local_parts mismatch --------> bbbb_0 router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) bbbb_0 router skipped: local_parts mismatch --------> cccc_2nd_time router <-------- local_part=cccc domain=myhost.test.ex @@ -230,14 +244,17 @@ routing bbbb@myhost.test.ex --------> defer router <-------- local_part=bbbb domain=myhost.test.ex checking local_parts +bbbb in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> unseen_aaaa router <-------- local_part=bbbb domain=myhost.test.ex checking local_parts +bbbb in local_parts? no (end of list) unseen_aaaa router skipped: local_parts mismatch --------> seen_aaaa router <-------- local_part=bbbb domain=myhost.test.ex checking local_parts +bbbb in local_parts? no (end of list) seen_aaaa router skipped: local_parts mismatch --------> bbbb router <-------- bbbb router skipped: previously routed bbbb@myhost.test.ex @@ -298,25 +315,24 @@ After routing: defer_aaaa@myhost.test.ex defer_bbbb@myhost.test.ex defer_cccc@myhost.test.ex -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1238 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => aaaa R=seen_aaaa T=t1 -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1239 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => bbbb R=bbbb_0 T=t1 -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1240 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => cccc R=cccc_accept T=t1 -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 LOG: queue_run MAIN Start queue run: pid=p1234 -qf -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: aaaa@myhost.test.ex unique = aaaa@myhost.test.ex @@ -334,22 +350,27 @@ routing cccc@myhost.test.ex --------> defer router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> unseen_aaaa router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) unseen_aaaa router skipped: local_parts mismatch --------> seen_aaaa router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) seen_aaaa router skipped: local_parts mismatch --------> bbbb router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) bbbb router skipped: local_parts mismatch --------> bbbb_0 router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) bbbb_0 router skipped: local_parts mismatch --------> cccc_2nd_time router <-------- local_part=cccc domain=myhost.test.ex @@ -372,14 +393,17 @@ routing bbbb@myhost.test.ex --------> defer router <-------- local_part=bbbb domain=myhost.test.ex checking local_parts +bbbb in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> unseen_aaaa router <-------- local_part=bbbb domain=myhost.test.ex checking local_parts +bbbb in local_parts? no (end of list) unseen_aaaa router skipped: local_parts mismatch --------> seen_aaaa router <-------- local_part=bbbb domain=myhost.test.ex checking local_parts +bbbb in local_parts? no (end of list) seen_aaaa router skipped: local_parts mismatch --------> bbbb router <-------- local_part=bbbb domain=myhost.test.ex @@ -405,6 +429,7 @@ routing aaaa@myhost.test.ex --------> defer router <-------- local_part=aaaa domain=myhost.test.ex checking local_parts +aaaa in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> unseen_aaaa router <-------- local_part=aaaa domain=myhost.test.ex @@ -425,7 +450,6 @@ domain = myhost.test.ex routed by seen_aaaa router envelope to: aaaa@myhost.test.ex transport: t1 -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: cccc@myhost.test.ex unique = \0\cccc@myhost.test.ex @@ -435,22 +459,27 @@ routing cccc@myhost.test.ex --------> defer router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> unseen_aaaa router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) unseen_aaaa router skipped: local_parts mismatch --------> seen_aaaa router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) seen_aaaa router skipped: local_parts mismatch --------> bbbb router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) bbbb router skipped: local_parts mismatch --------> bbbb_0 router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) bbbb_0 router skipped: local_parts mismatch --------> cccc_2nd_time router <-------- cccc_2nd_time router skipped: previously routed cccc@myhost.test.ex @@ -473,7 +502,6 @@ cccc_redirect router generated cccc@myhost.test.ex routed by cccc_redirect router envelope to: cccc@myhost.test.ex transport: -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: cccc@myhost.test.ex unique = \1\cccc@myhost.test.ex @@ -502,22 +530,27 @@ routing cccc@myhost.test.ex --------> defer router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> unseen_aaaa router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) unseen_aaaa router skipped: local_parts mismatch --------> seen_aaaa router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) seen_aaaa router skipped: local_parts mismatch --------> bbbb router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) bbbb router skipped: local_parts mismatch --------> bbbb_0 router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) bbbb_0 router skipped: local_parts mismatch --------> cccc_2nd_time router <-------- cccc_2nd_time router skipped: previously routed cccc@myhost.test.ex @@ -550,18 +583,17 @@ After routing: cccc@myhost.test.ex was previously delivered (t1 transport): discarded aaaa@myhost.test.ex was previously delivered (t1 transport): discarded bbbb@myhost.test.ex was previously delivered (t1 transport): discarded -locking TESTSUITE/spool/db/retry.lockfile ->>>>>>>>>>>>>>>> Exim pid=p1238 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1241 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> 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 LOG: queue_run MAIN Start queue run: pid=p1235 -qf -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: aaaa@myhost.test.ex unique = aaaa@myhost.test.ex @@ -579,22 +611,27 @@ routing cccc@myhost.test.ex --------> defer router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> unseen_aaaa router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) unseen_aaaa router skipped: local_parts mismatch --------> seen_aaaa router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) seen_aaaa router skipped: local_parts mismatch --------> bbbb router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) bbbb router skipped: local_parts mismatch --------> bbbb_0 router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) bbbb_0 router skipped: local_parts mismatch --------> cccc_2nd_time router <-------- local_part=cccc domain=myhost.test.ex @@ -617,14 +654,17 @@ routing bbbb@myhost.test.ex --------> defer router <-------- local_part=bbbb domain=myhost.test.ex checking local_parts +bbbb in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> unseen_aaaa router <-------- local_part=bbbb domain=myhost.test.ex checking local_parts +bbbb in local_parts? no (end of list) unseen_aaaa router skipped: local_parts mismatch --------> seen_aaaa router <-------- local_part=bbbb domain=myhost.test.ex checking local_parts +bbbb in local_parts? no (end of list) seen_aaaa router skipped: local_parts mismatch --------> bbbb router <-------- local_part=bbbb domain=myhost.test.ex @@ -650,6 +690,7 @@ routing aaaa@myhost.test.ex --------> defer router <-------- local_part=aaaa domain=myhost.test.ex checking local_parts +aaaa in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> unseen_aaaa router <-------- local_part=aaaa domain=myhost.test.ex @@ -670,7 +711,6 @@ domain = myhost.test.ex routed by seen_aaaa router envelope to: aaaa@myhost.test.ex transport: t1 -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: cccc@myhost.test.ex unique = \0\cccc@myhost.test.ex @@ -680,22 +720,27 @@ routing cccc@myhost.test.ex --------> defer router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> unseen_aaaa router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) unseen_aaaa router skipped: local_parts mismatch --------> seen_aaaa router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) seen_aaaa router skipped: local_parts mismatch --------> bbbb router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) bbbb router skipped: local_parts mismatch --------> bbbb_0 router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) bbbb_0 router skipped: local_parts mismatch --------> cccc_2nd_time router <-------- cccc_2nd_time router skipped: previously routed cccc@myhost.test.ex @@ -718,7 +763,6 @@ cccc_redirect router generated cccc@myhost.test.ex routed by cccc_redirect router envelope to: cccc@myhost.test.ex transport: -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: cccc@myhost.test.ex unique = \1\cccc@myhost.test.ex @@ -747,22 +791,27 @@ routing cccc@myhost.test.ex --------> defer router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> unseen_aaaa router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) unseen_aaaa router skipped: local_parts mismatch --------> seen_aaaa router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) seen_aaaa router skipped: local_parts mismatch --------> bbbb router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) bbbb router skipped: local_parts mismatch --------> bbbb_0 router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) bbbb_0 router skipped: local_parts mismatch --------> cccc_2nd_time router <-------- cccc_2nd_time router skipped: previously routed cccc@myhost.test.ex @@ -795,8 +844,7 @@ After routing: cccc@myhost.test.ex was previously delivered (t1 transport): discarded aaaa@myhost.test.ex was previously delivered (t1 transport): discarded bbbb@myhost.test.ex was previously delivered (t1 transport): discarded -locking TESTSUITE/spool/db/retry.lockfile ->>>>>>>>>>>>>>>> Exim pid=p1239 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1242 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: queue_run MAIN End queue run: pid=p1235 -qf >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0378 b/test/stderr/0378 index 845da3cb2..b3ab37ec9 100644 --- a/test/stderr/0378 +++ b/test/stderr/0378 @@ -1,15 +1,16 @@ 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 dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: aaaa@myhost.test.ex @@ -20,10 +21,13 @@ routing aaaa@myhost.test.ex --------> bounce router <-------- local_part=aaaa domain=myhost.test.ex checking senders +myhost.test.ex in ""? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) bounce router skipped: senders mismatch --------> defer router <-------- local_part=aaaa domain=myhost.test.ex checking local_parts +aaaa in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> aaaa_2nd_time router <-------- local_part=aaaa domain=myhost.test.ex @@ -67,7 +71,6 @@ aaaa router generated defer_aaaa@myhost.test.ex routed by aaaa router envelope to: aaaa@myhost.test.ex transport: -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: defer_aaaa@myhost.test.ex @@ -90,6 +93,8 @@ routing defer_aaaa@myhost.test.ex --------> bounce router <-------- local_part=defer_aaaa domain=myhost.test.ex checking senders +myhost.test.ex in ""? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) bounce router skipped: senders mismatch --------> defer router <-------- local_part=defer_aaaa domain=myhost.test.ex @@ -114,18 +119,18 @@ After routing: Failed addresses: Deferred addresses: 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 dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: CALLER@myhost.test.ex @@ -155,25 +160,25 @@ LOG: MAIN Completed >>>>>>>>>>>>>>>> Exim pid=p1239 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Exim pid=p1238 (autoreply) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1240 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => >CALLER@myhost.test.ex R=aaaa T=t3 -locking TESTSUITE/spool/db/retry.lockfile transport error EPIPE ignored +>>>>>>>>>>>>>>>> Exim pid=p1241 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => |/bin/sh -c exit R=aaaa T=t2 -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1242 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => TESTSUITE/test-mail/file R=aaaa T=t1 -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 LOG: queue_run MAIN Start queue run: pid=p1234 -qf -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: aaaa@myhost.test.ex unique = aaaa@myhost.test.ex @@ -183,10 +188,13 @@ routing aaaa@myhost.test.ex --------> bounce router <-------- local_part=aaaa domain=myhost.test.ex checking senders +myhost.test.ex in ""? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) bounce router skipped: senders mismatch --------> defer router <-------- local_part=aaaa domain=myhost.test.ex checking local_parts +aaaa in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> aaaa_2nd_time router <-------- local_part=aaaa domain=myhost.test.ex @@ -204,7 +212,6 @@ aaaa_2nd_time router generated aaaa@myhost.test.ex routed by aaaa_2nd_time router envelope to: aaaa@myhost.test.ex transport: -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: aaaa@myhost.test.ex unique = \0\aaaa@myhost.test.ex @@ -214,10 +221,13 @@ routing aaaa@myhost.test.ex --------> bounce router <-------- local_part=aaaa domain=myhost.test.ex checking senders +myhost.test.ex in ""? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) bounce router skipped: senders mismatch --------> defer router <-------- local_part=aaaa domain=myhost.test.ex checking local_parts +aaaa in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> aaaa_2nd_time router <-------- aaaa_2nd_time router skipped: previously routed aaaa@myhost.test.ex @@ -235,7 +245,7 @@ text "This is an autoreply"' (tainted) data is an Exim filter program Filter: start of processing Filter: end of processing ->>>>>>>>>>>>>>>> Exim pid=p1240 (router-interpret) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1243 (router-interpret) terminating with rc=0 >>>>>>>>>>>>>>>> rda_interpret: subprocess yield=0 error=NULL set transport t3 aaaa router generated >CALLER@myhost.test.ex @@ -258,7 +268,6 @@ aaaa router generated defer_aaaa@myhost.test.ex routed by aaaa router envelope to: aaaa@myhost.test.ex transport: -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: defer_aaaa@myhost.test.ex unique = defer_aaaa@myhost.test.ex @@ -280,6 +289,8 @@ routing defer_aaaa@myhost.test.ex --------> bounce router <-------- local_part=defer_aaaa domain=myhost.test.ex checking senders +myhost.test.ex in ""? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) bounce router skipped: senders mismatch --------> defer router <-------- local_part=defer_aaaa domain=myhost.test.ex @@ -301,8 +312,7 @@ After routing: Failed addresses: Deferred addresses: defer_aaaa@myhost.test.ex -locking TESTSUITE/spool/db/retry.lockfile ->>>>>>>>>>>>>>>> Exim pid=p1241 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1244 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: queue_run MAIN End queue run: pid=p1234 -qf >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0379 b/test/stderr/0379 index f37cea959..2440d10ad 100644 --- a/test/stderr/0379 +++ b/test/stderr/0379 @@ -1,15 +1,16 @@ 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 dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: defer@myhost.test.ex @@ -24,6 +25,7 @@ routing aaaa@myhost.test.ex --------> defer router <-------- local_part=aaaa domain=myhost.test.ex checking local_parts +aaaa in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> aaaa_redirect router <-------- local_part=aaaa domain=myhost.test.ex @@ -59,7 +61,6 @@ defer router: defer for defer@myhost.test.ex message: forced defer LOG: MAIN == defer@myhost.test.ex R=defer defer (-1): forced defer -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: bbbb@myhost.test.ex @@ -74,10 +75,12 @@ routing cccc@myhost.test.ex --------> defer router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> aaaa_redirect router <-------- local_part=cccc domain=myhost.test.ex checking local_parts +cccc in local_parts? no (end of list) aaaa_redirect router skipped: local_parts mismatch --------> bc router <-------- local_part=cccc domain=myhost.test.ex @@ -98,10 +101,12 @@ routing bbbb@myhost.test.ex --------> defer router <-------- local_part=bbbb domain=myhost.test.ex checking local_parts +bbbb in local_parts? no (end of list) defer router skipped: local_parts mismatch --------> aaaa_redirect router <-------- local_part=bbbb domain=myhost.test.ex checking local_parts +bbbb in local_parts? no (end of list) aaaa_redirect router skipped: local_parts mismatch --------> bc router <-------- local_part=bbbb domain=myhost.test.ex @@ -125,22 +130,21 @@ After routing: Failed addresses: Deferred addresses: defer@myhost.test.ex -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1237 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => bbbb R=bc T=t1 -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1238 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => cccc R=bc T=t1 -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 LOG: queue_run MAIN Start queue run: pid=p1234 -qf -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: defer@myhost.test.ex unique = defer@myhost.test.ex @@ -167,8 +171,7 @@ After routing: Failed addresses: Deferred addresses: defer@myhost.test.ex -locking TESTSUITE/spool/db/retry.lockfile ->>>>>>>>>>>>>>>> Exim pid=p1237 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1239 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: queue_run MAIN End queue run: pid=p1234 -qf >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0380 b/test/stderr/0380 index 835ef21ad..38bbcd1be 100644 --- a/test/stderr/0380 +++ b/test/stderr/0380 @@ -1,15 +1,16 @@ 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 dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: aaaa@myhost.test.ex @@ -28,6 +29,7 @@ forced failure in expansion of "${if eq {a}{b}{x}fail}" (address_data): decline --------> r1 router <-------- local_part=bbbb domain=myhost.test.ex checking local_parts +bbbb in local_parts? no (end of list) r1 router skipped: local_parts mismatch --------> r2 router <-------- local_part=bbbb domain=myhost.test.ex @@ -78,9 +80,8 @@ After routing: Failed addresses: Deferred addresses: aaaa@myhost.test.ex -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1236 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => bbbb R=r3 T=t1 -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>> Exim pid=p1235 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0381 b/test/stderr/0381 index 550e2dab9..d35fb6261 100644 --- a/test/stderr/0381 +++ b/test/stderr/0381 @@ -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 @@ -48,19 +49,27 @@ host in "*.gov.uk.test.ex"? list element: *.gov.uk.test.ex sender host name required, to match against *.gov.uk.test.ex looking up host name for V4NET.99.99.97 -DNS lookup of 97.99.99.V4NET.in-addr.arpa (PTR) using fakens -DNS lookup of 97.99.99.V4NET.in-addr.arpa (PTR) succeeded + DNS lookup of 97.99.99.V4NET.in-addr.arpa (PTR) using fakens + DNS lookup of 97.99.99.V4NET.in-addr.arpa (PTR) succeeded IP address lookup yielded "x.gov.uk.test.ex" alias "x.co.uk.test.ex" -DNS lookup of x.gov.uk.test.ex (A) using fakens -DNS lookup of x.gov.uk.test.ex (A) succeeded -x.gov.uk.test.ex V4NET.99.99.97 mx=-1 sort=xx + check dnssec require list + x.gov.uk.test.ex not in empty list (option unset? cannot trace name) + check dnssec request list + x.gov.uk.test.ex not in empty list (option unset? cannot trace name) + DNS lookup of x.gov.uk.test.ex (A) using fakens + DNS lookup of x.gov.uk.test.ex (A) succeeded + x.gov.uk.test.ex V4NET.99.99.97 mx=-1 sort=xx checking addresses for x.gov.uk.test.ex Forward DNS security status: unverified V4NET.99.99.97 OK -DNS lookup of x.co.uk.test.ex (A) using fakens -DNS lookup of x.co.uk.test.ex (A) succeeded -x.co.uk.test.ex V4NET.99.99.97 mx=-1 sort=xx + check dnssec require list + x.co.uk.test.ex not in empty list (option unset? cannot trace name) + check dnssec request list + x.co.uk.test.ex not in empty list (option unset? cannot trace name) + DNS lookup of x.co.uk.test.ex (A) using fakens + DNS lookup of x.co.uk.test.ex (A) succeeded + x.co.uk.test.ex V4NET.99.99.97 mx=-1 sort=xx checking addresses for x.co.uk.test.ex Forward DNS security status: unverified V4NET.99.99.97 OK diff --git a/test/stderr/0382 b/test/stderr/0382 index 6ab4d7465..6da513f1f 100644 --- a/test/stderr/0382 +++ b/test/stderr/0382 @@ -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 @@ -13,15 +15,19 @@ running system filter Filtering did not set up a significant delivery. Normal delivery will occur. system filter returned 1 +test.ex in ""? no (end of list) +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 @@ -41,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 diff --git a/test/stderr/0384 b/test/stderr/0384 index 048215ec7..747d2bdc6 100644 --- a/test/stderr/0384 +++ b/test/stderr/0384 @@ -13,6 +13,8 @@ >>> [V4NET.9.8.7] in helo_lookup_domains? no (end of list) >>> verifying EHLO/HELO argument "[V4NET.9.8.7]" >>> matched host address +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * diff --git a/test/stderr/0386 b/test/stderr/0386 index 40a9eb51b..0e303d860 100644 --- a/test/stderr/0386 +++ b/test/stderr/0386 @@ -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 @@ -231,12 +233,12 @@ check acl = TESTSUITE/aux-fixed/0386.acl2 check dnslists = rbl.test.ex dnslists check: rbl.test.ex new DNS lookup for 13.12.11.V4NET.rbl.test.ex -DNS lookup of 13.12.11.V4NET.rbl.test.ex (A) using fakens -DNS lookup of 13.12.11.V4NET.rbl.test.ex (A) succeeded + DNS lookup of 13.12.11.V4NET.rbl.test.ex (A) using fakens + DNS lookup of 13.12.11.V4NET.rbl.test.ex (A) succeeded dnslists: wrote cache entry, ttl=3 DNS lookup for 13.12.11.V4NET.rbl.test.ex succeeded (yielding 127.0.0.2) -DNS lookup of 13.12.11.V4NET.rbl.test.ex (TXT) using fakens -DNS lookup of 13.12.11.V4NET.rbl.test.ex (TXT) succeeded + DNS lookup of 13.12.11.V4NET.rbl.test.ex (TXT) using fakens + DNS lookup of 13.12.11.V4NET.rbl.test.ex (TXT) succeeded => that means V4NET.11.12.13 is listed at rbl.test.ex warn: condition test succeeded in ACL "TESTSUITE/aux-fixed/0386.acl2" LOG: MAIN @@ -254,8 +256,8 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers search_tidyup called >>Headers after rewriting and local additions: @@ -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 @@ -309,8 +312,6 @@ body_linecount=1 message_linecount=8 DSN: set orcpt: flags: 0x0 Delivery address list: 2@b - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -346,8 +347,6 @@ After routing: search_tidyup called >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> 2@b <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -364,7 +363,7 @@ appendfile: mode=600 notify_comsat=0 quota=0 warning=0 message_suffix=\n maildir_use_size_file=no locking by lockfile fcntl -de-tainting path 'TESTSUITE/test-mail/2' +below-home: de-tainting path 'TESTSUITE/test-mail/2' lock name: TESTSUITE/test-mail/2.lock hitch name: TESTSUITE/test-mail/2.lock.test.ex.dddddddd.pppppppp lock file created @@ -376,6 +375,7 @@ writing data block fd=dddd size=sss timeout=0 writing data block fd=dddd size=sss timeout=0 appendfile yields 0 with errno=dd more_errno=dd search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1237 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling 2@b t1 transport returned OK for 2@b post-process 2@b (0) @@ -387,10 +387,10 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1236 set_process_info: pppp tidying up after delivering 10HmaX-000000005vi-0000 Processing retry items -Succeeded addresses: - 2@b: no retry items -Failed addresses: -Deferred addresses: + Succeeded addresses: + 2@b: no retry items + Failed addresses: + Deferred addresses: end of retry processing DSN: processing router : r1 DSN: processing successful delivery address: 2@b @@ -451,8 +451,8 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers search_tidyup called >>Headers after rewriting and local additions: @@ -479,6 +479,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 @@ -506,8 +507,6 @@ body_linecount=1 message_linecount=8 DSN: set orcpt: flags: 0x0 Delivery address list: 2@b - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -543,8 +542,6 @@ After routing: search_tidyup called >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> 2@b <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -561,7 +558,7 @@ appendfile: mode=600 notify_comsat=0 quota=0 warning=0 message_suffix=\n maildir_use_size_file=no locking by lockfile fcntl -de-tainting path 'TESTSUITE/test-mail/2' +below-home: de-tainting path 'TESTSUITE/test-mail/2' lock name: TESTSUITE/test-mail/2.lock hitch name: TESTSUITE/test-mail/2.lock.test.ex.dddddddd.pppppppp lock file created @@ -573,6 +570,7 @@ writing data block fd=dddd size=sss timeout=0 writing data block fd=dddd size=sss timeout=0 appendfile yields 0 with errno=dd more_errno=dd search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1239 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling 2@b t1 transport returned OK for 2@b post-process 2@b (0) @@ -584,10 +582,10 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1238 set_process_info: pppp tidying up after delivering 10HmaY-000000005vi-0000 Processing retry items -Succeeded addresses: - 2@b: no retry items -Failed addresses: -Deferred addresses: + Succeeded addresses: + 2@b: no retry items + Failed addresses: + Deferred addresses: end of retry processing DSN: processing router : r1 DSN: processing successful delivery address: 2@b diff --git a/test/stderr/0387 b/test/stderr/0387 index 2b78fcea4..901d53d55 100644 --- a/test/stderr/0387 +++ b/test/stderr/0387 @@ -1,4 +1,5 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config trusted user admin user diff --git a/test/stderr/0388 b/test/stderr/0388 index dd3dc3eec..cd2772feb 100644 --- a/test/stderr/0388 +++ b/test/stderr/0388 @@ -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 @@ -6,8 +7,6 @@ admin user dropping to exim gid; retaining priv uid set_process_info: pppp delivering specified messages set_process_info: pppp delivering 10HmaX-000000005vi-0000 - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -23,9 +22,9 @@ routing x@y --------> r0 router <-------- local_part=x domain=y checking local_parts -x in "CALLER"? +x in local_parts? list element: CALLER -x in "CALLER"? no (end of list) +x in local_parts? no (end of list) r0 router skipped: local_parts mismatch --------> r1 router <-------- local_part=x domain=y @@ -77,17 +76,16 @@ changed uid/gid: remote delivery to x@y with transport=smtp uid=EXIM_UID gid=EXIM_GID pid=p1235 set_process_info: pppp delivering 10HmaX-000000005vi-0000 using smtp checking retry status of 127.0.0.1 - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory no retry data available 127.0.0.1 in serialize_hosts? no (option unset) set_process_info: pppp delivering 10HmaX-000000005vi-0000 to 127.0.0.1 [127.0.0.1]:PORT_S (x@y) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... 127.0.0.1 in hosts_try_fastopen? - list element: - connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... + 127.0.0.1 in hosts_try_fastopen? + list element: +connected SMTP<< 220 Server ready 127.0.0.1 in hosts_avoid_esmtp? no (option unset) SMTP>> EHLO myhost.test.ex @@ -108,7 +106,7 @@ cmd buf flush ddd bytes (more expected) SMTP(shutdown)>> SMTP<< 250 OK SMTP(close)>> -cmdlog: '220:EHLO:250:MAIL:250:RCPT:451:QUIT:250' +cmdlog: '220:EHLO:250:MAIL:250:RCPT:451:QUIT+:250' set_process_info: pppp delivering 10HmaX-000000005vi-0000: just tried 127.0.0.1 [127.0.0.1]:PORT_S for x@y: result OK *@127.0.0.1 in "*"? list element: * @@ -119,24 +117,25 @@ set_process_info: pppp delivering 10HmaX-000000005vi-0000: just tried 127.0.0.1 *@127.0.0.1 in "*"? yes (matched "*") Clearing TFO as not first host for message checking retry status of V4NET.0.0.0 - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory no retry data available V4NET.0.0.0 in serialize_hosts? no (option unset) set_process_info: pppp delivering 10HmaX-000000005vi-0000 to V4NET.0.0.0 [V4NET.0.0.0]:PORT_S (x@y) -Connecting to V4NET.0.0.0 [V4NET.0.0.0]:PORT_S ... V4NET.0.0.0 in hosts_try_fastopen? +Connecting to V4NET.0.0.0 [V4NET.0.0.0]:PORT_S ... + V4NET.0.0.0 in hosts_try_fastopen? failed: Network Error LOG: MAIN H=V4NET.0.0.0 [V4NET.0.0.0] Network Error set_process_info: pppp delivering 10HmaX-000000005vi-0000: just tried V4NET.0.0.0 [V4NET.0.0.0]:PORT_S for x@y: result DEFER -added retry item for T:V4NET.0.0.0:V4NET.0.0.0:PORT_S: errno=dd more_errno=dd,A flags=2 +added retry item for T:[V4NET.0.0.0]:V4NET.0.0.0:PORT_S: errno=dd more_errno=dd,A flags=2 set_process_info: pppp delivering 10HmaX-000000005vi-0000: waiting for a remote delivery subprocess to finish set_process_info: pppp delivering 10HmaX-000000005vi-0000 (just run smtp for x@y in subprocess) search_tidyup called -reading retry information for T:V4NET.0.0.0:V4NET.0.0.0:PORT_S from subprocess +search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1235 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +reading retry information for T:[V4NET.0.0.0]:V4NET.0.0.0:PORT_S from subprocess added retry item reading retry information for R:x@y from subprocess added retry item @@ -147,52 +146,53 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1234 set_process_info: pppp tidying up after delivering 10HmaX-000000005vi-0000 Processing retry items -Succeeded addresses: -Failed addresses: -Deferred addresses: - x@y - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile - EXIM_DBOPEN: file dir flags=O_RDWR - returned from EXIM_DBOPEN: 0xAAAAAAAA - opened hints database TESTSUITE/spool/db/retry: flags=O_RDWR - x@y in "*"? - list element: * - address match test: subject=x@y pattern=* - y in "*"? + Succeeded addresses: + Failed addresses: + Deferred addresses: + x@y + EXIM_DBOPEN: file dir flags=O_RDWR + returned from EXIM_DBOPEN: 0xAAAAAAAA + opened hints database TESTSUITE/spool/db/retry: flags=O_RDWR + x@y in "*"? list element: * - y in "*"? yes (matched "*") - x@y in "*"? yes (matched "*") -retry for R:x@y = * 0 0 - dbfn_read: key=R:x@y -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:: 451 Temporary error - dbfn_write: key=R:x@y - *@V4NET.0.0.0 in "*"? - list element: * - address match test: subject=*@V4NET.0.0.0 pattern=* - V4NET.0.0.0 in "*"? + address match test: subject=x@y pattern=* + y in "*"? + ╎list element: * + ╎y in "*"? yes (matched "*") + 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:: 451 Temporary error + dbfn_write: key=R:x@y datalen 148 + *@V4NET.0.0.0 in "*"? list element: * - V4NET.0.0.0 in "*"? yes (matched "*") - *@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 -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 -timed out: all retries expired + address match test: subject=*@V4NET.0.0.0 pattern=* + V4NET.0.0.0 in "*"? + ╎list element: * + ╎V4NET.0.0.0 in "*"? yes (matched "*") + *@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 datalen 70 + timed out: all retries expired LOG: MAIN ** x@y: retry timeout exceeded - EXIM_DBCLOSE(0xAAAAAAAA) - closed hints database and lockfile + EXIM_DBCLOSE(0xAAAAAAAA) + closed hints database 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 @@ -218,24 +218,24 @@ MIME-Version: 1.0 Subject: Mail delivery failed: returning message to sender qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=F: From: Mail Delivery System rewrite_one_header: type=T: To: CALLER@myhost.test.ex search_tidyup called >>Headers after rewriting and local additions: - X-Failed-Recipients: x@y - Auto-Submitted: auto-replied -F From: Mail Delivery System -T To: CALLER@myhost.test.ex - References: - Content-Type: multipart/report; report-type=delivery-status; boundary=NNNNNNNNNN-eximdsn-MMMMMMMMMM - MIME-Version: 1.0 - Subject: Mail delivery failed: returning message to sender -I Message-Id: - Date: Tue, 2 Mar 1999 09:44:33 +0000 + X-Failed-Recipients: x@y + Auto-Submitted: auto-replied + F From: Mail Delivery System + T To: CALLER@myhost.test.ex + References: + Content-Type: multipart/report; report-type=delivery-status; boundary=NNNNNNNNNN-eximdsn-MMMMMMMMMM + MIME-Version: 1.0 + Subject: Mail delivery failed: returning message to sender + I Message-Id: + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaY-000000005vi-0000-D Data file written for message 10HmaY-000000005vi-0000 @@ -252,6 +252,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 @@ -260,8 +261,6 @@ admin user dropping to exim gid; retaining priv uid set_process_info: pppp delivering specified messages set_process_info: pppp delivering 10HmaY-000000005vi-0000 - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: 0xAAAAAAAA opened hints database TESTSUITE/spool/db/retry: flags=O_RDONLY @@ -269,26 +268,29 @@ 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 EXIM_DBCLOSE(0xAAAAAAAA) - closed hints database and lockfile + closed hints database >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> routing CALLER@myhost.test.ex --------> r0 router <-------- local_part=CALLER domain=myhost.test.ex checking local_parts -CALLER in "CALLER"? +CALLER in local_parts? list element: CALLER - CALLER in "CALLER"? yes (matched "CALLER") + CALLER in local_parts? yes (matched "CALLER") checking senders - in ":"? + in senders? list element: address match test: subject= pattern= - in ":"? yes (matched "") + in senders? yes (matched "") calling r0 router rda_interpret (string): ':blackhole:' expanded: ':blackhole:' @@ -309,10 +311,10 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1237 set_process_info: pppp tidying up after delivering 10HmaY-000000005vi-0000 Processing retry items -Succeeded addresses: - CALLER@myhost.test.ex: no retry items -Failed addresses: -Deferred addresses: + Succeeded addresses: + CALLER@myhost.test.ex: no retry items + Failed addresses: + Deferred addresses: end of retry processing LOG: MAIN Completed diff --git a/test/stderr/0391 b/test/stderr/0391 index b7873266f..884ffd32a 100644 --- a/test/stderr/0391 +++ b/test/stderr/0391 @@ -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 diff --git a/test/stderr/0393 b/test/stderr/0393 index 75f92b9e1..9efcb548c 100644 --- a/test/stderr/0393 +++ b/test/stderr/0393 @@ -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 @@ -22,7 +24,7 @@ appendfile: mode=600 notify_comsat=0 quota=0 warning=0 message_suffix=\n maildir_use_size_file=no locking by lockfile fcntl -de-tainting path 'TESTSUITE/test-mail/userx' +below-home: de-tainting path 'TESTSUITE/test-mail/userx' lock name: TESTSUITE/test-mail/userx.lock hitch name: TESTSUITE/test-mail/userx.lock.test.ex.dddddddd.pppppppp lock file created @@ -41,6 +43,7 @@ writing data block fd=dddd size=sss timeout=0 end of filtering transport writing: yield=1 writing data block fd=dddd size=sss timeout=0 appendfile yields 0 with errno=dd more_errno=dd +>>>>>>>>>>>>>>>> Exim pid=p1237 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> t1 transport returned OK for userx@test.ex LOG: MAIN => userx R=r1 T=t1 @@ -49,11 +52,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 @@ -69,7 +74,7 @@ appendfile: mode=600 notify_comsat=0 quota=0 warning=0 message_suffix=\n maildir_use_size_file=no locking by lockfile fcntl -de-tainting path 'TESTSUITE/test-mail/userx' +below-home: de-tainting path 'TESTSUITE/test-mail/userx' lock name: TESTSUITE/test-mail/userx.lock hitch name: TESTSUITE/test-mail/userx.lock.test.ex.dddddddd.pppppppp lock file created @@ -80,19 +85,22 @@ cannot use sendfile for body: spoolfile not wireformat writing data block fd=dddd size=sss timeout=0 writing data block fd=dddd size=sss timeout=0 appendfile yields 0 with errno=dd more_errno=dd +>>>>>>>>>>>>>>>> Exim pid=p1240 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> t1 transport returned OK for userx@test.ex LOG: MAIN => userx R=r1 T=t1 LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1238 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1239 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1238 (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 @@ -110,7 +118,7 @@ appendfile: mode=600 notify_comsat=0 quota=0 warning=0 message_suffix=\n maildir_use_size_file=no locking by lockfile fcntl -de-tainting path 'TESTSUITE/test-mail/userx' +below-home: de-tainting path 'TESTSUITE/test-mail/userx' lock name: TESTSUITE/test-mail/userx.lock hitch name: TESTSUITE/test-mail/userx.lock.test.ex.dddddddd.pppppppp lock file created @@ -121,10 +129,11 @@ cannot use sendfile for body: spoolfile not wireformat writing data block fd=dddd size=sss timeout=0 writing data block fd=dddd size=sss timeout=0 appendfile yields 0 with errno=dd more_errno=dd +>>>>>>>>>>>>>>>> Exim pid=p1243 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> t1 transport returned OK for userx@test.ex LOG: MAIN => userx R=r1 T=t1 LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1240 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1239 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1242 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1241 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0396 b/test/stderr/0396 index 75b64878a..e2f6cf70b 100644 --- a/test/stderr/0396 +++ b/test/stderr/0396 @@ -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 diff --git a/test/stderr/0398 b/test/stderr/0398 index 604e791b6..745b5bb12 100644 --- a/test/stderr/0398 +++ b/test/stderr/0398 @@ -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 @@ -42,16 +43,16 @@ routing qq@remote --------> r1 router <-------- local_part=qq domain=remote checking domains -remote in "local"? +remote in domains? list element: local -remote in "local"? no (end of list) +remote in domains? no (end of list) r1 router skipped: domains mismatch --------> r2 router <-------- local_part=qq domain=remote checking domains -remote in "remote"? +remote in domains? list element: remote - remote in "remote"? yes (matched "remote") + remote in domains? yes (matched "remote") calling r2 router r2 router called for qq@remote domain = remote @@ -101,16 +102,16 @@ routing qq@remote --------> r1 router <-------- local_part=qq domain=remote checking domains -remote in "local"? +remote in domains? list element: local -remote in "local"? no (end of list) +remote in domains? no (end of list) r1 router skipped: domains mismatch --------> r2 router <-------- local_part=qq domain=remote checking domains -remote in "remote"? +remote in domains? list element: remote - remote in "remote"? yes (matched "remote") + remote in domains? yes (matched "remote") calling r2 router r2 router called for qq@remote domain = remote @@ -138,21 +139,22 @@ routed by r2 router transport: t2 host 127.0.0.1 [127.0.0.1] Attempting full verification using callout - locking TESTSUITE/spool/db/callout.lockfile - locked TESTSUITE/spool/db/callout.lockfile EXIM_DBOPEN: file dir flags=O_RDWR 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 + closed hints database interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... 127.0.0.1 in hosts_try_fastopen? - list element: - connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... + 127.0.0.1 in hosts_try_fastopen? + list element: +connected SMTP<< 220 Server ready 127.0.0.1 in hosts_avoid_esmtp? no (option unset) SMTP>> EHLO mail.test.ex @@ -173,18 +175,16 @@ cmd buf flush ddd bytes SMTP<< 250 OK SMTP(close)>> 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 dir flags=O_RDWR|O_CREAT + EXIM_DBOPEN: file dir 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 40 wrote callout cache domain record for remote: result=1 postmaster=0 random=0 - dbfn_write: key=qq@remote + dbfn_write: key=qq@remote datalen 16 wrote negative callout cache address record for qq@remote EXIM_DBCLOSE(0xAAAAAAAA) - closed hints database and lockfile + closed hints database ----------- end verify ------------ l_message: $acl_verify_message warn: condition test succeeded in ACL "rcpt" @@ -235,16 +235,16 @@ routing qq@remote --------> r1 router <-------- local_part=qq domain=remote checking domains -remote in "local"? +remote in domains? list element: local -remote in "local"? no (end of list) +remote in domains? no (end of list) r1 router skipped: domains mismatch --------> r2 router <-------- local_part=qq domain=remote checking domains -remote in "remote"? +remote in domains? list element: remote - remote in "remote"? yes (matched "remote") + remote in domains? yes (matched "remote") calling r2 router r2 router called for qq@remote domain = remote @@ -272,18 +272,18 @@ routed by r2 router transport: t2 host 127.0.0.1 [127.0.0.1] Attempting full verification using callout - locking TESTSUITE/spool/db/callout.lockfile - locked TESTSUITE/spool/db/callout.lockfile EXIM_DBOPEN: file dir flags=O_RDWR 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) - closed hints database and lockfile + closed hints database ----------- end verify ------------ l_message: $acl_verify_message warn: condition test succeeded in ACL "rcpt" diff --git a/test/stderr/0399 b/test/stderr/0399 index a3b583e11..cbcfb336b 100644 --- a/test/stderr/0399 +++ b/test/stderr/0399 @@ -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 diff --git a/test/stderr/0402 b/test/stderr/0402 index 8d6f16f95..bac58e5f2 100644 --- a/test/stderr/0402 +++ b/test/stderr/0402 @@ -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: @@ -14,11 +15,16 @@ seeking password data for user "CALLER": using cached result getpwnam() succeeded uid=CALLER_UID gid=CALLER_GID seeking password data for user "CALLER": using cached result getpwnam() succeeded uid=CALLER_UID gid=CALLER_GID +try option gecos_pattern +try option gecos_name +try option unknown_login originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME sender address = CALLER@test.ex +try option smtp_active_hostname set_process_info: pppp accepting a local non-SMTP message from spool directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 msg_size = 0 log directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 +try option message_size_limit Sender: CALLER@test.ex Recipients: CALLER@test.ex @@ -26,363 +32,364 @@ Recipients: userz rd+CALLER rd+usery +try option acl_not_smtp_start search_tidyup called >>Headers received: +try option message_id_header_domain +try option message_id_header_text qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=F: From: CALLER_NAME search_tidyup called >>Headers after rewriting and local additions: -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaX-000000005vi-0000-D Data file written for message 10HmaX-000000005vi-0000 ╭considering: ${tod_full} - ├──expanding: ${tod_full} - ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 - ╭considering: Received: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: Received: - ├considering: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├───expanded: ${tod_full} + ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 +try option received_header_text + ╭considering: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: Received:░ + ├considering: ${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_rcvhost ├─────result: false - ╭───scanning: from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: from - ├───scanning: $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭───scanning: from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: from░ + ├───scanning: $sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: - ├───scanning: - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - - ├───scanning: }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: from $sender_rcvhost - - ├─────result: from - + ├───scanning: ↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉ + ├───scanning: }{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: from░$sender_rcvhost↩ + ␉ + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ╭considering: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_ident ├─────result: true - ╭considering: from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: from - ├considering: ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ╎╭considering: $sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - ╎ }}(Exim $version_number) - ╎ ${if def:sender_address {(envelope-from <$sender_address>) - ╎ }}id $message_exim_id${if def:received_for { - ╎ for $received_for}} + ╭considering: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: from░ + ├considering: ${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ╎╭considering: $sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ╎␉}}(Exim░$version_number)↩ + ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ╎␉}}id░$message_exim_id${if░def:received_for░{↩ + ╎␉for░$received_for}} ╎├──────value: CALLER - ╎├considering: } }}${if def:sender_helo_name {(helo=$sender_helo_name) - ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - ╎ }}(Exim $version_number) - ╎ ${if def:sender_address {(envelope-from <$sender_address>) - ╎ }}id $message_exim_id${if def:received_for { - ╎ for $received_for}} - ╎├──expanding: $sender_ident + ╎├considering: }░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ╎␉}}(Exim░$version_number)↩ + ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ╎␉}}id░$message_exim_id${if░def:received_for░{↩ + ╎␉for░$received_for}} + ╎├───expanded: $sender_ident ╎╰─────result: CALLER ├─────op-res: CALLER - ├considering: }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: from ${quote_local_part:$sender_ident} - ╰─────result: from CALLER - ├───item-res: from CALLER - ├considering: ${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: }}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: from░${quote_local_part:$sender_ident}░ + ╰─────result: from░CALLER░ + ├───item-res: from░CALLER░ + ├considering: ${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_helo_name ├─────result: false - ╭───scanning: (helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭───scanning: (helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├───────text: (helo= - ├───scanning: $sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├───scanning: $sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: - ├───scanning: ) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: ) - - ├───scanning: }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: (helo=$sender_helo_name) - - ├─────result: (helo=) - + ├───scanning: )↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: )↩ + ␉ + ├───scanning: }}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: (helo=$sender_helo_name)↩ + ␉ + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: - ├considering: }}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }} - ╰─────result: from CALLER - ├───item-res: from CALLER - ├considering: by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: by - ├considering: $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: }}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}} + ╰─────result: from░CALLER░ + ├───item-res: from░CALLER░ + ├considering: by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: by░ + ├considering: $primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: mail.test.ex - ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: ${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:received_protocol ├─────result: true - ╭considering: with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: with - ├considering: $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: with░ + ├considering: $received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: local - ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: with $received_protocol - ╰─────result: with local - ├───item-res: with local - ├considering: ${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: ($tls_in_ver) - ├─────result: () + ├considering: ░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: }}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: with░$received_protocol░ + ╰─────result: with░local░ + ├───item-res: with░local░ + ├considering: ${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ░($tls_in_ver) + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: - ├considering: ${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:tls_in_cipher_std ├─────result: false - ╭───scanning: tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: tls - ├───scanning: $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭───scanning: ░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░tls░ + ├───scanning: $tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: - ├───scanning: - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - - ├───scanning: }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: tls $tls_in_cipher_std - - ├─────result: tls - + ├───scanning: ↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉ + ├───scanning: }}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ░tls░$tls_in_cipher_std↩ + ␉ + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: - ├considering: (Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: (Exim - ├considering: $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: (Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: (Exim░ + ├considering: $version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: x.yz - ├considering: ) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: ) - - ├considering: ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: )↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: )↩ + ␉ + ├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_address ├─────result: true - ╭considering: (envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: (envelope-from < - ├considering: $sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: (envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: (envelope-from░< + ├considering: $sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: CALLER@test.ex - ├considering: >) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: >) - - ├considering: }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: (envelope-from <$sender_address>) - - ╰─────result: (envelope-from ) - - ├───item-res: (envelope-from ) - - ├considering: id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: id - ├considering: $message_exim_id${if def:received_for { - for $received_for}} + ├considering: >)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: >)↩ + ␉ + ├considering: }}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: (envelope-from░<$sender_address>)↩ + ␉ + ╰─────result: (envelope-from░)↩ + ␉ + ├───item-res: (envelope-from░)↩ + ␉ + ├considering: id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: id░ + ├considering: $message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: 10HmaX-000000005vi-0000 - ├considering: ${if def:received_for { - for $received_for}} + ├considering: ${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:received_for ├─────result: false - ╭───scanning: - for $received_for}} - ├───────text: - for + ╭───scanning: ↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉for░ ├───scanning: $received_for}} ├──────value: ├───scanning: }} - ├──expanding: - for $received_for - ├─────result: - for + ├───expanded: ↩ + ␉for░$received_for + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: - ├──expanding: Received: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ╰─────result: Received: from CALLER by mail.test.ex with local (Exim x.yz) - (envelope-from ) - id 10HmaX-000000005vi-0000 + ├───expanded: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ╰─────result: Received:░from░CALLER░by░mail.test.ex░with░local░(Exim░x.yz)↩ + ␉(envelope-from░)↩ + ␉id░10HmaX-000000005vi-0000 >>Generated Received: header line P Received: from CALLER by mail.test.ex with local (Exim x.yz) (envelope-from ) id 10HmaX-000000005vi-0000; Tue, 2 Mar 1999 09:44:33 +0000 +try option acl_not_smtp ╭considering: ${tod_full} - ├──expanding: ${tod_full} - ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 + ├───expanded: ${tod_full} + ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 Writing spool header file: TESTSUITE/spool//input//hdr.10HmaX-000000005vi-0000 DSN: **** SPOOL_OUT - address: errorsto: orcpt: dsn_flags: 0x0 DSN: **** SPOOL_OUT - address: errorsto: orcpt: dsn_flags: 0x0 @@ -397,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: @@ -439,8 +447,6 @@ Delivery address list: userz@test.ex rd+CALLER@test.ex rd+usery@test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -480,58 +486,64 @@ routing rd+usery@test.ex --------> r1 router <-------- local_part=rd+usery domain=test.ex checking local_parts -rd+usery in "CALLER"? +rd+usery in local_parts? list element: CALLER -rd+usery in "CALLER"? no (end of list) +rd+usery in local_parts? no (end of list) r1 router skipped: local_parts mismatch --------> r2 router <-------- local_part=rd+usery domain=test.ex checking local_parts -rd+usery in "usery"? +rd+usery in local_parts? list element: usery -rd+usery in "usery"? no (end of list) +rd+usery in local_parts? no (end of list) r2 router skipped: local_parts mismatch --------> r3 router <-------- local_part=rd+usery domain=test.ex checking local_parts -rd+usery in "userz"? +rd+usery in local_parts? list element: userz -rd+usery in "userz"? no (end of list) +rd+usery in local_parts? no (end of list) r3 router skipped: local_parts mismatch --------> r4 router <-------- local_part=rd+usery domain=test.ex stripped prefix rd+ checking local_parts -usery in "CALLER"? +usery in local_parts? list element: CALLER -usery in "CALLER"? no (end of list) +usery in local_parts? no (end of list) r4 router skipped: local_parts mismatch --------> r5 router <-------- local_part=rd+usery domain=test.ex stripped prefix rd+ checking local_parts -usery in "usery"? +usery in local_parts? list element: usery - usery in "usery"? yes (matched "usery") + usery in local_parts? yes (matched "usery") +try option router_home_directory ╭considering: /non-exist/$domain ├───────text: /non-exist/ ├considering: $domain ├──────value: test.ex ╰──(tainted) - ├──expanding: /non-exist/$domain + ├───expanded: /non-exist/$domain ╰─────result: /non-exist/test.ex ╰──(tainted) +try option set calling r5 router +try option qualify_domain rda_interpret (string): 'TESTSUITE/test-mail/junk' expanded: 'TESTSUITE/test-mail/junk' file is not a filter file parse_forward_list: TESTSUITE/test-mail/junk extract item: TESTSUITE/test-mail/junk +try option file_transport +try option transport set transport ft1 r5 router generated TESTSUITE/test-mail/junk pipe, file, or autoreply errors_to=NULL transport=ft1 uid=unset gid=unset home=/non-exist/$local_part +try option unseen routed by r5 router envelope to: rd+usery@test.ex transport: @@ -540,50 +552,56 @@ routing rd+CALLER@test.ex --------> r1 router <-------- local_part=rd+CALLER domain=test.ex checking local_parts -rd+CALLER in "CALLER"? +rd+CALLER in local_parts? list element: CALLER -rd+CALLER in "CALLER"? no (end of list) +rd+CALLER in local_parts? no (end of list) r1 router skipped: local_parts mismatch --------> r2 router <-------- local_part=rd+CALLER domain=test.ex checking local_parts -rd+CALLER in "usery"? +rd+CALLER in local_parts? list element: usery -rd+CALLER in "usery"? no (end of list) +rd+CALLER in local_parts? no (end of list) r2 router skipped: local_parts mismatch --------> r3 router <-------- local_part=rd+CALLER domain=test.ex checking local_parts -rd+CALLER in "userz"? +rd+CALLER in local_parts? list element: userz -rd+CALLER in "userz"? no (end of list) +rd+CALLER in local_parts? no (end of list) r3 router skipped: local_parts mismatch --------> r4 router <-------- local_part=rd+CALLER domain=test.ex stripped prefix rd+ checking local_parts -CALLER in "CALLER"? +CALLER in local_parts? list element: CALLER - CALLER in "CALLER"? yes (matched "CALLER") + CALLER in local_parts? yes (matched "CALLER") +try option router_home_directory ╭considering: /non-exist/$local_part ├───────text: /non-exist/ ├considering: $local_part ├──────value: CALLER ╰──(tainted) - ├──expanding: /non-exist/$local_part + ├───expanded: /non-exist/$local_part ╰─────result: /non-exist/CALLER ╰──(tainted) +try option set calling r4 router +try option qualify_domain rda_interpret (string): 'TESTSUITE/test-mail/junk' expanded: 'TESTSUITE/test-mail/junk' file is not a filter file parse_forward_list: TESTSUITE/test-mail/junk extract item: TESTSUITE/test-mail/junk +try option file_transport +try option transport set transport ft1 r4 router generated TESTSUITE/test-mail/junk pipe, file, or autoreply errors_to=NULL transport=ft1 uid=unset gid=unset home=/non-exist/CALLER +try option unseen routed by r4 router envelope to: rd+CALLER@test.ex transport: @@ -592,39 +610,43 @@ routing userz@test.ex --------> r1 router <-------- local_part=userz domain=test.ex checking local_parts -userz in "CALLER"? +userz in local_parts? list element: CALLER -userz in "CALLER"? no (end of list) +userz in local_parts? no (end of list) r1 router skipped: local_parts mismatch --------> r2 router <-------- local_part=userz domain=test.ex checking local_parts -userz in "usery"? +userz in local_parts? list element: usery -userz in "usery"? no (end of list) +userz in local_parts? no (end of list) r2 router skipped: local_parts mismatch --------> r3 router <-------- local_part=userz domain=test.ex checking local_parts -userz in "userz"? +userz in local_parts? list element: userz - userz in "userz"? yes (matched "userz") + userz in local_parts? yes (matched "userz") +try option router_home_directory ╭considering: /non-exist/$domain ├───────text: /non-exist/ ├considering: $domain ├──────value: test.ex ╰──(tainted) - ├──expanding: /non-exist/$domain + ├───expanded: /non-exist/$domain ╰─────result: /non-exist/test.ex ╰──(tainted) +try option set calling r3 router r3 router called for userz@test.ex domain = test.ex +try option transport set transport t2 queued for t2 transport: local_part = userz domain = test.ex errors_to=NULL domain_data=NULL local_part_data=userz +try option unseen routed by r3 router envelope to: userz@test.ex transport: t2 @@ -633,32 +655,36 @@ routing usery@test.ex --------> r1 router <-------- local_part=usery domain=test.ex checking local_parts -usery in "CALLER"? +usery in local_parts? list element: CALLER -usery in "CALLER"? no (end of list) +usery in local_parts? no (end of list) r1 router skipped: local_parts mismatch --------> r2 router <-------- local_part=usery domain=test.ex checking local_parts -usery in "usery"? +usery in local_parts? list element: usery - usery in "usery"? yes (matched "usery") + usery in local_parts? yes (matched "usery") +try option router_home_directory ╭considering: /non-exist/$domain ├───────text: /non-exist/ ├considering: $domain ├──────value: test.ex ╰──(tainted) - ├──expanding: /non-exist/$domain + ├───expanded: /non-exist/$domain ╰─────result: /non-exist/test.ex ╰──(tainted) +try option set calling r2 router r2 router called for usery@test.ex domain = test.ex +try option transport set transport t1 queued for t1 transport: local_part = usery domain = test.ex errors_to=NULL domain_data=NULL local_part_data=usery +try option unseen routed by r2 router envelope to: usery@test.ex transport: t1 @@ -667,30 +693,32 @@ routing CALLER@test.ex --------> r1 router <-------- local_part=CALLER domain=test.ex checking local_parts -CALLER in "CALLER"? +CALLER in local_parts? list element: CALLER - CALLER in "CALLER"? yes (matched "CALLER") + CALLER in local_parts? yes (matched "CALLER") +try option router_home_directory ╭considering: /non-exist/$local_part ├───────text: /non-exist/ ├considering: $local_part ├──────value: CALLER ╰──(tainted) - ├──expanding: /non-exist/$local_part + ├───expanded: /non-exist/$local_part ╰─────result: /non-exist/CALLER ╰──(tainted) +try option set calling r1 router r1 router called for CALLER@test.ex domain = test.ex +try option transport set transport t1 queued for t1 transport: local_part = CALLER domain = test.ex errors_to=NULL domain_data=NULL local_part_data=CALLER +try option unseen routed by r1 router envelope to: CALLER@test.ex transport: t1 - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -717,21 +745,28 @@ After routing: search_tidyup called >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> TESTSUITE/test-mail/junk <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory no retry data available +try option max_parallel +try option return_path +try option home_directory ╭considering: /non-exist/$local_part ├───────text: /non-exist/ ├considering: $local_part ├──────value: usery ╰──(tainted) - ├──expanding: /non-exist/$local_part + ├───expanded: /non-exist/$local_part ╰─────result: /non-exist/usery ╰──(tainted) +try option current_directory search_tidyup called +try option quota +try option quota_filecount +try option quota_warn_threshold +try option mailbox_size +try option mailbox_filecount changed uid/gid: local delivery to TESTSUITE/test-mail/junk transport=ft1 uid=CALLER_UID gid=CALLER_GID pid=p1236 home=/non-exist/usery current=/ @@ -739,7 +774,7 @@ set_process_info: pppp delivering 10HmaX-000000005vi-0000 to TESTSUITE/test-mail appendfile transport entered ╭considering: $address_file ├──────value: TESTSUITE/test-mail/junk - ├──expanding: $address_file + ├───expanded: $address_file ╰─────result: TESTSUITE/test-mail/junk appendfile: mode=600 notify_comsat=0 quota=0 warning=0 file=TESTSUITE/test-mail/junk format=unix @@ -752,52 +787,55 @@ hitch name: TESTSUITE/test-mail/junk.lock.test.ex.dddddddd.pppppppp lock file created mailbox TESTSUITE/test-mail/junk is locked writing to file TESTSUITE/test-mail/junk - ╭considering: From ${if def:return_path{$return_path}{MAILER-DAEMON}} ${tod_bsdinbox} +try option message_prefix + ╭considering: From░${if░def:return_path{$return_path}{MAILER-DAEMON}}░${tod_bsdinbox}↩ - ├───────text: From - ├considering: ${if def:return_path{$return_path}{MAILER-DAEMON}} ${tod_bsdinbox} + ├───────text: From░ + ├considering: ${if░def:return_path{$return_path}{MAILER-DAEMON}}░${tod_bsdinbox}↩ ├──condition: def:return_path ├─────result: true - ╭considering: $return_path}{MAILER-DAEMON}} ${tod_bsdinbox} + ╭considering: $return_path}{MAILER-DAEMON}}░${tod_bsdinbox}↩ ├──────value: CALLER@test.ex ╰──(tainted) - ├considering: }{MAILER-DAEMON}} ${tod_bsdinbox} + ├considering: }{MAILER-DAEMON}}░${tod_bsdinbox}↩ - ├──expanding: $return_path + ├───expanded: $return_path ╰─────result: CALLER@test.ex ╰──(tainted) - ╭───scanning: MAILER-DAEMON}} ${tod_bsdinbox} + ╭───scanning: MAILER-DAEMON}}░${tod_bsdinbox}↩ ├───────text: MAILER-DAEMON - ├───scanning: }} ${tod_bsdinbox} + ├───scanning: }}░${tod_bsdinbox}↩ - ├──expanding: MAILER-DAEMON - ├─────result: MAILER-DAEMON + ├───expanded: MAILER-DAEMON + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: CALLER@test.ex ╰──(tainted) - ├considering: ${tod_bsdinbox} + ├considering: ░${tod_bsdinbox}↩ - ├───────text: - ├considering: ${tod_bsdinbox} + ├───────text: ░ + ├considering: ${tod_bsdinbox}↩ - ├considering: + ├considering: ↩ - ├───────text: + ├───────text: ↩ - ├──expanding: From ${if def:return_path{$return_path}{MAILER-DAEMON}} ${tod_bsdinbox} + ├───expanded: From░${if░def:return_path{$return_path}{MAILER-DAEMON}}░${tod_bsdinbox}↩ - ╰─────result: From CALLER@test.ex Tue Mar 02 09:44:33 1999 + ╰─────result: From░CALLER@test.ex░Tue░Mar░02░09:44:33░1999↩ ╰──(tainted) writing data block fd=dddd size=sss timeout=0 cannot use sendfile for body: spoolfile not wireformat writing data block fd=dddd size=sss timeout=0 +try option message_suffix writing data block fd=dddd size=sss timeout=0 appendfile yields 0 with errno=dd more_errno=dd search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1236 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling TESTSUITE/test-mail/junk:rd+usery@test.ex ft1 transport returned OK for TESTSUITE/test-mail/junk post-process TESTSUITE/test-mail/junk (0) @@ -806,13 +844,20 @@ rd+usery@test.ex: children all complete LOG: MAIN => TESTSUITE/test-mail/junk R=r5 T=ft1 --------> TESTSUITE/test-mail/junk <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory no retry data available +try option max_parallel +try option return_path +try option home_directory +try option current_directory search_tidyup called +try option quota +try option quota_filecount +try option quota_warn_threshold +try option mailbox_size +try option mailbox_filecount changed uid/gid: local delivery to TESTSUITE/test-mail/junk transport=ft1 uid=CALLER_UID gid=CALLER_GID pid=p1237 home=/non-exist/CALLER current=/ @@ -820,7 +865,7 @@ set_process_info: pppp delivering 10HmaX-000000005vi-0000 to TESTSUITE/test-mail appendfile transport entered ╭considering: $address_file ├──────value: TESTSUITE/test-mail/junk - ├──expanding: $address_file + ├───expanded: $address_file ╰─────result: TESTSUITE/test-mail/junk appendfile: mode=600 notify_comsat=0 quota=0 warning=0 file=TESTSUITE/test-mail/junk format=unix @@ -833,52 +878,55 @@ hitch name: TESTSUITE/test-mail/junk.lock.test.ex.dddddddd.pppppppp lock file created mailbox TESTSUITE/test-mail/junk is locked writing to file TESTSUITE/test-mail/junk - ╭considering: From ${if def:return_path{$return_path}{MAILER-DAEMON}} ${tod_bsdinbox} +try option message_prefix + ╭considering: From░${if░def:return_path{$return_path}{MAILER-DAEMON}}░${tod_bsdinbox}↩ - ├───────text: From - ├considering: ${if def:return_path{$return_path}{MAILER-DAEMON}} ${tod_bsdinbox} + ├───────text: From░ + ├considering: ${if░def:return_path{$return_path}{MAILER-DAEMON}}░${tod_bsdinbox}↩ ├──condition: def:return_path ├─────result: true - ╭considering: $return_path}{MAILER-DAEMON}} ${tod_bsdinbox} + ╭considering: $return_path}{MAILER-DAEMON}}░${tod_bsdinbox}↩ ├──────value: CALLER@test.ex ╰──(tainted) - ├considering: }{MAILER-DAEMON}} ${tod_bsdinbox} + ├considering: }{MAILER-DAEMON}}░${tod_bsdinbox}↩ - ├──expanding: $return_path + ├───expanded: $return_path ╰─────result: CALLER@test.ex ╰──(tainted) - ╭───scanning: MAILER-DAEMON}} ${tod_bsdinbox} + ╭───scanning: MAILER-DAEMON}}░${tod_bsdinbox}↩ ├───────text: MAILER-DAEMON - ├───scanning: }} ${tod_bsdinbox} + ├───scanning: }}░${tod_bsdinbox}↩ - ├──expanding: MAILER-DAEMON - ├─────result: MAILER-DAEMON + ├───expanded: MAILER-DAEMON + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: CALLER@test.ex ╰──(tainted) - ├considering: ${tod_bsdinbox} + ├considering: ░${tod_bsdinbox}↩ - ├───────text: - ├considering: ${tod_bsdinbox} + ├───────text: ░ + ├considering: ${tod_bsdinbox}↩ - ├considering: + ├considering: ↩ - ├───────text: + ├───────text: ↩ - ├──expanding: From ${if def:return_path{$return_path}{MAILER-DAEMON}} ${tod_bsdinbox} + ├───expanded: From░${if░def:return_path{$return_path}{MAILER-DAEMON}}░${tod_bsdinbox}↩ - ╰─────result: From CALLER@test.ex Tue Mar 02 09:44:33 1999 + ╰─────result: From░CALLER@test.ex░Tue░Mar░02░09:44:33░1999↩ ╰──(tainted) writing data block fd=dddd size=sss timeout=0 cannot use sendfile for body: spoolfile not wireformat writing data block fd=dddd size=sss timeout=0 +try option message_suffix writing data block fd=dddd size=sss timeout=0 appendfile yields 0 with errno=dd more_errno=dd search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1237 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling TESTSUITE/test-mail/junk:rd+CALLER@test.ex ft1 transport returned OK for TESTSUITE/test-mail/junk post-process TESTSUITE/test-mail/junk (0) @@ -887,13 +935,20 @@ rd+CALLER@test.ex: children all complete LOG: MAIN => TESTSUITE/test-mail/junk R=r4 T=ft1 --------> CALLER@test.ex <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory no retry data available +try option max_parallel +try option return_path +try option home_directory +try option current_directory search_tidyup called +try option quota +try option quota_filecount +try option quota_warn_threshold +try option mailbox_size +try option mailbox_filecount changed uid/gid: local delivery to CALLER transport=t1 uid=CALLER_UID gid=CALLER_GID pid=p1238 home=/non-exist/CALLER current=/ @@ -906,6 +961,7 @@ appendfile: mode=600 notify_comsat=0 quota=0 warning=0 maildir_use_size_file=no locking by lockfile fcntl search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1238 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling CALLER@test.ex t1 transport returned OK for CALLER@test.ex post-process CALLER@test.ex (0) @@ -913,21 +969,28 @@ CALLER@test.ex delivered LOG: MAIN => CALLER R=r1 T=t1 --------> usery@test.ex <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory no retry data available +try option max_parallel +try option return_path +try option home_directory ╭considering: /non-exist/$local_part ├───────text: /non-exist/ ├considering: $local_part ├──────value: usery ╰──(tainted) - ├──expanding: /non-exist/$local_part + ├───expanded: /non-exist/$local_part ╰─────result: /non-exist/usery ╰──(tainted) +try option current_directory search_tidyup called +try option quota +try option quota_filecount +try option quota_warn_threshold +try option mailbox_size +try option mailbox_filecount changed uid/gid: local delivery to usery transport=t1 uid=CALLER_UID gid=CALLER_GID pid=p1239 home=/non-exist/usery current=/ @@ -940,6 +1003,7 @@ appendfile: mode=600 notify_comsat=0 quota=0 warning=0 maildir_use_size_file=no locking by lockfile fcntl search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1239 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling usery@test.ex t1 transport returned OK for usery@test.ex post-process usery@test.ex (0) @@ -947,21 +1011,28 @@ usery@test.ex delivered LOG: MAIN => usery R=r2 T=t1 --------> userz@test.ex <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory no retry data available +try option max_parallel +try option return_path +try option home_directory ╭considering: /$local_part ├───────text: / ├considering: $local_part ├──────value: userz ╰──(tainted) - ├──expanding: /$local_part + ├───expanded: /$local_part ╰─────result: /userz ╰──(tainted) +try option current_directory search_tidyup called +try option quota +try option quota_filecount +try option quota_warn_threshold +try option mailbox_size +try option mailbox_filecount changed uid/gid: local delivery to userz transport=t2 uid=CALLER_UID gid=CALLER_GID pid=p1240 home=/userz current=/ @@ -974,6 +1045,7 @@ appendfile: mode=600 notify_comsat=0 quota=0 warning=0 maildir_use_size_file=no locking by lockfile fcntl search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1240 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling userz@test.ex t2 transport returned OK for userz@test.ex post-process userz@test.ex (0) @@ -985,18 +1057,18 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1235 set_process_info: pppp tidying up after delivering 10HmaX-000000005vi-0000 Processing retry items -Succeeded addresses: - userz@test.ex: no retry items - usery@test.ex: no retry items - CALLER@test.ex: no retry items - TESTSUITE/test-mail/junk: no retry items - rd+CALLER@test.ex: no retry items - TESTSUITE/test-mail/junk: no retry items - rd+usery@test.ex: no retry items - rd+CALLER@test.ex: no retry items - rd+usery@test.ex: no retry items -Failed addresses: -Deferred addresses: + Succeeded addresses: + userz@test.ex: no retry items + usery@test.ex: no retry items + CALLER@test.ex: no retry items + TESTSUITE/test-mail/junk: no retry items + rd+CALLER@test.ex: no retry items + TESTSUITE/test-mail/junk: no retry items + rd+usery@test.ex: no retry items + rd+CALLER@test.ex: no retry items + rd+usery@test.ex: no retry items + Failed addresses: + Deferred addresses: end of retry processing DSN: processing router : r3 DSN: processing successful delivery address: userz@test.ex diff --git a/test/stderr/0403 b/test/stderr/0403 index ae0388347..39b958d45 100644 --- a/test/stderr/0403 +++ b/test/stderr/0403 @@ -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 @@ -19,15 +20,15 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=F: From: CALLER_NAME search_tidyup called >>Headers after rewriting and local additions: -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaX-000000005vi-0000-D Data file written for message 10HmaX-000000005vi-0000 @@ -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 @@ -70,8 +72,6 @@ body_linecount=0 message_linecount=8 DSN: set orcpt: flags: 0x0 Delivery address list: userx@test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -99,13 +99,13 @@ checking domains in TESTSUITE/aux-fixed/0403.accountfile creating new cache entry lookup failed -test.ex in ""? -test.ex in ""? no (end of list) +test.ex in domains? +test.ex in domains? no (end of list) r1 router skipped: domains mismatch --------> r2 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "lsearch;TESTSUITE/aux-fixed/0403.data"? +test.ex in domains? list element: lsearch;TESTSUITE/aux-fixed/0403.data search_open: lsearch "TESTSUITE/aux-fixed/0403.data" search_find: file="TESTSUITE/aux-fixed/0403.data" @@ -120,9 +120,9 @@ test.ex in "lsearch;TESTSUITE/aux-fixed/0403.data"? in TESTSUITE/aux-fixed/0403.data creating new cache entry lookup yielded: [DOMAINDATA_test.ex] - test.ex in "lsearch;TESTSUITE/aux-fixed/0403.data"? yes (matched "lsearch;TESTSUITE/aux-fixed/0403.data") + test.ex in domains? yes (matched "lsearch;TESTSUITE/aux-fixed/0403.data") checking local_parts -userx in "lsearch;TESTSUITE/aux-fixed/0403.data"? +userx in local_parts? list element: lsearch;TESTSUITE/aux-fixed/0403.data search_open: lsearch "TESTSUITE/aux-fixed/0403.data" cached open @@ -138,7 +138,7 @@ userx in "lsearch;TESTSUITE/aux-fixed/0403.data"? in TESTSUITE/aux-fixed/0403.data creating new cache entry lookup yielded: [LOCALPARTDATA_userx] - userx in "lsearch;TESTSUITE/aux-fixed/0403.data"? yes (matched "lsearch;TESTSUITE/aux-fixed/0403.data") + userx in local_parts? yes (matched "lsearch;TESTSUITE/aux-fixed/0403.data") +++ROUTER: +++domain_data=[DOMAINDATA_test.ex] +++local_part_data=[LOCALPARTDATA_userx] @@ -159,8 +159,6 @@ r2 router generated TESTSUITE/test-mail/junk routed by r2 router envelope to: userx@test.ex transport: - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -179,8 +177,6 @@ After routing: search_tidyup called >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> TESTSUITE/test-mail/junk <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -204,6 +200,7 @@ appendfile: mode=600 notify_comsat=0 quota=0 warning=0 locking by lockfile fcntl *** delivery by t1 transport bypassed by -N option search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1236 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling TESTSUITE/test-mail/junk:userx@test.ex t1 transport returned OK for TESTSUITE/test-mail/junk post-process TESTSUITE/test-mail/junk (0) @@ -241,6 +238,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 @@ -261,15 +259,15 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=F: From: CALLER_NAME search_tidyup called >>Headers after rewriting and local additions: -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaY-000000005vi-0000-D Data file written for message 10HmaY-000000005vi-0000 @@ -288,6 +286,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 @@ -311,8 +310,6 @@ body_linecount=0 message_linecount=8 DSN: set orcpt: flags: 0x0 Delivery address list: charlie@dom1.ain - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -340,9 +337,10 @@ checking domains in TESTSUITE/aux-fixed/0403.accountfile creating new cache entry lookup yielded: -dom1.ain in "dom1.ain"? + lookup yield replace by key: charlie@dom1.ain +dom1.ain in domains? list element: dom1.ain - dom1.ain in "dom1.ain"? yes (matched "dom1.ain") + dom1.ain in domains? yes (matched "dom1.ain") checking local_parts search_open: lsearch "TESTSUITE/aux-fixed/0403.accountfile" cached open @@ -356,9 +354,10 @@ checking local_parts cached data used for lookup of charlie@dom1.ain in TESTSUITE/aux-fixed/0403.accountfile lookup yielded: -charlie in "charlie"? + lookup yield replace by key: charlie@dom1.ain +charlie in local_parts? list element: charlie - charlie in "charlie"? yes (matched "charlie") + charlie in local_parts? yes (matched "charlie") +++ROUTER: +++domain_data=dom1.ain +++local_part_data=charlie @@ -376,8 +375,6 @@ r1 router generated TESTSUITE/test-mail/junk routed by r1 router envelope to: charlie@dom1.ain transport: - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -396,8 +393,6 @@ After routing: search_tidyup called >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> TESTSUITE/test-mail/junk <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -421,6 +416,7 @@ appendfile: mode=600 notify_comsat=0 quota=0 warning=0 locking by lockfile fcntl *** delivery by t1 transport bypassed by -N option search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1239 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling TESTSUITE/test-mail/junk:charlie@dom1.ain t1 transport returned OK for TESTSUITE/test-mail/junk post-process TESTSUITE/test-mail/junk (0) diff --git a/test/stderr/0404 b/test/stderr/0404 index 774121b92..c553daf88 100644 --- a/test/stderr/0404 +++ b/test/stderr/0404 @@ -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 @@ -53,8 +54,8 @@ Reply-to: sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, **** debug string too long - truncated **** qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=R: Reply-to: sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, @@ -92,7 +93,8 @@ rewrite headers From: CALLER_NAME search_tidyup called >>Headers after rewriting and local additions: -R Reply-to: sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, + R Reply-to: sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, + sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, @@ -121,12 +123,11 @@ R Reply-to: sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, - sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, - sender@test.ex, sender@test.ex, sender@ + sender@test.ex, sender@test.ex, sender **** debug string too long - truncated **** -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaX-000000005vi-0000-D Data file written for message 10HmaX-000000005vi-0000 @@ -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 @@ -171,8 +173,6 @@ body_linecount=0 message_linecount=160 DSN: set orcpt: flags: 0x0 Delivery address list: userx@test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -188,9 +188,9 @@ routing userx@test.ex --------> r1 router <-------- local_part=userx domain=test.ex checking local_parts -userx in "sender"? +userx in local_parts? list element: sender -userx in "sender"? no (end of list) +userx in local_parts? no (end of list) r1 router skipped: local_parts mismatch --------> r2 router <-------- local_part=userx domain=test.ex @@ -217,8 +217,6 @@ r2 router generated >sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex routed by r2 router envelope to: userx@test.ex transport: - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -237,8 +235,6 @@ After routing: search_tidyup called >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> >sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex, ... <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -252,6 +248,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 @@ -277,8 +274,8 @@ References: Auto-Submitted: auto-replied qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=T: To: sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, **** debug string too long - truncated **** @@ -286,14 +283,14 @@ rewrite headers From: CALLER_NAME search_tidyup called >>Headers after rewriting and local additions: -T To: sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.e -**** debug string too long - truncated **** - In-Reply-To: - References: - Auto-Submitted: auto-replied -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + T To: sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test.ex, sender@test. + **** debug string too long - truncated **** + In-Reply-To: + References: + Auto-Submitted: auto-replied + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaY-000000005vi-0000-D Data file written for message 10HmaY-000000005vi-0000 @@ -917,6 +914,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 @@ -2763,8 +2761,6 @@ Delivery address list: sender@test.ex sender@test.ex sender@test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -6422,9 +6418,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6441,9 +6437,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6459,9 +6455,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6477,9 +6473,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6495,9 +6491,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6513,9 +6509,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6531,9 +6527,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6549,9 +6545,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6567,9 +6563,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6585,9 +6581,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6603,9 +6599,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6621,9 +6617,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6639,9 +6635,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6657,9 +6653,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6675,9 +6671,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6693,9 +6689,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6711,9 +6707,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6729,9 +6725,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6747,9 +6743,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6765,9 +6761,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6783,9 +6779,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6801,9 +6797,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6819,9 +6815,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6837,9 +6833,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6855,9 +6851,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6873,9 +6869,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6891,9 +6887,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6909,9 +6905,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6927,9 +6923,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6945,9 +6941,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6963,9 +6959,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6981,9 +6977,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -6999,9 +6995,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7017,9 +7013,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7035,9 +7031,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7053,9 +7049,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7071,9 +7067,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7089,9 +7085,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7107,9 +7103,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7125,9 +7121,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7143,9 +7139,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7161,9 +7157,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7179,9 +7175,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7197,9 +7193,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7215,9 +7211,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7233,9 +7229,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7251,9 +7247,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7269,9 +7265,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7287,9 +7283,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7305,9 +7301,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7323,9 +7319,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7341,9 +7337,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7359,9 +7355,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7377,9 +7373,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7395,9 +7391,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7413,9 +7409,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7431,9 +7427,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7449,9 +7445,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7467,9 +7463,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7485,9 +7481,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7503,9 +7499,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7521,9 +7517,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7539,9 +7535,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7557,9 +7553,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7575,9 +7571,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7593,9 +7589,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7611,9 +7607,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7629,9 +7625,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7647,9 +7643,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7665,9 +7661,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7683,9 +7679,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7701,9 +7697,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7719,9 +7715,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7737,9 +7733,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7755,9 +7751,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7773,9 +7769,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7791,9 +7787,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7809,9 +7805,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7827,9 +7823,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7845,9 +7841,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7863,9 +7859,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7881,9 +7877,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7899,9 +7895,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7917,9 +7913,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7935,9 +7931,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7953,9 +7949,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7971,9 +7967,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -7989,9 +7985,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8007,9 +8003,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8025,9 +8021,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8043,9 +8039,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8061,9 +8057,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8079,9 +8075,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8097,9 +8093,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8115,9 +8111,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8133,9 +8129,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8151,9 +8147,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8169,9 +8165,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8187,9 +8183,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8205,9 +8201,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8223,9 +8219,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8241,9 +8237,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8259,9 +8255,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8277,9 +8273,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8295,9 +8291,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8313,9 +8309,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8331,9 +8327,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8349,9 +8345,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8367,9 +8363,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8385,9 +8381,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8403,9 +8399,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8421,9 +8417,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8439,9 +8435,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8457,9 +8453,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8475,9 +8471,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8493,9 +8489,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8511,9 +8507,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8529,9 +8525,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8547,9 +8543,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8565,9 +8561,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8583,9 +8579,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8601,9 +8597,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8619,9 +8615,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8637,9 +8633,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8655,9 +8651,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8673,9 +8669,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8691,9 +8687,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8709,9 +8705,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8727,9 +8723,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8745,9 +8741,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8763,9 +8759,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8781,9 +8777,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8799,9 +8795,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8817,9 +8813,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8835,9 +8831,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8853,9 +8849,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8871,9 +8867,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8889,9 +8885,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8907,9 +8903,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8925,9 +8921,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8943,9 +8939,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8961,9 +8957,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8979,9 +8975,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -8997,9 +8993,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9015,9 +9011,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9033,9 +9029,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9051,9 +9047,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9069,9 +9065,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9087,9 +9083,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9105,9 +9101,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9123,9 +9119,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9141,9 +9137,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9159,9 +9155,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9177,9 +9173,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9195,9 +9191,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9213,9 +9209,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9231,9 +9227,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9249,9 +9245,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9267,9 +9263,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9285,9 +9281,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9303,9 +9299,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9321,9 +9317,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9339,9 +9335,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9357,9 +9353,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9375,9 +9371,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9393,9 +9389,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9411,9 +9407,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9429,9 +9425,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9447,9 +9443,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9465,9 +9461,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9483,9 +9479,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9501,9 +9497,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9519,9 +9515,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9537,9 +9533,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9555,9 +9551,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9573,9 +9569,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9591,9 +9587,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9609,9 +9605,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9627,9 +9623,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9645,9 +9641,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9663,9 +9659,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9681,9 +9677,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9699,9 +9695,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9717,9 +9713,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9735,9 +9731,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9753,9 +9749,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9771,9 +9767,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9789,9 +9785,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9807,9 +9803,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9825,9 +9821,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9843,9 +9839,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9861,9 +9857,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9879,9 +9875,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9897,9 +9893,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9915,9 +9911,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9933,9 +9929,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9951,9 +9947,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9969,9 +9965,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -9987,9 +9983,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10005,9 +10001,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10023,9 +10019,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10041,9 +10037,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10059,9 +10055,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10077,9 +10073,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10095,9 +10091,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10113,9 +10109,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10131,9 +10127,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10149,9 +10145,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10167,9 +10163,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10185,9 +10181,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10203,9 +10199,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10221,9 +10217,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10239,9 +10235,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10257,9 +10253,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10275,9 +10271,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10293,9 +10289,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10311,9 +10307,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10329,9 +10325,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10347,9 +10343,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10365,9 +10361,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10383,9 +10379,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10401,9 +10397,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10419,9 +10415,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10437,9 +10433,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10455,9 +10451,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10473,9 +10469,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10491,9 +10487,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10509,9 +10505,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10527,9 +10523,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10545,9 +10541,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10563,9 +10559,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10581,9 +10577,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10599,9 +10595,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10617,9 +10613,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10635,9 +10631,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10653,9 +10649,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10671,9 +10667,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10689,9 +10685,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10707,9 +10703,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10725,9 +10721,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10743,9 +10739,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10761,9 +10757,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10779,9 +10775,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10797,9 +10793,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10815,9 +10811,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10833,9 +10829,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10851,9 +10847,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10869,9 +10865,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10887,9 +10883,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10905,9 +10901,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10923,9 +10919,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10941,9 +10937,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10959,9 +10955,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10977,9 +10973,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -10995,9 +10991,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11013,9 +11009,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11031,9 +11027,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11049,9 +11045,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11067,9 +11063,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11085,9 +11081,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11103,9 +11099,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11121,9 +11117,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11139,9 +11135,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11157,9 +11153,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11175,9 +11171,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11193,9 +11189,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11211,9 +11207,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11229,9 +11225,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11247,9 +11243,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11265,9 +11261,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11283,9 +11279,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11301,9 +11297,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11319,9 +11315,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11337,9 +11333,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11355,9 +11351,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11373,9 +11369,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11391,9 +11387,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11409,9 +11405,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11427,9 +11423,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11445,9 +11441,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11463,9 +11459,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11481,9 +11477,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11499,9 +11495,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11517,9 +11513,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11535,9 +11531,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11553,9 +11549,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11571,9 +11567,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11589,9 +11585,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11607,9 +11603,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11625,9 +11621,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11643,9 +11639,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11661,9 +11657,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11679,9 +11675,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11697,9 +11693,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11715,9 +11711,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11733,9 +11729,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11751,9 +11747,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11769,9 +11765,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11787,9 +11783,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11805,9 +11801,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11823,9 +11819,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11841,9 +11837,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11859,9 +11855,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11877,9 +11873,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11895,9 +11891,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11913,9 +11909,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11931,9 +11927,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11949,9 +11945,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11967,9 +11963,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -11985,9 +11981,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12003,9 +11999,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12021,9 +12017,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12039,9 +12035,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12057,9 +12053,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12075,9 +12071,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12093,9 +12089,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12111,9 +12107,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12129,9 +12125,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12147,9 +12143,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12165,9 +12161,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12183,9 +12179,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12201,9 +12197,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12219,9 +12215,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12237,9 +12233,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12255,9 +12251,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12273,9 +12269,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12291,9 +12287,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12309,9 +12305,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12327,9 +12323,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12345,9 +12341,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12363,9 +12359,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12381,9 +12377,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12399,9 +12395,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12417,9 +12413,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12435,9 +12431,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12453,9 +12449,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12471,9 +12467,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12489,9 +12485,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12507,9 +12503,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12525,9 +12521,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12543,9 +12539,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12561,9 +12557,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12579,9 +12575,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12597,9 +12593,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12615,9 +12611,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12633,9 +12629,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12651,9 +12647,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12669,9 +12665,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12687,9 +12683,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12705,9 +12701,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12723,9 +12719,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12741,9 +12737,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12759,9 +12755,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12777,9 +12773,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12795,9 +12791,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12813,9 +12809,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12831,9 +12827,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12849,9 +12845,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12867,9 +12863,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12885,9 +12881,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12903,9 +12899,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12921,9 +12917,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12939,9 +12935,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12957,9 +12953,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12975,9 +12971,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -12993,9 +12989,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13011,9 +13007,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13029,9 +13025,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13047,9 +13043,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13065,9 +13061,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13083,9 +13079,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13101,9 +13097,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13119,9 +13115,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13137,9 +13133,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13155,9 +13151,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13173,9 +13169,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13191,9 +13187,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13209,9 +13205,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13227,9 +13223,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13245,9 +13241,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13263,9 +13259,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13281,9 +13277,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13299,9 +13295,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13317,9 +13313,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13335,9 +13331,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13353,9 +13349,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13371,9 +13367,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13389,9 +13385,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13407,9 +13403,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13425,9 +13421,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13443,9 +13439,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13461,9 +13457,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13479,9 +13475,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13497,9 +13493,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13515,9 +13511,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13533,9 +13529,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13551,9 +13547,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13569,9 +13565,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13587,9 +13583,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13605,9 +13601,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13623,9 +13619,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13641,9 +13637,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13659,9 +13655,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13677,9 +13673,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13695,9 +13691,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13713,9 +13709,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13731,9 +13727,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13749,9 +13745,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13767,9 +13763,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13785,9 +13781,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13803,9 +13799,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13821,9 +13817,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13839,9 +13835,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13857,9 +13853,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13875,9 +13871,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13893,9 +13889,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13911,9 +13907,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13929,9 +13925,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13947,9 +13943,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13965,9 +13961,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -13983,9 +13979,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14001,9 +13997,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14019,9 +14015,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14037,9 +14033,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14055,9 +14051,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14073,9 +14069,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14091,9 +14087,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14109,9 +14105,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14127,9 +14123,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14145,9 +14141,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14163,9 +14159,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14181,9 +14177,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14199,9 +14195,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14217,9 +14213,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14235,9 +14231,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14253,9 +14249,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14271,9 +14267,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14289,9 +14285,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14307,9 +14303,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14325,9 +14321,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14343,9 +14339,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14361,9 +14357,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14379,9 +14375,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14397,9 +14393,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14415,9 +14411,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14433,9 +14429,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14451,9 +14447,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14469,9 +14465,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14487,9 +14483,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14505,9 +14501,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14523,9 +14519,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14541,9 +14537,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14559,9 +14555,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14577,9 +14573,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14595,9 +14591,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14613,9 +14609,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14631,9 +14627,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14649,9 +14645,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14667,9 +14663,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14685,9 +14681,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14703,9 +14699,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14721,9 +14717,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14739,9 +14735,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14757,9 +14753,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14775,9 +14771,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14793,9 +14789,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14811,9 +14807,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14829,9 +14825,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14847,9 +14843,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14865,9 +14861,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14883,9 +14879,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14901,9 +14897,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14919,9 +14915,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14937,9 +14933,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14955,9 +14951,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14973,9 +14969,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -14991,9 +14987,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15009,9 +15005,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15027,9 +15023,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15045,9 +15041,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15063,9 +15059,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15081,9 +15077,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15099,9 +15095,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15117,9 +15113,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15135,9 +15131,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15153,9 +15149,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15171,9 +15167,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15189,9 +15185,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15207,9 +15203,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15225,9 +15221,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15243,9 +15239,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15261,9 +15257,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15279,9 +15275,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15297,9 +15293,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15315,9 +15311,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15333,9 +15329,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15351,9 +15347,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15369,9 +15365,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15387,9 +15383,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15405,9 +15401,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15423,9 +15419,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15441,9 +15437,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15459,9 +15455,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15477,9 +15473,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15495,9 +15491,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15513,9 +15509,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15531,9 +15527,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15549,9 +15545,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15567,9 +15563,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15585,9 +15581,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15603,9 +15599,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15621,9 +15617,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15639,9 +15635,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15657,9 +15653,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15675,9 +15671,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15693,9 +15689,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15711,9 +15707,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15729,9 +15725,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15747,9 +15743,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15765,9 +15761,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15783,9 +15779,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15801,9 +15797,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15819,9 +15815,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15837,9 +15833,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15855,9 +15851,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15873,9 +15869,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15891,9 +15887,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15909,9 +15905,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15927,9 +15923,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15945,9 +15941,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15963,9 +15959,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15981,9 +15977,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -15999,9 +15995,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16017,9 +16013,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16035,9 +16031,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16053,9 +16049,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16071,9 +16067,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16089,9 +16085,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16107,9 +16103,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16125,9 +16121,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16143,9 +16139,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16161,9 +16157,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16179,9 +16175,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16197,9 +16193,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16215,9 +16211,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16233,9 +16229,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16251,9 +16247,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16269,9 +16265,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16287,9 +16283,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16305,9 +16301,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16323,9 +16319,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16341,9 +16337,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16359,9 +16355,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16377,9 +16373,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16395,9 +16391,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16413,9 +16409,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16431,9 +16427,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16449,9 +16445,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16467,9 +16463,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16485,9 +16481,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16503,9 +16499,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16521,9 +16517,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16539,9 +16535,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16557,9 +16553,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16575,9 +16571,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16593,9 +16589,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16611,9 +16607,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16629,9 +16625,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16647,9 +16643,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16665,9 +16661,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16683,9 +16679,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16701,9 +16697,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16719,9 +16715,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16737,9 +16733,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16755,9 +16751,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16773,9 +16769,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16791,9 +16787,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16809,9 +16805,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16827,9 +16823,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16845,9 +16841,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16863,9 +16859,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16881,9 +16877,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16899,9 +16895,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16917,9 +16913,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16935,9 +16931,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16953,9 +16949,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16971,9 +16967,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -16989,9 +16985,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17007,9 +17003,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17025,9 +17021,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17043,9 +17039,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17061,9 +17057,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17079,9 +17075,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17097,9 +17093,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17115,9 +17111,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17133,9 +17129,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17151,9 +17147,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17169,9 +17165,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17187,9 +17183,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17205,9 +17201,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17223,9 +17219,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17241,9 +17237,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17259,9 +17255,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17277,9 +17273,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17295,9 +17291,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17313,9 +17309,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17331,9 +17327,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -17349,9 +17345,9 @@ routing sender@test.ex --------> r1 router <-------- local_part=sender domain=test.ex checking local_parts -sender in "sender"? +sender in local_parts? list element: sender - sender in "sender"? yes (matched "sender") + sender in local_parts? yes (matched "sender") calling r1 router r1 router called for sender@test.ex domain = test.ex @@ -18586,8 +18582,6 @@ sender@test.ex is a duplicate address: discarded sender@test.ex is a duplicate address: discarded >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> sender@test.ex <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -18604,7 +18598,7 @@ appendfile: mode=600 notify_comsat=0 quota=0 warning=0 message_suffix=\n maildir_use_size_file=no locking by lockfile fcntl -de-tainting path 'TESTSUITE/test-mail/sender' +below-home: de-tainting path 'TESTSUITE/test-mail/sender' lock name: TESTSUITE/test-mail/sender.lock hitch name: TESTSUITE/test-mail/sender.lock.test.ex.dddddddd.pppppppp lock file created @@ -18618,6 +18612,7 @@ writing data block fd=dddd size=sss timeout=0 writing data block fd=dddd size=sss timeout=0 appendfile yields 0 with errno=dd more_errno=dd search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1240 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling sender@test.ex t2 transport returned OK for sender@test.ex post-process sender@test.ex (0) @@ -18629,10 +18624,10 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1239 set_process_info: pppp tidying up after delivering 10HmaY-000000005vi-0000 Processing retry items -Succeeded addresses: - sender@test.ex: no retry items -Failed addresses: -Deferred addresses: + Succeeded addresses: + sender@test.ex: no retry items + Failed addresses: + Deferred addresses: end of retry processing DSN: processing router : r1 DSN: processing successful delivery address: sender@test.ex @@ -18652,6 +18647,7 @@ search_tidyup called >>>>>>>>>>>>>>>> Exim pid=p1238 (autoreply) terminating with rc=0 >>>>>>>>>>>>>>>> t1 transport succeeded search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1237 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling >sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex, ...:userx@test.ex t1 transport returned OK for >sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex, ... post-process >sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex, ... (0) @@ -18664,12 +18660,12 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1235 set_process_info: pppp tidying up after delivering 10HmaX-000000005vi-0000 Processing retry items -Succeeded addresses: - >sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex, ...: no retry items - userx@test.ex: no retry items - userx@test.ex: no retry items -Failed addresses: -Deferred addresses: + Succeeded addresses: + >sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex, ...: no retry items + userx@test.ex: no retry items + userx@test.ex: no retry items + Failed addresses: + Deferred addresses: end of retry processing DSN: processing router : r2 DSN: processing successful delivery address: >sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex, ... diff --git a/test/stderr/0408 b/test/stderr/0408 index 7cbaefa0f..99388a95b 100644 --- a/test/stderr/0408 +++ b/test/stderr/0408 @@ -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 @@ -19,15 +20,15 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=F: From: CALLER_NAME search_tidyup called >>Headers after rewriting and local additions: -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaX-000000005vi-0000-D Data file written for message 10HmaX-000000005vi-0000 @@ -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 @@ -70,8 +72,6 @@ body_linecount=0 message_linecount=8 DSN: set orcpt: flags: 0x0 Delivery address list: userx@test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -87,9 +87,9 @@ routing userx@test.ex --------> r1 router <-------- local_part=userx domain=test.ex checking local_parts -userx in "userx : usery"? +userx in local_parts? list element: userx - userx in "userx : usery"? yes (matched "userx") + userx in local_parts? yes (matched "userx") calling r1 router r1 router called for userx@test.ex domain = test.ex @@ -103,10 +103,10 @@ routing usery@test.ex --------> r1 router <-------- local_part=usery domain=test.ex checking local_parts -usery in "userx : usery"? +usery in local_parts? list element: userx list element: usery - usery in "userx : usery"? yes (matched "usery") + usery in local_parts? yes (matched "usery") calling r1 router r1 router called for usery@test.ex domain = test.ex @@ -139,8 +139,6 @@ After routing: search_tidyup called >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> userx@test.ex <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -157,7 +155,7 @@ appendfile: mode=600 notify_comsat=0 quota=0 warning=0 message_suffix=\n maildir_use_size_file=no locking by lockfile fcntl -de-tainting path 'TESTSUITE/test-mail/userx' +below-home: de-tainting path 'TESTSUITE/test-mail/userx' lock name: TESTSUITE/test-mail/userx.lock hitch name: TESTSUITE/test-mail/userx.lock.test.ex.dddddddd.pppppppp lock file created @@ -169,6 +167,7 @@ writing data block fd=dddd size=sss timeout=0 writing data block fd=dddd size=sss timeout=0 appendfile yields 0 with errno=dd more_errno=dd search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1236 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling userx@test.ex t1 transport returned OK for userx@test.ex post-process userx@test.ex (0) @@ -180,10 +179,10 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1235 set_process_info: pppp tidying up after delivering 10HmaX-000000005vi-0000 Processing retry items -Succeeded addresses: - userx@test.ex: no retry items -Failed addresses: -Deferred addresses: + Succeeded addresses: + userx@test.ex: no retry items + Failed addresses: + Deferred addresses: end of retry processing DSN: processing router : r1 DSN: processing successful delivery address: userx@test.ex diff --git a/test/stderr/0414 b/test/stderr/0414 index f1eaccfa7..05abad438 100644 --- a/test/stderr/0414 +++ b/test/stderr/0414 @@ -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 @@ -18,7 +19,7 @@ routing x@b.domain --------> r1 router <-------- local_part=x domain=b.domain checking domains -b.domain in "!+C"? +b.domain in domains? list element: !+C start sublist C b.domain in "+A : +B"? @@ -63,17 +64,17 @@ b.domain in "!+C"? ╎b.domain in "+A : +B"? yes (matched "+B") end sublist C data from lookup saved for cache for +C: key 'b.domain' value 'b.domain-data' - b.domain in "!+C"? no (matched "!+C") + b.domain in domains? no (matched "!+C") r1 router skipped: domains mismatch --------> r2 router <-------- local_part=x domain=b.domain checking domains -b.domain in "+B"? +b.domain in domains? list element: +B start sublist B cached yes match for +B cached lookup data = b.domain-data - b.domain in "+B"? yes (matched "+B" - cached) + b.domain in domains? yes (matched "+B" - cached) domain_data=b.domain-data calling r2 router r2 router called for x@b.domain @@ -95,7 +96,7 @@ routing x@a.domain --------> r1 router <-------- local_part=x domain=a.domain checking domains -a.domain in "!+C"? +a.domain in domains? list element: !+C start sublist C a.domain in "+A : +B"? @@ -123,12 +124,12 @@ a.domain in "!+C"? ╎a.domain in "+A : +B"? yes (matched "+A") end sublist C data from lookup saved for cache for +C: key 'a.domain' value 'a.domain-data' - a.domain in "!+C"? no (matched "!+C") + a.domain in domains? no (matched "!+C") r1 router skipped: domains mismatch --------> r2 router <-------- local_part=x domain=a.domain checking domains -a.domain in "+B"? +a.domain in domains? list element: +B start sublist B a.domain in "lsearch;TESTSUITE/aux-fixed/0414.list2"? @@ -149,17 +150,17 @@ a.domain in "+B"? ╎lookup failed a.domain in "lsearch;TESTSUITE/aux-fixed/0414.list2"? no (end of list) end sublist B -a.domain in "+B"? no (end of list) +a.domain in domains? no (end of list) r2 router skipped: domains mismatch --------> r3 router <-------- local_part=x domain=a.domain checking domains -a.domain in "+A"? +a.domain in domains? list element: +A start sublist A cached yes match for +A cached lookup data = a.domain-data - a.domain in "+A"? yes (matched "+A" - cached) + a.domain in domains? yes (matched "+A" - cached) domain_data=a.domain-data calling r3 router r3 router called for x@a.domain diff --git a/test/stderr/0419 b/test/stderr/0419 index 6ea0d7822..28f6784a2 100644 --- a/test/stderr/0419 +++ b/test/stderr/0419 @@ -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 @@ -17,52 +18,56 @@ routing k@mxt13.test.ex --------> dnslookup router <-------- local_part=k domain=mxt13.test.ex checking domains -mxt13.test.ex in "! +local_domains"? - list element: ! +local_domains +mxt13.test.ex in domains? + list element: !░+local_domains start sublist local_domains mxt13.test.ex in "!mxt13.test.ex : !other1.test.ex : *.test.ex"? ╎list element: !mxt13.test.ex ╎mxt13.test.ex in "!mxt13.test.ex : !other1.test.ex : *.test.ex"? no (matched "!mxt13.test.ex") end sublist local_domains data from lookup saved for cache for +local_domains: key 'mxt13.test.ex' value 'mxt13.test.ex' -mxt13.test.ex in "! +local_domains"? yes (end of list) +mxt13.test.ex in domains? yes (end of list) calling dnslookup router dnslookup router called for k@mxt13.test.ex domain = mxt13.test.ex -mxt13.test.ex in "*"? - list element: * - mxt13.test.ex in "*"? yes (matched "*") -DNS lookup of mxt13.test.ex (MX) using fakens -DNS lookup of mxt13.test.ex (MX) succeeded -DNS lookup of other1.test.ex (A) using fakens -DNS lookup of other1.test.ex (A) succeeded -DNS lookup of other2.test.ex (A) using fakens -DNS lookup of other2.test.ex (A) succeeded -other1.test.ex in hosts_treat_as_local? - list element: +local_domains - start sublist local_domains - other1.test.ex in "!mxt13.test.ex : !other1.test.ex : *.test.ex"? - ╎list element: !mxt13.test.ex - ╎list element: !other1.test.ex - ╎other1.test.ex in "!mxt13.test.ex : !other1.test.ex : *.test.ex"? no (matched "!other1.test.ex") - end sublist local_domains -other1.test.ex in hosts_treat_as_local? no (end of list) -other2.test.ex in hosts_treat_as_local? - list element: +local_domains - start sublist local_domains - other2.test.ex in "!mxt13.test.ex : !other1.test.ex : *.test.ex"? - ╎list element: !mxt13.test.ex - ╎list element: !other1.test.ex - ╎list element: *.test.ex - ╎other2.test.ex in "!mxt13.test.ex : !other1.test.ex : *.test.ex"? yes (matched "*.test.ex") - end sublist local_domains - other2.test.ex in hosts_treat_as_local? yes (matched "+local_domains") +main lookup for domain + check dnssec require list + mxt13.test.ex in dnssec_require_domains? no (option unset) + check dnssec request list + mxt13.test.ex in dnssec_request_domains? + list element: * + mxt13.test.ex in dnssec_request_domains? yes (matched "*") + DNS lookup of mxt13.test.ex (MX) using fakens + DNS lookup of mxt13.test.ex (MX) succeeded + DNS lookup of other1.test.ex (A) using fakens + DNS lookup of other1.test.ex (A) succeeded + DNS lookup of other2.test.ex (A) using fakens + DNS lookup of other2.test.ex (A) succeeded + other1.test.ex in hosts_treat_as_local? + list element: +local_domains + start sublist local_domains + ╎other1.test.ex in "!mxt13.test.ex : !other1.test.ex : *.test.ex"? + ╎ list element: !mxt13.test.ex + ╎ list element: !other1.test.ex + ╎ other1.test.ex in "!mxt13.test.ex : !other1.test.ex : *.test.ex"? no (matched "!other1.test.ex") + end sublist local_domains + other1.test.ex in hosts_treat_as_local? no (end of list) + other2.test.ex in hosts_treat_as_local? + list element: +local_domains + start sublist local_domains + ╎other2.test.ex in "!mxt13.test.ex : !other1.test.ex : *.test.ex"? + ╎ list element: !mxt13.test.ex + ╎ list element: !other1.test.ex + ╎ list element: *.test.ex + ╎ other2.test.ex in "!mxt13.test.ex : !other1.test.ex : *.test.ex"? yes (matched "*.test.ex") + end sublist local_domains + other2.test.ex in hosts_treat_as_local? yes (matched "+local_domains") local host in host list - removed hosts: other2.test.ex V4NET.12.3.2 5 other2.test.ex V4NET.12.3.1 5 -fully qualified name = mxt13.test.ex -host_find_bydns yield = HOST_FOUND (3); returned hosts: - other1.test.ex V4NET.12.4.5 MX=4 + fully qualified name = mxt13.test.ex + host_find_bydns yield = HOST_FOUND (3); returned hosts: + other1.test.ex V4NET.12.4.5 MX=4 set transport smtp queued for smtp transport: local_part = k domain = mxt13.test.ex diff --git a/test/stderr/0426 b/test/stderr/0426 index 0112cdc10..b9ab6329f 100644 --- a/test/stderr/0426 +++ b/test/stderr/0426 @@ -1,15 +1,16 @@ 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 dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: x@uppercase.test.ex @@ -20,16 +21,21 @@ routing x@uppercase.test.ex --------> r0 router <-------- local_part=x domain=uppercase.test.ex checking senders +test.ex in ""? no (end of list) +CALLER@test.ex in senders? no (end of list) r0 router skipped: senders mismatch --------> r1 router <-------- local_part=x domain=uppercase.test.ex calling r1 router r1 router called for x@uppercase.test.ex domain = uppercase.test.ex -uppercase.test.ex (MX resp) DNSSEC +main lookup for domain + check dnssec require list + check dnssec request list + uppercase.test.ex (MX resp) DNSSEC local host found for non-MX address -fully qualified name = UpperCase.test.ex -uppercase.test.ex 127.0.0.1 mx=-1 sort=xx + fully qualified name = UpperCase.test.ex + uppercase.test.ex 127.0.0.1 mx=-1 sort=xx remote host address is the local host: uppercase.test.ex: configured to try delivery anyway set transport t1 queued for t1 transport: local_part = x @@ -47,23 +53,23 @@ After routing: x@UpperCase.test.ex Failed addresses: Deferred addresses: -locking TESTSUITE/spool/db/retry.lockfile -locking TESTSUITE/spool/db/wait-t1.lockfile -cmdlog: '220:EHLO:250:MAIL:250:RCPT:550:QUIT:250' +cmdlog: '220:EHLO:250:MAIL:250:RCPT:550:QUIT+:250' +>>>>>>>>>>>>>>>> Exim pid=p1236 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> 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:: 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 dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: CALLER@test.ex @@ -91,8 +97,8 @@ After routing: Deferred addresses: LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1237 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1236 (bounce-message) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1238 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1237 (bounce-message) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN Completed >>>>>>>>>>>>>>>> Exim pid=p1235 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0432 b/test/stderr/0432 index 2722e6b34..2e0719788 100644 --- a/test/stderr/0432 +++ b/test/stderr/0432 @@ -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 @@ -91,21 +92,22 @@ MUNGED: ::1 will be omitted in what follows get[host|ipnode]byname[2] looked up these IP addresses: name=127.0.0.1 address=127.0.0.1 Attempting full verification using callout - locking TESTSUITE/spool/db/callout.lockfile - locked TESTSUITE/spool/db/callout.lockfile EXIM_DBOPEN: file dir flags=O_RDWR 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 + closed hints database interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... 127.0.0.1 in hosts_try_fastopen? - list element: - connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... + 127.0.0.1 in hosts_try_fastopen? + list element: +connected SMTP<< 220 server ready 127.0.0.1 in hosts_avoid_esmtp? no (option unset) SMTP>> EHLO myhost.test.ex @@ -126,18 +128,16 @@ cmd buf flush ddd bytes SMTP<< 220 OK SMTP(close)>> 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 dir flags=O_RDWR|O_CREAT + EXIM_DBOPEN: file dir 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 40 wrote callout cache domain record for y: result=1 postmaster=0 random=0 - dbfn_write: key=x@y + dbfn_write: key=x@y datalen 16 wrote positive callout cache address record for x@y EXIM_DBCLOSE(0xAAAAAAAA) - closed hints database and lockfile + closed hints database ----------- end verify ------------ sender x@y verified ok accept: condition test succeeded in ACL "mail" @@ -150,6 +150,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 @@ -213,18 +214,18 @@ MUNGED: ::1 will be omitted in what follows get[host|ipnode]byname[2] looked up these IP addresses: name=127.0.0.1 address=127.0.0.1 Attempting full verification using callout - locking TESTSUITE/spool/db/callout.lockfile - locked TESTSUITE/spool/db/callout.lockfile EXIM_DBOPEN: file dir flags=O_RDWR 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) - closed hints database and lockfile + closed hints database ----------- end verify ------------ sender x@y verified ok accept: condition test succeeded in ACL "mail" @@ -293,9 +294,10 @@ MUNGED: ::1 will be omitted in what follows >>> callout cache: no domain record found for b >>> callout cache: no address record found for a@b >>> interface=NULL port=PORT_S ->>> Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... 127.0.0.1 in hosts_try_fastopen? ->>> list element: ->>> >>> connected +>>> Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +>>> 127.0.0.1 in hosts_try_fastopen? +>>> list element: +>>> connected >>> SMTP<< 220 server ready >>> 127.0.0.1 in hosts_avoid_esmtp? no (option unset) >>> SMTP>> EHLO myhost.test.ex @@ -346,9 +348,10 @@ MUNGED: ::1 will be omitted in what follows >>> callout cache: no domain record found for q >>> callout cache: no address record found for p1@q >>> interface=NULL port=PORT_S ->>> Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... 127.0.0.1 in hosts_try_fastopen? ->>> list element: ->>> >>> connected +>>> Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +>>> 127.0.0.1 in hosts_try_fastopen? +>>> list element: +>>> connected >>> SMTP<< 220 server ready >>> 127.0.0.1 in hosts_avoid_esmtp? no (option unset) >>> SMTP>> EHLO myhost.test.ex diff --git a/test/stderr/0433 b/test/stderr/0433 index 40eef044c..eff327b62 100644 --- a/test/stderr/0433 +++ b/test/stderr/0433 @@ -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 diff --git a/test/stderr/0435 b/test/stderr/0435 index 77e147981..2ae20bf65 100644 --- a/test/stderr/0435 +++ b/test/stderr/0435 @@ -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 diff --git a/test/stderr/0437 b/test/stderr/0437 index a8142da54..29241cfd3 100644 --- a/test/stderr/0437 +++ b/test/stderr/0437 @@ -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 @@ -44,12 +45,13 @@ search_tidyup called creating new cache entry lookup yielded: file search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1235 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => userx R=r1 T=t1 LOG: MAIN Completed search_tidyup called ->>>>>>>>>>>>>>>> Exim pid=p1235 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1236 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> search_tidyup called search_open: lsearch "TESTSUITE/aux-fixed/0437.ls" search_find: file="TESTSUITE/aux-fixed/0437.ls" @@ -78,12 +80,13 @@ search_tidyup called creating new cache entry lookup yielded: file search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1237 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => userx R=r1 T=t1 LOG: MAIN Completed search_tidyup called ->>>>>>>>>>>>>>>> Exim pid=p1236 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1238 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: queue_run MAIN End queue run: pid=p1234 search_tidyup called diff --git a/test/stderr/0438 b/test/stderr/0438 index 58f8d8262..b63c3c556 100644 --- a/test/stderr/0438 +++ b/test/stderr/0438 @@ -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 diff --git a/test/stderr/0443 b/test/stderr/0443 index 295a87306..75884eae0 100644 --- a/test/stderr/0443 +++ b/test/stderr/0443 @@ -16,9 +16,12 @@ >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing x@ten-1.test.ex >>> calling r1 router ->>> ten-1.test.ex in "*"? ->>> list element: * ->>> ten-1.test.ex in "*"? yes (matched "*") +>>> check dnssec require list +>>> ten-1.test.ex in dnssec_require_domains? no (option unset) +>>> check dnssec request list +>>> ten-1.test.ex in dnssec_request_domains? +>>> list element: * +>>> ten-1.test.ex in dnssec_request_domains? yes (matched "*") >>> routed by r1 router >>> Attempting full verification using callout >>> callout cache: no domain record found for ten-1.test.ex diff --git a/test/stderr/0450 b/test/stderr/0450 index 997954187..095135bbf 100644 --- a/test/stderr/0450 +++ b/test/stderr/0450 @@ -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,19 +20,22 @@ getting address for 127.0.0.1 checking retry status of 127.0.0.1 127.0.0.1 [127.0.0.1]:1111 retry-status = usable delivering 10HmaX-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (userx@test.ex) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... failed: Connection refused +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... + failed: Connection refused LOG: MAIN H=127.0.0.1 [127.0.0.1] Connection refused -added retry item for T:127.0.0.1:127.0.0.1:PORT_D: errno=dd more_errno=dd,A flags=2 +added retry item for T:[127.0.0.1]:127.0.0.1:PORT_D: errno=dd more_errno=dd,A flags=2 all IP addresses skipped or deferred at least one address updating wait-t1 database added 10HmaX-000000005vi-0000 to queue for 127.0.0.1 Leaving t1 transport +>>>>>>>>>>>>>>>> Exim pid=p1237 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN == userx@test.ex R=r1 T=t1 defer (dd): Connection refused >>>>>>>>>>>>>>>> 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 @@ -47,17 +52,19 @@ no host retry record no message retry record 127.0.0.1 [127.0.0.1]:1112 retry-status = usable delivering 10HmaX-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (userx@test.ex) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D2 ... failed: Connection refused +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D2 ... + failed: Connection refused LOG: MAIN H=127.0.0.1 [127.0.0.1] Connection refused -added retry item for T:127.0.0.1:127.0.0.1:PORT_D2: errno=dd more_errno=dd,A flags=2 +added retry item for T:[127.0.0.1]:127.0.0.1:PORT_D2: errno=dd more_errno=dd,A flags=2 all IP addresses skipped or deferred at least one address updating wait-t1 database already listed for 127.0.0.1 Leaving t1 transport +>>>>>>>>>>>>>>>> Exim pid=p1238 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN == userx@test.ex R=r1 T=t1 defer (dd): Connection refused ->>>>>>>>>>>>>>>> Exim pid=p1237 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1239 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: queue_run MAIN End queue run: pid=p1234 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0462 b/test/stderr/0462 index 470f2ed59..1f0f29e01 100644 --- a/test/stderr/0462 +++ b/test/stderr/0462 @@ -1,9 +1,11 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config trusted user admin user LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying Ok@localhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -12,7 +14,8 @@ Attempting full verification using callout callout cache: no domain record found for localhost callout cache: no address record found for Ok@localhost interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -51,11 +54,13 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying NOTok@elsewhere >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -64,7 +69,8 @@ Attempting full verification using callout callout cache: no domain record found for elsewhere callout cache: no address record found for NOTok@elsewhere interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK @@ -87,11 +93,13 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying NOTok2@elsewhere >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -100,7 +108,8 @@ Attempting full verification using callout callout cache: found domain record for elsewhere callout cache: no address record found for NOTok2@elsewhere interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250 OK diff --git a/test/stderr/0463 b/test/stderr/0463 index e395c2259..391589473 100644 --- a/test/stderr/0463 +++ b/test/stderr/0463 @@ -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 @@ -16,31 +17,37 @@ routing x@ten-1 --------> all router <-------- local_part=x domain=ten-1 checking domains -ten-1 in "!@mx_any"? +ten-1 in domains? list element: !@mx_any -DNS lookup of ten-1 (MX) using fakens -DNS lookup of ten-1 (MX) gave NO_DATA -returning DNS_NODATA -faking res_search(MX) response length as 65535 - writing neg-cache entry for ten-1-MX-xxxx, ttl 3000 -Address records are not being sought -ten-1 in "!@mx_any"? yes (end of list) + check dnssec require list + check dnssec request list + DNS lookup of ten-1 (MX) using fakens + DNS lookup of ten-1 (MX) gave NO_DATA + returning DNS_NODATA + faking res_search(MX) response length as 65535 + writing neg-cache entry for ten-1-MX-xxxx, ttl 3000 + Address records are not being sought +ten-1 in domains? yes (end of list) calling all router all router called for x@ten-1 domain = ten-1 -ten-1 in "*"? - list element: * - ten-1 in "*"? yes (matched "*") -DNS lookup of ten-1 (MX) using fakens -DNS lookup of ten-1 (MX) gave NO_DATA -returning DNS_NODATA -faking res_search(MX) response length as 65535 - writing neg-cache entry for ten-1-MX-xxxx, ttl 3000 -ten-1 (MX resp) DNSSEC -DNS lookup of ten-1 (A) using fakens -DNS lookup of ten-1 (A) succeeded -fully qualified name = ten-1.test.ex -ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx +main lookup for domain + check dnssec require list + ten-1 in dnssec_require_domains? no (option unset) + check dnssec request list + ten-1 in dnssec_request_domains? + list element: * + ten-1 in dnssec_request_domains? yes (matched "*") + DNS lookup of ten-1 (MX) using fakens + DNS lookup of ten-1 (MX) gave NO_DATA + returning DNS_NODATA + faking res_search(MX) response length as 65535 + writing neg-cache entry for ten-1-MX-xxxx, ttl 3000 + ten-1 (MX resp) DNSSEC + DNS lookup of ten-1 (A) using fakens + DNS lookup of ten-1 (A) succeeded + fully qualified name = ten-1.test.ex + ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx domain changed to ten-1.test.ex rewriting header lines re-routed to x@ten-1.test.ex @@ -51,31 +58,37 @@ routing x@ten-1.test.ex --------> all router <-------- local_part=x domain=ten-1.test.ex checking domains -ten-1.test.ex in "!@mx_any"? +ten-1.test.ex in domains? list element: !@mx_any -DNS lookup of ten-1.test.ex (MX) using fakens -DNS lookup of ten-1.test.ex (MX) gave NO_DATA -returning DNS_NODATA -faking res_search(MX) response length as 65535 - writing neg-cache entry for ten-1.test.ex-MX-xxxx, ttl 3000 -Address records are not being sought -ten-1.test.ex in "!@mx_any"? yes (end of list) + check dnssec require list + check dnssec request list + DNS lookup of ten-1.test.ex (MX) using fakens + DNS lookup of ten-1.test.ex (MX) gave NO_DATA + returning DNS_NODATA + faking res_search(MX) response length as 65535 + writing neg-cache entry for ten-1.test.ex-MX-xxxx, ttl 3000 + Address records are not being sought +ten-1.test.ex in domains? yes (end of list) calling all router all router called for x@ten-1.test.ex domain = ten-1.test.ex -ten-1.test.ex in "*"? - list element: * - ten-1.test.ex in "*"? yes (matched "*") -DNS lookup of ten-1.test.ex (MX) using fakens -DNS lookup of ten-1.test.ex (MX) gave NO_DATA -returning DNS_NODATA -faking res_search(MX) response length as 65535 - writing neg-cache entry for ten-1.test.ex-MX-xxxx, ttl 3000 -ten-1.test.ex (MX resp) DNSSEC -DNS lookup of ten-1.test.ex (A) using fakens -DNS lookup of ten-1.test.ex (A) succeeded -fully qualified name = ten-1.test.ex -ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx +main lookup for domain + check dnssec require list + ten-1.test.ex in dnssec_require_domains? no (option unset) + check dnssec request list + ten-1.test.ex in dnssec_request_domains? + list element: * + ten-1.test.ex in dnssec_request_domains? yes (matched "*") + DNS lookup of ten-1.test.ex (MX) using fakens + DNS lookup of ten-1.test.ex (MX) gave NO_DATA + returning DNS_NODATA + faking res_search(MX) response length as 65535 + writing neg-cache entry for ten-1.test.ex-MX-xxxx, ttl 3000 + ten-1.test.ex (MX resp) DNSSEC + DNS lookup of ten-1.test.ex (A) using fakens + DNS lookup of ten-1.test.ex (A) succeeded + fully qualified name = ten-1.test.ex + ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx set transport smtp queued for smtp transport: local_part = x domain = ten-1.test.ex diff --git a/test/stderr/0464 b/test/stderr/0464 index 388539123..aa91bff38 100644 --- a/test/stderr/0464 +++ b/test/stderr/0464 @@ -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 @@ -39,7 +40,7 @@ domain1 in "+special_domains"? ╎file lookup required for domain1 ╎ in TESTSUITE/aux-fixed/0464.domains ╎creating new cache entry - ╎lookup yielded: data for domain1 + ╎lookup yielded: data░for░domain1 ╎domain1 in "lsearch;TESTSUITE/aux-fixed/0464.domains"? yes (matched "lsearch;TESTSUITE/aux-fixed/0464.domains") end sublist special_domains data from lookup saved for cache for +special_domains: key 'domain1' value 'data for domain1' @@ -54,12 +55,12 @@ routing abc@domain1 --------> r1 router <-------- local_part=abc domain=domain1 checking domains -domain1 in "+special_domains"? +domain1 in domains? list element: +special_domains start sublist special_domains cached yes match for +special_domains cached lookup data = data for domain1 - domain1 in "+special_domains"? yes (matched "+special_domains" - cached) + domain1 in domains? yes (matched "+special_domains" - cached) calling r1 router rda_interpret (string): '$local_part@xxx.$domain' expanded: 'abc@xxx.domain1' (tainted) @@ -79,7 +80,7 @@ routing abc@xxx.domain1 --------> r1 router <-------- local_part=abc domain=xxx.domain1 checking domains -xxx.domain1 in "+special_domains"? +xxx.domain1 in domains? list element: +special_domains start sublist special_domains xxx.domain1 in "lsearch;TESTSUITE/aux-fixed/0464.domains"? @@ -99,7 +100,7 @@ xxx.domain1 in "+special_domains"? ╎lookup failed xxx.domain1 in "lsearch;TESTSUITE/aux-fixed/0464.domains"? no (end of list) end sublist special_domains -xxx.domain1 in "+special_domains"? no (end of list) +xxx.domain1 in domains? no (end of list) r1 router skipped: domains mismatch --------> r2 router <-------- local_part=abc domain=xxx.domain1 @@ -134,12 +135,12 @@ routing abc@domain1 --------> r1 router <-------- local_part=abc domain=domain1 checking domains -domain1 in "+special_domains"? +domain1 in domains? list element: +special_domains start sublist special_domains cached yes match for +special_domains cached lookup data = data for domain1 - domain1 in "+special_domains"? yes (matched "+special_domains" - cached) + domain1 in domains? yes (matched "+special_domains" - cached) calling r1 router rda_interpret (string): '$local_part@xxx.$domain' expanded: 'abc@xxx.domain1' (tainted) @@ -159,7 +160,7 @@ routing abc@xxx.domain1 --------> r1 router <-------- local_part=abc domain=xxx.domain1 checking domains -xxx.domain1 in "+special_domains"? +xxx.domain1 in domains? list element: +special_domains start sublist special_domains xxx.domain1 in "lsearch;TESTSUITE/aux-fixed/0464.domains"? @@ -178,7 +179,7 @@ xxx.domain1 in "+special_domains"? ╎lookup failed xxx.domain1 in "lsearch;TESTSUITE/aux-fixed/0464.domains"? no (end of list) end sublist special_domains -xxx.domain1 in "+special_domains"? no (end of list) +xxx.domain1 in domains? no (end of list) r1 router skipped: domains mismatch --------> r2 router <-------- local_part=abc domain=xxx.domain1 diff --git a/test/stderr/0465 b/test/stderr/0465 index c4be802bb..3b0d8418d 100644 --- a/test/stderr/0465 +++ b/test/stderr/0465 @@ -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 @@ -69,15 +71,15 @@ search_tidyup called To: abc@domain. qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=T: To: abc@domain. search_tidyup called >>Headers after rewriting and local additions: -T To: abc@domain. -I Message-Id: - Date: Tue, 2 Mar 1999 09:44:33 +0000 + T To: abc@domain. + I Message-Id: + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaY-000000005vi-0000-D Data file written for message 10HmaY-000000005vi-0000 @@ -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 @@ -143,15 +146,17 @@ search_tidyup called To: abc@xyz. qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=T: To: abc@xyz. +LOG: MAIN + qualify/rewrite: domain missing or malformed search_tidyup called >>Headers after rewriting and local additions: -T To: abc@xyz. -I Message-Id: - Date: Tue, 2 Mar 1999 09:44:33 +0000 + T To: abc@xyz. + I Message-Id: + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaX-000000005vi-0000-D Data file written for message 10HmaX-000000005vi-0000 diff --git a/test/stderr/0467 b/test/stderr/0467 index 738a07f16..c7658714e 100644 --- a/test/stderr/0467 +++ b/test/stderr/0467 @@ -16,7 +16,8 @@ LOG: MAIN <= CALLER@myhost.test.ex U=CALLER P=local S=sss delivering 10HmaZ-000000005vi-0000 Transport port=25 replaced by host-specific port=PORT_S -Connecting to localhost.test.ex [127.0.0.1]:PORT_S ... connected +Connecting to localhost.test.ex [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-server id @@ -34,7 +35,7 @@ Connecting to localhost.test.ex [127.0.0.1]:PORT_S ... connected SMTP(shutdown)>> SMTP<< 250 OK SMTP(close)>> -cmdlog: '220:EHLO:250-:MAIL:250:RCPT:250:DATA:354:.:250:QUIT:250' +cmdlog: '220:EHLO:250-:MAIL:250:RCPT:250:DATA:354:.:250:QUIT+:250' LOG: MAIN => x@srv27.test.ex R=r1 T=t1 H=localhost.test.ex [127.0.0.1]:PORT_S C="250 OK" LOG: MAIN diff --git a/test/stderr/0469 b/test/stderr/0469 index 948183066..f58711b97 100644 --- a/test/stderr/0469 +++ b/test/stderr/0469 @@ -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 @@ -18,20 +19,24 @@ local_part=x domain=mxt1c.test.ex calling r1 router r1 router called for x@mxt1c.test.ex domain = mxt1c.test.ex -mxt1c.test.ex in "*"? - list element: * - mxt1c.test.ex in "*"? yes (matched "*") -DNS lookup of mxt1c.test.ex (MX) using fakens -DNS lookup of mxt1c.test.ex (MX) succeeded -DNS lookup of dontqualify (A) using fakens -DNS lookup of dontqualify (A) gave NO_DATA -returning DNS_NODATA -DNS: couldn't fake dnsa len -DNS: no SOA record found for neg-TTL - writing neg-cache entry for dontqualify-A-xxxx, ttl -1 -fully qualified name = mxt1c.test.ex -host_find_bydns yield = HOST_FIND_FAILED (0); returned hosts: - dontqualify MX=1 * +main lookup for domain + check dnssec require list + mxt1c.test.ex in dnssec_require_domains? no (option unset) + check dnssec request list + mxt1c.test.ex in dnssec_request_domains? + list element: * + mxt1c.test.ex in dnssec_request_domains? yes (matched "*") + DNS lookup of mxt1c.test.ex (MX) using fakens + DNS lookup of mxt1c.test.ex (MX) succeeded + DNS lookup of dontqualify (A) using fakens + DNS lookup of dontqualify (A) gave NO_DATA + returning DNS_NODATA + DNS: couldn't fake dnsa len + DNS: no SOA record found for neg-TTL + writing neg-cache entry for dontqualify-A-xxxx, ttl -1 + fully qualified name = mxt1c.test.ex + host_find_bydns yield = HOST_FIND_FAILED (0); returned hosts: + dontqualify MX=1 * r1 router declined for x@mxt1c.test.ex no more routers search_tidyup called diff --git a/test/stderr/0471 b/test/stderr/0471 index 9b214aa79..a83a4921f 100644 --- a/test/stderr/0471 +++ b/test/stderr/0471 @@ -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 @@ -131,7 +132,7 @@ qualify & rewrite recipients list in TESTSUITE/aux-fixed/0471.rw creating new cache entry lookup failed -global rewrite rules +rewrite rules on sender address CALLER@myhost.test.ex in "^.{40,}@*"? list element: ^.{40,}@* address match test: subject=CALLER@myhost.test.ex pattern=^.{40,}@* @@ -171,7 +172,7 @@ global rewrite rules in TESTSUITE/aux-fixed/0471.rw lookup failed rewritten sender = CALLER@myhost.test.ex -rewrite headers +qualify and rewrite headers rewrite_one_header: type=T: To: random@test.example, random@test.example, @@ -26701,9 +26702,8 @@ remainder: lookup failed search_tidyup called >>Headers after rewriting and local additions: -* To: random@test.example, - random@test.example, - random@test.example, + * To: random@test.example, + random@test.example, random@test.example, random@test.example, random@test.example, @@ -26781,8 +26781,11 @@ search_tidyup called random@test.example, random@test.example, random@test.example, + random@test.example **** debug string too long - truncated **** -T To: random@rwtest.example, + T To: random@rwtest.example, + random@rwtest.example, + random@rwtest.example, random@rwtest.example, random@rwtest.example, random@rwtest.example, @@ -26854,13 +26857,10 @@ T To: random@rwtest.example, random@rwtest.example, random@rwtest.example, random@rwtest.example, - random@rwtest.example, - random@rwtest.example, - **** debug string too long - truncated **** -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaX-000000005vi-0000-D Data file written for message 10HmaX-000000005vi-0000 @@ -26887,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 @@ -26938,7 +26939,7 @@ qualify & rewrite recipients list in TESTSUITE/aux-fixed/0471.rw creating new cache entry lookup failed -global rewrite rules +rewrite rules on sender address CALLER@myhost.test.ex in "^.{40,}@*"? list element: ^.{40,}@* address match test: subject=CALLER@myhost.test.ex pattern=^.{40,}@* @@ -26978,7 +26979,7 @@ global rewrite rules in TESTSUITE/aux-fixed/0471.rw lookup failed rewritten sender = CALLER@myhost.test.ex -rewrite headers +qualify and rewrite headers rewrite_one_header: type=T: To: localpart_with_056_chars_56789012345678901234567890123456@test.example localpart_with_056_chars_56789012345678901234567890123456@test.example in "^.{40,}@*"? @@ -27053,11 +27054,11 @@ remainder: lookup failed search_tidyup called >>Headers after rewriting and local additions: -* To: localpart_with_056_chars_56789012345678901234567890123456@test.example -T To: deny_me@rwtest.example -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + * To: localpart_with_056_chars_56789012345678901234567890123456@test.example + T To: deny_me@rwtest.example + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaY-000000005vi-0000-D Data file written for message 10HmaY-000000005vi-0000 @@ -27083,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 @@ -27134,7 +27136,7 @@ qualify & rewrite recipients list in TESTSUITE/aux-fixed/0471.rw creating new cache entry lookup failed -global rewrite rules +rewrite rules on sender address CALLER@myhost.test.ex in "^.{40,}@*"? list element: ^.{40,}@* address match test: subject=CALLER@myhost.test.ex pattern=^.{40,}@* @@ -27174,7 +27176,7 @@ global rewrite rules in TESTSUITE/aux-fixed/0471.rw lookup failed rewritten sender = CALLER@myhost.test.ex -rewrite headers +qualify and rewrite headers rewrite_one_header: type=T: To: localpart_with_236_chars_56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456@test.example localpart_with_236_chars_56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456@test.example in "^.{40,}@*"? @@ -27249,11 +27251,11 @@ remainder: lookup failed search_tidyup called >>Headers after rewriting and local additions: -* To: localpart_with_236_chars_56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456@test.example -T To: deny_me@rwtest.example -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + * To: localpart_with_236_chars_56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456@test.example + T To: deny_me@rwtest.example + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaZ-000000005vi-0000-D Data file written for message 10HmaZ-000000005vi-0000 @@ -27279,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 @@ -27330,7 +27333,7 @@ qualify & rewrite recipients list in TESTSUITE/aux-fixed/0471.rw creating new cache entry lookup failed -global rewrite rules +rewrite rules on sender address CALLER@myhost.test.ex in "^.{40,}@*"? list element: ^.{40,}@* address match test: subject=CALLER@myhost.test.ex pattern=^.{40,}@* @@ -27370,11 +27373,11 @@ global rewrite rules in TESTSUITE/aux-fixed/0471.rw lookup failed rewritten sender = CALLER@myhost.test.ex -rewrite headers +qualify and rewrite headers rewrite_one_header: type=T: To: localpart_with_256_chars_5678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456@test.example LOG: MAIN - rewrite: address is ridiculously long: localpart_with_256_chars_567890123456789012345678901234567890123... + qualify/rewrite: address is ridiculously long: localpart_with_256_chars_567890123456789012345678901234567890123... rewrite_one_header: type=F: From: CALLER_NAME CALLER@myhost.test.ex in "^.{40,}@*"? @@ -27415,10 +27418,10 @@ LOG: MAIN lookup failed search_tidyup called >>Headers after rewriting and local additions: -T To: localpart_with_256_chars_5678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456@test.example -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + T To: localpart_with_256_chars_5678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456@test.example + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmbA-000000005vi-0000-D Data file written for message 10HmbA-000000005vi-0000 @@ -27447,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 @@ -27498,7 +27502,7 @@ qualify & rewrite recipients list in TESTSUITE/aux-fixed/0471.rw creating new cache entry lookup failed -global rewrite rules +rewrite rules on sender address CALLER@myhost.test.ex in "^.{40,}@*"? list element: ^.{40,}@* address match test: subject=CALLER@myhost.test.ex pattern=^.{40,}@* @@ -27538,7 +27542,7 @@ global rewrite rules in TESTSUITE/aux-fixed/0471.rw lookup failed rewritten sender = CALLER@myhost.test.ex -rewrite headers +qualify and rewrite headers rewrite_one_header: type=T: To: undisclosed recpients:; rewrite_one_header: type=F: @@ -27581,10 +27585,10 @@ rewrite headers lookup failed search_tidyup called >>Headers after rewriting and local additions: -T To: undisclosed recpients:; -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + T To: undisclosed recpients:; + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmbB-000000005vi-0000-D Data file written for message 10HmbB-000000005vi-0000 @@ -27610,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 @@ -27661,7 +27666,7 @@ qualify & rewrite recipients list in TESTSUITE/aux-fixed/0471.rw creating new cache entry lookup failed -global rewrite rules +rewrite rules on sender address CALLER@myhost.test.ex in "^.{40,}@*"? list element: ^.{40,}@* address match test: subject=CALLER@myhost.test.ex pattern=^.{40,}@* @@ -27701,11 +27706,11 @@ global rewrite rules in TESTSUITE/aux-fixed/0471.rw lookup failed rewritten sender = CALLER@myhost.test.ex -rewrite headers +qualify and rewrite headers rewrite_one_header: type=T: To: fred@ LOG: MAIN - rewrite: domain missing or malformed + qualify/rewrite: domain missing or malformed rewrite_one_header: type=F: From: CALLER_NAME CALLER@myhost.test.ex in "^.{40,}@*"? @@ -27746,10 +27751,10 @@ LOG: MAIN lookup failed search_tidyup called >>Headers after rewriting and local additions: -T To: fred@ -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + T To: fred@ + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmbC-000000005vi-0000-D Data file written for message 10HmbC-000000005vi-0000 diff --git a/test/stderr/0473 b/test/stderr/0473 index 1e943d0e8..3639713ec 100644 --- a/test/stderr/0473 +++ b/test/stderr/0473 @@ -1,9 +1,11 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config trusted user admin user LOG: smtp_connection MAIN SMTP connection from CALLER + in chunking_advertise_hosts? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying r11@two.test.ex >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -12,7 +14,8 @@ Attempting full verification using callout callout cache: found domain record for two.test.ex callout cache: no address record found for r11@two.test.ex interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO the.local.host.name SMTP<< 250 OK @@ -31,11 +34,13 @@ 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 LOG: smtp_connection MAIN SMTP connection from CALLER + in chunking_advertise_hosts? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying r11@two.test.ex >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -44,7 +49,8 @@ Attempting full verification using callout callout cache: found domain record for two.test.ex callout cache: no address record found for r11@two.test.ex interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP(Connection timed out)<< SMTP(close)>> cmdlog: '(unset)' diff --git a/test/stderr/0475 b/test/stderr/0475 index 4626506f5..585e78d2a 100644 --- a/test/stderr/0475 +++ b/test/stderr/0475 @@ -11,21 +11,41 @@ >>> list element: @[] >>> test in helo_lookup_domains? no (end of list) >>> using ACL "a1" ->>> processing "deny" (TESTSUITE/test-config 16) +>>> processing "deny" (TESTSUITE/test-config 17) >>> check hosts = 1.2.3.4 : <; 1.2.3.4::5.6.7.8 >>> host in "1.2.3.4 : <; 1.2.3.4::5.6.7.8"? >>> list element: 1.2.3.4 ->>> list element: <; 1.2.3.4:5.6.7.8 +>>> list element: <;░1.2.3.4:5.6.7.8 LOG: unknown lookup type "<" in host list item "<; 1.2.3.4:5.6.7.8" >>> host in "1.2.3.4 : <; 1.2.3.4::5.6.7.8"? list match deferred for <; 1.2.3.4:5.6.7.8 >>> deny: condition test deferred in ACL "a1" LOG: H=(test) [V4NET.0.0.0] F=<> temporarily rejected RCPT : unknown lookup type "<" >>> using ACL "a2" ->>> processing "deny" (TESTSUITE/test-config 19) +>>> processing "deny" (TESTSUITE/test-config 20) >>> check hosts = 1.2.3/24 >>> host in "1.2.3/24"? >>> list element: 1.2.3/24 >>> host in "1.2.3/24"? no (malformed IPv4 address or address mask: 1.2.3) +LOG: list matching forced to fail: malformed IPv4 address or address mask: 1.2.3 >>> deny: condition test failed in ACL "a2" >>> end of ACL "a2": implicit DENY LOG: H=(test) [V4NET.0.0.0] F=<> rejected RCPT +>>> using ACL "a3" +>>> processing "deny" (TESTSUITE/test-config 23) +>>> check hosts = <; fe80::1 +>>> host in "<; fe80::1"? +>>> list element: fe80::1 +>>> host in "<; fe80::1"? no (end of list) +>>> deny: condition test failed in ACL "a3" +>>> end of ACL "a3": implicit DENY +LOG: H=(test) [V4NET.0.0.0] F=<> rejected RCPT +>>> using ACL "a4" +>>> processing "deny" (TESTSUITE/test-config 26) +>>> check hosts = <; fe80:1 +>>> host in "<; fe80:1"? +>>> list element: fe80:1 +>>> host in "<; fe80:1"? no (malformed IPv6 address or address mask: fe80:1) +LOG: list matching forced to fail: malformed IPv6 address or address mask: fe80:1 +>>> deny: condition test failed in ACL "a4" +>>> end of ACL "a4": implicit DENY +LOG: H=(test) [V4NET.0.0.0] F=<> rejected RCPT diff --git a/test/stderr/0476 b/test/stderr/0476 index 86070390d..ee229ff93 100644 --- a/test/stderr/0476 +++ b/test/stderr/0476 @@ -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 @@ -18,7 +19,8 @@ checking retry status of 127.0.0.1 127.0.0.1 [127.0.0.1]:1111 retry-status = usable delivering 10HmaX-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (userx@test.ex) set_process_info: pppp delivering 10HmaX-000000005vi-0000 to 127.0.0.1 [127.0.0.1]:PORT_S (userx@test.ex) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO the.local.host.name cmd buf flush ddd bytes @@ -42,7 +44,7 @@ error for DATA ignored: pipelining is in use and there were no good recipients ok=1 send_quit=1 send_rset=1 continue_more=0 yield=0 first_address is NULL transport_check_waiting entered sequence=1 local_max=500 global_max=-1 -transport_check_waiting: TRUE +transport_check_waiting: TRUE (found 10HmaY-000000005vi-0000) SMTP>> RSET cmd buf flush ddd bytes SMTP(closed)<< @@ -52,6 +54,7 @@ cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:250:550:RSET' set_process_info: pppp delivering 10HmaX-000000005vi-0000: just tried 127.0.0.1 [127.0.0.1]:PORT_S for userx@test.ex: result OK Leaving t1 transport set_process_info: pppp delivering 10HmaX-000000005vi-0000 (just run t1 for userx@test.ex in subprocess) +>>>>>>>>>>>>>>>> Exim pid=p1235 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> set_process_info: pppp running queue: waiting for 10HmaX-000000005vi-0000 (pppp) set_process_info: pppp delivering 10HmaX-000000005vi-0000: waiting for a remote delivery subprocess to finish set_process_info: pppp delivering 10HmaX-000000005vi-0000 @@ -59,6 +62,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:: 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 @@ -68,6 +72,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 @@ -85,26 +90,28 @@ checking retry status of 127.0.0.1 127.0.0.1 [127.0.0.1]:1111 retry-status = usable delivering 10HmaZ-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (CALLER@the.local.host.name) set_process_info: pppp delivering 10HmaZ-000000005vi-0000 to 127.0.0.1 [127.0.0.1]:PORT_S (CALLER@the.local.host.name) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... + failed: Connection refused LOG: MAIN H=127.0.0.1 [127.0.0.1] Connection refused set_process_info: pppp delivering 10HmaZ-000000005vi-0000: just tried 127.0.0.1 [127.0.0.1]:PORT_S for CALLER@the.local.host.name: result DEFER -added retry item for T:127.0.0.1:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2 +added retry item for T:[127.0.0.1]:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2 all IP addresses skipped or deferred at least one address updating wait-t1 database added 10HmaZ-000000005vi-0000 to queue for 127.0.0.1 Leaving t1 transport set_process_info: pppp delivering 10HmaZ-000000005vi-0000 (just run t1 for CALLER@the.local.host.name in subprocess) +>>>>>>>>>>>>>>>> Exim pid=p1238 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> set_process_info: pppp delivering 10HmaZ-000000005vi-0000: waiting for a remote delivery subprocess to finish set_process_info: pppp delivering 10HmaZ-000000005vi-0000 LOG: MAIN == CALLER@the.local.host.name R=r1 T=t1 defer (dd): Connection refused set_process_info: pppp tidying up after delivering 10HmaZ-000000005vi-0000 ->>>>>>>>>>>>>>>> Exim pid=p1236 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1235 (bounce-message) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1237 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1236 (bounce-message) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1237 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1239 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> set_process_info: pppp running queue: waiting for children of pppp set_process_info: pppp running queue set_process_info: pppp running queue: 10HmaY-000000005vi-0000 @@ -124,13 +131,14 @@ updating wait-t1 database added 10HmaY-000000005vi-0000 to queue for 127.0.0.1 Leaving t1 transport set_process_info: pppp delivering 10HmaY-000000005vi-0000 (just run t1 for usery@test.ex in subprocess) +>>>>>>>>>>>>>>>> Exim pid=p1240 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> set_process_info: pppp running queue: waiting for 10HmaY-000000005vi-0000 (pppp) set_process_info: pppp delivering 10HmaY-000000005vi-0000: waiting for a remote delivery subprocess to finish set_process_info: pppp delivering 10HmaY-000000005vi-0000 LOG: retry_defer MAIN == usery@test.ex R=r1 T=t1 defer (-54): retry time not reached for any host for 'test.ex' set_process_info: pppp tidying up after delivering 10HmaY-000000005vi-0000 ->>>>>>>>>>>>>>>> Exim pid=p1238 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1241 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> set_process_info: pppp running queue: waiting for children of pppp set_process_info: pppp running queue LOG: queue_run MAIN diff --git a/test/stderr/0479 b/test/stderr/0479 index 64ff0acc0..dbcd3b5bd 100644 --- a/test/stderr/0479 +++ b/test/stderr/0479 @@ -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 diff --git a/test/stderr/0483 b/test/stderr/0483 index c38d537ea..ff2b49beb 100644 --- a/test/stderr/0483 +++ b/test/stderr/0483 @@ -1,4 +1,5 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config admin user LOG: smtp_connection MAIN @@ -23,6 +24,7 @@ domain = domain2 routed by r1 router envelope to: recip@domain2 transport: t1 +other@domain2 in "lsearch;TESTSUITE/aux-fixed/0483.list"? no (end of list) LOG: MAIN REJECT U=CALLER F= rejected RCPT LOG: smtp_connection MAIN diff --git a/test/stderr/0484 b/test/stderr/0484 index 6b3e2f02f..5855e2c6f 100644 --- a/test/stderr/0484 +++ b/test/stderr/0484 @@ -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 @@ -17,7 +18,7 @@ sender address = CALLER@myhost.test.ex file lookup required for list in TESTSUITE/aux-fixed/0484.aliases creating new cache entry - lookup yielded: userx, usery + lookup yielded: userx,░usery search_open: lsearch "TESTSUITE/aux-fixed/0484.aliases" cached open search_find: file="TESTSUITE/aux-fixed/0484.aliases" @@ -29,7 +30,7 @@ sender address = CALLER@myhost.test.ex type=lsearch key="list" opts=NULL cached data used for lookup of list in TESTSUITE/aux-fixed/0484.aliases - lookup yielded: userx, usery + lookup yielded: userx,░usery search_open: lsearch "TESTSUITE/aux-fixed/0484.aliases" cached open search_find: file="TESTSUITE/aux-fixed/0484.aliases" @@ -66,7 +67,7 @@ sender address = CALLER@myhost.test.ex type=lsearch key="list" opts=NULL cached data used for lookup of list in TESTSUITE/aux-fixed/0484.aliases - lookup yielded: userx, usery + lookup yielded: userx,░usery search_open: lsearch "TESTSUITE/aux-fixed/0484.aliases2" search_find: file="TESTSUITE/aux-fixed/0484.aliases2" key="list" partial=-1 affix=NULL starflags=0 opts=NULL @@ -79,7 +80,7 @@ sender address = CALLER@myhost.test.ex file lookup required for list in TESTSUITE/aux-fixed/0484.aliases2 creating new cache entry - lookup yielded: userx2, usery2 + lookup yielded: userx2,░usery2 search_open: lsearch "TESTSUITE/aux-fixed/0484.aliases2" cached open search_find: file="TESTSUITE/aux-fixed/0484.aliases2" @@ -106,7 +107,7 @@ sender address = CALLER@myhost.test.ex type=lsearch key="list" opts=NULL cached data used for lookup of list in TESTSUITE/aux-fixed/0484.aliases2 - lookup yielded: userx2, usery2 + lookup yielded: userx2,░usery2 search_open: lsearch "TESTSUITE/aux-fixed/0484.aliases" cached open search_find: file="TESTSUITE/aux-fixed/0484.aliases" @@ -119,7 +120,7 @@ sender address = CALLER@myhost.test.ex type=lsearch key="list" opts=NULL cached data used for lookup of list in TESTSUITE/aux-fixed/0484.aliases - lookup yielded: userx, usery + lookup yielded: userx,░usery search_open: lsearch "TESTSUITE/aux-fixed/0484.aliases" cached open search_find: file="TESTSUITE/aux-fixed/0484.aliases" diff --git a/test/stderr/0487 b/test/stderr/0487 index c28c3f34f..f86b9e3d8 100644 --- a/test/stderr/0487 +++ b/test/stderr/0487 @@ -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 @@ -19,6 +20,8 @@ LOG: smtp_connection MAIN SMTP>> 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 smtp_setup_msg entered SMTP<< ehlo x.y + list element: * + in limits_advertise_hosts? yes (matched "*") in dsn_advertise_hosts? no (option unset) in pipelining_advertise_hosts? list element: * @@ -27,6 +30,7 @@ SMTP<< ehlo x.y in chunking_advertise_hosts? no (end of list) SMTP>> 250-myhost.test.ex Hello CALLER at x.y 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -46,15 +50,15 @@ search_tidyup called From: unqualified qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=F: From: unqualified search_tidyup called >>Headers after rewriting and local additions: -F From: unqualified -I Message-Id: - Date: Tue, 2 Mar 1999 09:44:33 +0000 + F From: unqualified + I Message-Id: + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaX-000000005vi-0000-D Data file written for message 10HmaX-000000005vi-0000 @@ -76,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 @@ -101,8 +106,6 @@ body_linecount=1 message_linecount=9 DSN: set orcpt: flags: 0x0 Delivery address list: userx@test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -138,8 +141,6 @@ After routing: search_tidyup called >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> userx@test.ex <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -156,7 +157,7 @@ appendfile: mode=600 notify_comsat=0 quota=0 warning=0 message_suffix=\n maildir_use_size_file=no locking by lockfile fcntl -de-tainting path 'TESTSUITE/test-mail/userx' +below-home: de-tainting path 'TESTSUITE/test-mail/userx' lock name: TESTSUITE/test-mail/userx.lock hitch name: TESTSUITE/test-mail/userx.lock.test.ex.dddddddd.pppppppp lock file created @@ -170,6 +171,7 @@ writing data block fd=dddd size=sss timeout=0 writing data block fd=dddd size=sss timeout=0 appendfile yields 0 with errno=dd more_errno=dd search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1236 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling userx@test.ex t1 transport returned OK for userx@test.ex post-process userx@test.ex (0) @@ -181,10 +183,10 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1235 set_process_info: pppp tidying up after delivering 10HmaX-000000005vi-0000 Processing retry items -Succeeded addresses: - userx@test.ex: no retry items -Failed addresses: -Deferred addresses: + Succeeded addresses: + userx@test.ex: no retry items + Failed addresses: + Deferred addresses: end of retry processing DSN: processing router : r1 DSN: processing successful delivery address: userx@test.ex diff --git a/test/stderr/0489 b/test/stderr/0489 index 1e328e28b..80e21ae5d 100644 --- a/test/stderr/0489 +++ b/test/stderr/0489 @@ -1,4 +1,5 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config trusted user admin user @@ -12,9 +13,9 @@ Recipients: >>Headers received: >>Headers after rewriting and local additions: -I Message-Id: -F From: "Phil Q. Hazel" - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: "Phil Q. Hazel" + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaX-000000005vi-0000-D Data file written for message 10HmaX-000000005vi-0000 @@ -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 @@ -45,9 +47,9 @@ Recipients: >>Headers received: >>Headers after rewriting and local additions: -I Message-Id: -F From: John "Jack" Smith - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: John "Jack" Smith + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaY-000000005vi-0000-D Data file written for message 10HmaY-000000005vi-0000 @@ -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 @@ -77,9 +80,9 @@ Recipients: >>Headers received: >>Headers after rewriting and local additions: -I Message-Id: -F From: John "Jack" "Q." Smith - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: John "Jack" "Q." Smith + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaZ-000000005vi-0000-D Data file written for message 10HmaZ-000000005vi-0000 @@ -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 @@ -109,9 +113,9 @@ Recipients: >>Headers received: >>Headers after rewriting and local additions: -I Message-Id: -F From: "John (Jack) Q. Smith" - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: "John (Jack) Q. Smith" + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmbA-000000005vi-0000-D Data file written for message 10HmbA-000000005vi-0000 @@ -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 @@ -141,9 +146,9 @@ Recipients: >>Headers received: >>Headers after rewriting and local additions: -I Message-Id: -F From: John ("Jack") "Q." Smith - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: John ("Jack") "Q." Smith + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmbB-000000005vi-0000-D Data file written for message 10HmbB-000000005vi-0000 @@ -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 @@ -173,9 +179,9 @@ Recipients: >>Headers received: >>Headers after rewriting and local additions: -I Message-Id: -F From: "John (\"Jack\") Q. Smith" - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: "John (\"Jack\") Q. Smith" + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmbC-000000005vi-0000-D Data file written for message 10HmbC-000000005vi-0000 @@ -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 @@ -205,9 +212,9 @@ Recipients: >>Headers received: >>Headers after rewriting and local additions: -I Message-Id: -F From: "Phil \"Q Hazel" - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: "Phil \"Q Hazel" + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmbD-000000005vi-0000-D Data file written for message 10HmbD-000000005vi-0000 @@ -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 @@ -237,9 +245,9 @@ Recipients: >>Headers received: >>Headers after rewriting and local additions: -I Message-Id: -F From: "Phil \"Q" "X." Hazel - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: "Phil \"Q" "X." Hazel + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmbE-000000005vi-0000-D Data file written for message 10HmbE-000000005vi-0000 diff --git a/test/stderr/0499 b/test/stderr/0499 index 8a3733a50..ebc043e8e 100644 --- a/test/stderr/0499 +++ b/test/stderr/0499 @@ -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 @@ -16,35 +17,39 @@ routing ph@mxt1.test.ex --------> r1 router <-------- local_part=ph domain=mxt1.test.ex checking domains -mxt1.test.ex in "+anymx"? +mxt1.test.ex in domains? list element: +anymx start sublist anymx mxt1.test.ex in "@mx_any"? ╎list element: @mx_any -DNS lookup of mxt1.test.ex (MX) using fakens -DNS lookup of mxt1.test.ex (MX) succeeded -DNS lookup of eximtesthost.test.ex (A) using fakens -DNS lookup of eximtesthost.test.ex (A) succeeded + ╎check dnssec require list + ╎check dnssec request list + ╎DNS lookup of mxt1.test.ex (MX) using fakens + ╎DNS lookup of mxt1.test.ex (MX) succeeded + ╎DNS lookup of eximtesthost.test.ex (A) using fakens + ╎DNS lookup of eximtesthost.test.ex (A) succeeded local host has lowest MX -host_find_bydns yield = HOST_FOUND_LOCAL (4); returned hosts: - eximtesthost.test.ex ip4.ip4.ip4.ip4 MX=5 + ╎host_find_bydns yield = HOST_FOUND_LOCAL (4); returned hosts: + ╎ eximtesthost.test.ex ip4.ip4.ip4.ip4 MX=5 ╎mxt1.test.ex in "@mx_any"? yes (matched "@mx_any") end sublist anymx data from lookup saved for cache for +anymx: key 'mxt1.test.ex' value '@mx_any' - mxt1.test.ex in "+anymx"? yes (matched "+anymx") + mxt1.test.ex in domains? yes (matched "+anymx") checking "condition" "${if match_domain{$domain}{+anymx}{yes}}"... mxt1.test.ex in "+anymx"? list element: +anymx start sublist anymx ╎mxt1.test.ex in "@mx_any"? ╎ list element: @mx_any -DNS lookup of mxt1.test.ex (MX) using fakens -DNS lookup of mxt1.test.ex (MX) succeeded -DNS lookup of eximtesthost.test.ex (A) using fakens -DNS lookup of eximtesthost.test.ex (A) succeeded + ╎ check dnssec require list + ╎ check dnssec request list + ╎ DNS lookup of mxt1.test.ex (MX) using fakens + ╎ DNS lookup of mxt1.test.ex (MX) succeeded + ╎ DNS lookup of eximtesthost.test.ex (A) using fakens + ╎ DNS lookup of eximtesthost.test.ex (A) succeeded local host has lowest MX -host_find_bydns yield = HOST_FOUND_LOCAL (4); returned hosts: - eximtesthost.test.ex ip4.ip4.ip4.ip4 MX=5 + ╎ host_find_bydns yield = HOST_FOUND_LOCAL (4); returned hosts: + ╎ eximtesthost.test.ex ip4.ip4.ip4.ip4 MX=5 ╎ mxt1.test.ex in "@mx_any"? yes (matched "@mx_any") end sublist anymx mxt1.test.ex in "+anymx"? yes (matched "+anymx") diff --git a/test/stderr/0512 b/test/stderr/0512 index 18ebdc002..f3979815b 100644 --- a/test/stderr/0512 +++ b/test/stderr/0512 @@ -1,9 +1,12 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config admin user dropping to exim gid; retaining priv uid LOG: queue_run MAIN Start queue run: pid=p1234 -qf +myhost.test.ex in ""? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) >>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>> --------> userx@myhost.test.ex <-------- t1 transport entered @@ -15,10 +18,11 @@ no message retry record 127.0.0.1 [127.0.0.1]:1111 retry-status = usable delivering 10HmaX-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (userx@myhost.test.ex) hosts_max_try limit reached with this host -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... + failed: Connection refused LOG: MAIN H=127.0.0.1 [127.0.0.1] Connection refused -added retry item for T:127.0.0.1:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2 +added retry item for T:[127.0.0.1]:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2 temporary delivery error(s) override hosts_max_try (message older than host's retry time) Clearing TFO as not first host for message getting address for 127.0.0.1 @@ -27,10 +31,11 @@ no message retry record 127.0.0.1 [127.0.0.1]:1111 retry-status = usable delivering 10HmaX-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (userx@myhost.test.ex) hosts_max_try limit reached with this host -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... + failed: Connection refused LOG: MAIN H=127.0.0.1 [127.0.0.1] Connection refused -added retry item for T:127.0.0.1:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2 +added retry item for T:[127.0.0.1]:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2 temporary delivery error(s) override hosts_max_try (message older than host's retry time) Clearing TFO as not first host for message getting address for 127.0.0.1 @@ -39,10 +44,11 @@ no message retry record 127.0.0.1 [127.0.0.1]:1111 retry-status = usable delivering 10HmaX-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (userx@myhost.test.ex) hosts_max_try limit reached with this host -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... + failed: Connection refused LOG: MAIN H=127.0.0.1 [127.0.0.1] Connection refused -added retry item for T:127.0.0.1:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2 +added retry item for T:[127.0.0.1]:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2 temporary delivery error(s) override hosts_max_try (message older than host's retry time) Clearing TFO as not first host for message getting address for 127.0.0.1 @@ -51,20 +57,23 @@ no message retry record 127.0.0.1 [127.0.0.1]:1111 retry-status = usable delivering 10HmaX-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (userx@myhost.test.ex) hosts_max_try limit reached with this host -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... + failed: Connection refused LOG: MAIN H=127.0.0.1 [127.0.0.1] Connection refused -added retry item for T:127.0.0.1:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2 +added retry item for T:[127.0.0.1]:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2 reached transport hosts_max_try limit 1 all IP addresses skipped or deferred at least one address updating wait-t1 database already listed for 127.0.0.1 Leaving t1 transport +>>>>>>>>>>>>>>>> Exim pid=p1236 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN == userx@myhost.test.ex R=r1 T=t1 defer (dd): Connection refused 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 @@ -73,6 +82,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 @@ -81,20 +91,23 @@ LOG: MAIN => :blackhole: R=r0 LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1237 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1236 (bounce-message) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1238 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1237 (bounce-message) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1238 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1239 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> 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 LOG: queue_run MAIN Start queue run: pid=p1235 -qf +myhost.test.ex in ""? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) >>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>> --------> userx@myhost.test.ex <-------- t1 transport entered @@ -106,10 +119,11 @@ no message retry record 127.0.0.1 [127.0.0.1]:1111 retry-status = usable delivering 10HmaZ-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (userx@myhost.test.ex) hosts_max_try limit reached with this host -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... + failed: Connection refused LOG: MAIN H=127.0.0.1 [127.0.0.1] Connection refused -added retry item for T:127.0.0.1:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2 +added retry item for T:[127.0.0.1]:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2 temporary delivery error(s) override hosts_max_try (message older than host's retry time) Clearing TFO as not first host for message getting address for 127.0.0.1 @@ -118,10 +132,11 @@ no message retry record 127.0.0.1 [127.0.0.1]:1111 retry-status = usable delivering 10HmaZ-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (userx@myhost.test.ex) hosts_max_try limit reached with this host -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... + failed: Connection refused LOG: MAIN H=127.0.0.1 [127.0.0.1] Connection refused -added retry item for T:127.0.0.1:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2 +added retry item for T:[127.0.0.1]:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2 temporary delivery error(s) override hosts_max_try (message older than host's retry time) reached transport hosts_max_try_hardlimit limit 2 all IP addresses skipped or deferred at least one address @@ -129,11 +144,13 @@ hosts_max_try_hardlimit reached: behave as if all hosts were tried updating wait-t1 database already listed for 127.0.0.1 Leaving t1 transport +>>>>>>>>>>>>>>>> Exim pid=p1240 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN == userx@myhost.test.ex R=r1 T=t1 defer (dd): Connection refused 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 @@ -142,6 +159,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 @@ -150,11 +168,11 @@ LOG: MAIN => :blackhole: R=r0 LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1240 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1239 (bounce-message) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1242 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1241 (bounce-message) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1241 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1243 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: queue_run MAIN End queue run: pid=p1235 -qf >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0513 b/test/stderr/0513 index ac63399e7..e76e994f2 100644 --- a/test/stderr/0513 +++ b/test/stderr/0513 @@ -10,6 +10,8 @@ >>> list element: @ >>> list element: @[] >>> a.b.c.d in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -22,9 +24,12 @@ >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing x@mxt2.test.ex >>> calling r1 router ->>> mxt2.test.ex in "*"? ->>> list element: * ->>> mxt2.test.ex in "*"? yes (matched "*") +>>> check dnssec require list +>>> mxt2.test.ex in dnssec_require_domains? no (option unset) +>>> check dnssec request list +>>> mxt2.test.ex in dnssec_request_domains? +>>> list element: * +>>> mxt2.test.ex in dnssec_request_domains? yes (matched "*") >>> r1 router declined for x@mxt2.test.ex >>> no more routers >>> ----------- end verify ------------ diff --git a/test/stderr/0514 b/test/stderr/0514 index 31658bec3..bb94dd359 100644 --- a/test/stderr/0514 +++ b/test/stderr/0514 @@ -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 @@ -16,3 +17,5 @@ Non-recipients: recipients_count=1 **** SPOOL_IN - No additional fields body_linecount=1 message_linecount=0 +search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0524 b/test/stderr/0524 index f515c0622..2212a1b46 100644 --- a/test/stderr/0524 +++ b/test/stderr/0524 @@ -10,6 +10,8 @@ >>> list element: @ >>> list element: @[] >>> csa1.test.ex in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -29,6 +31,8 @@ >>> list element: @ >>> list element: @[] >>> csa2.test.ex in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -54,6 +58,8 @@ LOG: H=(csa2.test.ex) [V4NET.9.8.7] rejected MAIL <>: client SMTP authorization >>> list element: @ >>> list element: @[] >>> csa1.test.ex in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -74,6 +80,8 @@ LOG: H=(csa1.test.ex) [V4NET.9.8.8] rejected MAIL <>: client SMTP authorization >>> list element: @ >>> list element: @[] >>> csa2.test.ex in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * diff --git a/test/stderr/0525 b/test/stderr/0525 index fa4f709a1..7c664e650 100644 --- a/test/stderr/0525 +++ b/test/stderr/0525 @@ -3,7 +3,8 @@ LOG: smtp_connection MAIN LOG: MAIN <= CALLER@myhost.test.ex U=CALLER P=local-smtp S=sss delivering 10HmaX-000000005vi-0000 -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Welcome SMTP>> EHLO myhost.test.ex SMTP<< 250 Hi diff --git a/test/stderr/0529 b/test/stderr/0529 index 536804c4d..aeecbe615 100644 --- a/test/stderr/0529 +++ b/test/stderr/0529 @@ -1,21 +1,21 @@ 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 dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: x@test.ex no domain retry record no address retry record -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: TESTSUITE/test-mail/rmbox @@ -26,39 +26,37 @@ After routing: Remote deliveries: Failed addresses: Deferred addresses: -locking TESTSUITE/spool/db/retry.lockfile no retry data available +>>>>>>>>>>>>>>>> Exim pid=p1237 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> added retry item for T:TESTSUITE/test-mail/rmbox:x@test.ex: errno=-22 more_errno=dd flags=0 LOG: MAIN == TESTSUITE/test-mail/rmbox R=r1 T=t1 defer (-22): mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/rmbox) Processing retry items -Succeeded addresses: - x@test.ex: no retry items -Failed addresses: -Deferred addresses: - TESTSUITE/test-mail/rmbox -locking TESTSUITE/spool/db/retry.lockfile -retry for T:TESTSUITE/test-mail/rmbox:x@test.ex = *@test.ex -22 0 -failing_interval=ttt message_age=ttt -Writing retry data for T:TESTSUITE/test-mail/rmbox:x@test.ex - first failed=dddd last try=dddd next try=+900 expired=0 - errno=-22 more_errno=dd mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/rmbox) - x@test.ex: no retry items + Succeeded addresses: + x@test.ex: no retry items + Failed addresses: + Deferred addresses: + TESTSUITE/test-mail/rmbox + retry for T:TESTSUITE/test-mail/rmbox:x@test.ex = *@test.ex -22 0 + failing_interval=ttt message_age=ttt + Writing retry data for T:TESTSUITE/test-mail/rmbox:x@test.ex + first failed=dddd last try=dddd next try=+900 expired=0 + errno=-22 more_errno=dd mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/rmbox) + x@test.ex: no retry items 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 LOG: queue_run MAIN Start queue run: pid=p1234 -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: x@test.ex no domain retry record no address retry record -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: TESTSUITE/test-mail/rmbox >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -68,7 +66,6 @@ After routing: Remote deliveries: Failed addresses: Deferred addresses: -locking TESTSUITE/spool/db/retry.lockfile retry record exists: age=ttt (max 1w) time to retry = tttt expired = 0 retry time not reached: checking ultimate address timeout @@ -77,14 +74,14 @@ retry time not reached: checking ultimate address timeout LOG: retry_defer MAIN == TESTSUITE/test-mail/rmbox R=r1 T=t1 defer (-53): Retry time not yet reached Processing retry items -Succeeded addresses: - x@test.ex: no retry items -Failed addresses: -Deferred addresses: - TESTSUITE/test-mail/rmbox: no retry items - x@test.ex: no retry items + Succeeded addresses: + x@test.ex: no retry items + Failed addresses: + Deferred addresses: + TESTSUITE/test-mail/rmbox: no retry items + x@test.ex: no retry items end of retry processing ->>>>>>>>>>>>>>>> Exim pid=p1237 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1238 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: queue_run MAIN End queue run: pid=p1234 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0537 b/test/stderr/0537 index 21c744c9e..5142edde8 100644 --- a/test/stderr/0537 +++ b/test/stderr/0537 @@ -86,6 +86,8 @@ LOG: sender_ident=ident >>> end of ACL "log": ACCEPT >>> accept: condition test succeeded in ACL "connect" >>> end of ACL "connect": ACCEPT +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * diff --git a/test/stderr/0543 b/test/stderr/0543 index 96b982184..f43aa63fe 100644 --- a/test/stderr/0543 +++ b/test/stderr/0543 @@ -1,10 +1,10 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config admin user dropping to exim gid; retaining priv uid LOG: queue_run MAIN Start queue run: pid=p1234 -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: userx@domain1 unique = userx@domain1 @@ -31,15 +31,13 @@ After routing: userx@domain1 Failed addresses: Deferred addresses: -locking TESTSUITE/spool/db/retry.lockfile -locking TESTSUITE/spool/db/wait-smtp.lockfile -cmdlog: '220:EHLO:250-:MAIL:250:RCPT:250:DATA:354:.:250:QUIT:250' +cmdlog: '220:EHLO:250-:MAIL:250:RCPT:250:DATA:354:.:250:QUIT+:250' +>>>>>>>>>>>>>>>> Exim pid=p1235 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => userx@domain1 R=smarthost T=smtp H=thisloop.test.ex [127.0.0.1] C="250 OK" LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1235 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> -locking TESTSUITE/spool/db/retry.lockfile +>>>>>>>>>>>>>>>> Exim pid=p1236 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: usery@domain1 unique = usery@domain1 @@ -52,7 +50,7 @@ After routing: Failed addresses: Deferred addresses: usery@domain1 ->>>>>>>>>>>>>>>> Exim pid=p1236 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1237 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: queue_run MAIN End queue run: pid=p1234 >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0544 b/test/stderr/0544 index 17ec179ea..1f7e29bd4 100644 --- a/test/stderr/0544 +++ b/test/stderr/0544 @@ -1,349 +1,357 @@ Exim version x.yz .... +Hints DB: environment after trimming: PATH= adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys configuration file is TESTSUITE/test-config admin user +try option gecos_pattern +try option gecos_name +try option unknown_login +try option smtp_active_hostname +try option message_size_limit +try option acl_not_smtp_start +try option message_id_header_domain +try option message_id_header_text ╭considering: ${tod_full} - ├──expanding: ${tod_full} - ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 - ╭considering: Received: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: Received: - ├considering: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├───expanded: ${tod_full} + ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 +try option received_header_text + ╭considering: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: Received:░ + ├considering: ${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_rcvhost ├─────result: false - ╭───scanning: from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: from - ├───scanning: $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭───scanning: from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: from░ + ├───scanning: $sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: - ├───scanning: - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - - ├───scanning: }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: from $sender_rcvhost - - ├─────result: from - + ├───scanning: ↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉ + ├───scanning: }{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: from░$sender_rcvhost↩ + ␉ + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ╭considering: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_ident ├─────result: true - ╭considering: from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: from - ├considering: ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ╎╭considering: $sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - ╎ }}(Exim $version_number) - ╎ ${if def:sender_address {(envelope-from <$sender_address>) - ╎ }}id $message_exim_id${if def:received_for { - ╎ for $received_for}} + ╭considering: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: from░ + ├considering: ${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ╎╭considering: $sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ╎␉}}(Exim░$version_number)↩ + ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ╎␉}}id░$message_exim_id${if░def:received_for░{↩ + ╎␉for░$received_for}} ╎├──────value: CALLER - ╎├considering: } }}${if def:sender_helo_name {(helo=$sender_helo_name) - ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - ╎ }}(Exim $version_number) - ╎ ${if def:sender_address {(envelope-from <$sender_address>) - ╎ }}id $message_exim_id${if def:received_for { - ╎ for $received_for}} - ╎├──expanding: $sender_ident + ╎├considering: }░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ╎␉}}(Exim░$version_number)↩ + ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ╎␉}}id░$message_exim_id${if░def:received_for░{↩ + ╎␉for░$received_for}} + ╎├───expanded: $sender_ident ╎╰─────result: CALLER ├─────op-res: CALLER - ├considering: }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: from ${quote_local_part:$sender_ident} - ╰─────result: from CALLER - ├───item-res: from CALLER - ├considering: ${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: }}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: from░${quote_local_part:$sender_ident}░ + ╰─────result: from░CALLER░ + ├───item-res: from░CALLER░ + ├considering: ${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_helo_name ├─────result: false - ╭───scanning: (helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭───scanning: (helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├───────text: (helo= - ├───scanning: $sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├───scanning: $sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: - ├───scanning: ) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: ) - - ├───scanning: }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: (helo=$sender_helo_name) - - ├─────result: (helo=) - + ├───scanning: )↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: )↩ + ␉ + ├───scanning: }}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: (helo=$sender_helo_name)↩ + ␉ + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: - ├considering: }}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }} - ╰─────result: from CALLER - ├───item-res: from CALLER - ├considering: by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: by - ├considering: $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: }}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}} + ╰─────result: from░CALLER░ + ├───item-res: from░CALLER░ + ├considering: by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: by░ + ├considering: $primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: the.local.host.name - ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: ${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:received_protocol ├─────result: true - ╭considering: with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: with - ├considering: $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: with░ + ├considering: $received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: local - ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: with $received_protocol - ╰─────result: with local - ├───item-res: with local - ├considering: ${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: ($tls_in_ver) - ├─────result: () + ├considering: ░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: }}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: with░$received_protocol░ + ╰─────result: with░local░ + ├───item-res: with░local░ + ├considering: ${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ░($tls_in_ver) + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: - ├considering: ${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:tls_in_cipher_std ├─────result: false - ╭───scanning: tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: tls - ├───scanning: $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭───scanning: ░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░tls░ + ├───scanning: $tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: - ├───scanning: - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - - ├───scanning: }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: tls $tls_in_cipher_std - - ├─────result: tls - + ├───scanning: ↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉ + ├───scanning: }}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ░tls░$tls_in_cipher_std↩ + ␉ + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: - ├considering: (Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: (Exim - ├considering: $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: (Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: (Exim░ + ├considering: $version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: x.yz - ├considering: ) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: ) - - ├considering: ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: )↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: )↩ + ␉ + ├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_address ├─────result: true - ╭considering: (envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: (envelope-from < - ├considering: $sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: (envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: (envelope-from░< + ├considering: $sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: CALLER@test.ex - ├considering: >) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: >) - - ├considering: }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: (envelope-from <$sender_address>) - - ╰─────result: (envelope-from ) - - ├───item-res: (envelope-from ) - - ├considering: id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: id - ├considering: $message_exim_id${if def:received_for { - for $received_for}} + ├considering: >)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: >)↩ + ␉ + ├considering: }}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: (envelope-from░<$sender_address>)↩ + ␉ + ╰─────result: (envelope-from░)↩ + ␉ + ├───item-res: (envelope-from░)↩ + ␉ + ├considering: id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: id░ + ├considering: $message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: 10HmaX-000000005vi-0000 - ├considering: ${if def:received_for { - for $received_for}} + ├considering: ${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:received_for ├─────result: false - ╭───scanning: - for $received_for}} - ├───────text: - for + ╭───scanning: ↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉for░ ├───scanning: $received_for}} ├──────value: ├───scanning: }} - ├──expanding: - for $received_for - ├─────result: - for + ├───expanded: ↩ + ␉for░$received_for + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: - ├──expanding: Received: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ╰─────result: Received: from CALLER by the.local.host.name with local (Exim x.yz) - (envelope-from ) - id 10HmaX-000000005vi-0000 + ├───expanded: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ╰─────result: Received:░from░CALLER░by░the.local.host.name░with░local░(Exim░x.yz)↩ + ␉(envelope-from░)↩ + ␉id░10HmaX-000000005vi-0000 +try option acl_not_smtp ╭considering: ${tod_full} - ├──expanding: ${tod_full} - ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 + ├───expanded: ${tod_full} + ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 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= adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys @@ -351,110 +359,138 @@ configuration file is TESTSUITE/test-config trusted user admin user dropping to exim gid; retaining priv uid +try option router_home_directory +try option set +try option transport +try option unseen +try option router_home_directory +try option set +try option transport +try option unseen +try option multi_domain +try option multi_domain +try option max_parallel +try option return_path ╭considering: $domain ├──────value: domain1.ex ╰──(tainted) - ├──expanding: $domain + ├───expanded: $domain ╰─────result: domain1.ex ╰──(tainted) +>>>>>>>>>>>>>>>> Exim pid=p1236 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN == userx@domain1.ex R=smarthost T=smtp defer (-1): first-pass only routing due to -odqs, queue_smtp_domains or control=queue LOG: MAIN == userx@domain2.ex R=smarthost T=smtp defer (-1): first-pass only routing due to -odqs, queue_smtp_domains or control=queue - ╭considering: ${if or {{ !eq{$h_list-id:$h_list-post:$h_list-subscribe:}{} }{ match{$h_precedence:}{(?i)bulk|list|junk} }{ match{$h_auto-submitted:}{(?i)auto-generated|auto-replied} }} {no}{yes}} - ╭considering: $h_list-id:$h_list-post:$h_list-subscribe:}{} }{ match{$h_precedence:}{(?i)bulk|list|junk} }{ match{$h_auto-submitted:}{(?i)auto-generated|auto-replied} }} {no}{yes}} - ├considering: $h_list-post:$h_list-subscribe:}{} }{ match{$h_precedence:}{(?i)bulk|list|junk} }{ match{$h_auto-submitted:}{(?i)auto-generated|auto-replied} }} {no}{yes}} - ├considering: $h_list-subscribe:}{} }{ match{$h_precedence:}{(?i)bulk|list|junk} }{ match{$h_auto-submitted:}{(?i)auto-generated|auto-replied} }} {no}{yes}} - ├considering: }{} }{ match{$h_precedence:}{(?i)bulk|list|junk} }{ match{$h_auto-submitted:}{(?i)auto-generated|auto-replied} }} {no}{yes}} - ├──expanding: $h_list-id:$h_list-post:$h_list-subscribe: +try option delay_warning_condition + ╭considering: ${if░or░{{░!eq{$h_list-id:$h_list-post:$h_list-subscribe:}{}░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}} + ╭considering: $h_list-id:$h_list-post:$h_list-subscribe:}{}░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}} + ├considering: $h_list-post:$h_list-subscribe:}{}░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}} + ├considering: $h_list-subscribe:}{}░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}} + ├considering: }{}░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}} + ├───expanded: $h_list-id:$h_list-post:$h_list-subscribe: ╰─────result: - ╭considering: } }{ match{$h_precedence:}{(?i)bulk|list|junk} }{ match{$h_auto-submitted:}{(?i)auto-generated|auto-replied} }} {no}{yes}} - ├──expanding: + ╭considering: }░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}} + ├───expanded: ╰─────result: - ╭considering: $h_precedence:}{(?i)bulk|list|junk} }{ match{$h_auto-submitted:}{(?i)auto-generated|auto-replied} }} {no}{yes}} - ├considering: }{(?i)bulk|list|junk} }{ match{$h_auto-submitted:}{(?i)auto-generated|auto-replied} }} {no}{yes}} - ├──expanding: $h_precedence: + ╭considering: $h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}} + ├considering: }{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}} + ├───expanded: $h_precedence: ╰─────result: - ╭considering: (?i)bulk|list|junk} }{ match{$h_auto-submitted:}{(?i)auto-generated|auto-replied} }} {no}{yes}} + ╭considering: (?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}} ├───────text: (?i)bulk|list|junk - ├considering: } }{ match{$h_auto-submitted:}{(?i)auto-generated|auto-replied} }} {no}{yes}} - ├──expanding: (?i)bulk|list|junk + ├considering: }░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}} + ├───expanded: (?i)bulk|list|junk ╰─────result: (?i)bulk|list|junk compiled RE '(?i)bulk|list|junk' not found in local cache compiling RE '(?i)bulk|list|junk' compiled RE '(?i)bulk|list|junk' saved in local cache - ╭considering: $h_auto-submitted:}{(?i)auto-generated|auto-replied} }} {no}{yes}} - ├considering: }{(?i)auto-generated|auto-replied} }} {no}{yes}} - ├──expanding: $h_auto-submitted: + ╭considering: $h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}} + ├considering: }{(?i)auto-generated|auto-replied}░}}░{no}{yes}} + ├───expanded: $h_auto-submitted: ╰─────result: - ╭considering: (?i)auto-generated|auto-replied} }} {no}{yes}} + ╭considering: (?i)auto-generated|auto-replied}░}}░{no}{yes}} ├───────text: (?i)auto-generated|auto-replied - ├considering: } }} {no}{yes}} - ├──expanding: (?i)auto-generated|auto-replied + ├considering: }░}}░{no}{yes}} + ├───expanded: (?i)auto-generated|auto-replied ╰─────result: (?i)auto-generated|auto-replied compiled RE '(?i)auto-generated|auto-replied' not found in local cache compiling RE '(?i)auto-generated|auto-replied' compiled RE '(?i)auto-generated|auto-replied' saved in local cache - ├──condition: or {{ !eq{$h_list-id:$h_list-post:$h_list-subscribe:}{} }{ match{$h_precedence:}{(?i)bulk|list|junk} }{ match{$h_auto-submitted:}{(?i)auto-generated|auto-replied} }} + ├──condition: or░{{░!eq{$h_list-id:$h_list-post:$h_list-subscribe:}{}░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}} ├─────result: false ╭───scanning: no}{yes}} ├───────text: no ├───scanning: }{yes}} - ├──expanding: no - ├─────result: no + ├───expanded: no + ├─────result: ◀skipped▶ ╰───skipping: result is not used ╭considering: yes}} ├───────text: yes ├considering: }} - ├──expanding: yes + ├───expanded: yes ╰─────result: yes - ├──expanding: ${if or {{ !eq{$h_list-id:$h_list-post:$h_list-subscribe:}{} }{ match{$h_precedence:}{(?i)bulk|list|junk} }{ match{$h_auto-submitted:}{(?i)auto-generated|auto-replied} }} {no}{yes}} + ├───expanded: ${if░or░{{░!eq{$h_list-id:$h_list-post:$h_list-subscribe:}{}░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}} ╰─────result: yes >>>>>>>>>>>>>>>> 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= adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys configuration file is TESTSUITE/test-config admin user +try option gecos_pattern +try option gecos_name +try option unknown_login +try option smtp_active_hostname LOG: smtp_connection MAIN SMTP connection from CALLER - ╭considering: $smtp_active_hostname ESMTP Exim $version_number $tod_full +try option message_size_limit +try option acl_smtp_connect +try option smtp_banner + ╭considering: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full ├──────value: the.local.host.name - ├considering: ESMTP Exim $version_number $tod_full - ├───────text: ESMTP Exim - ├considering: $version_number $tod_full + ├considering: ░ESMTP░Exim░$version_number░$tod_full + ├───────text: ░ESMTP░Exim░ + ├considering: $version_number░$tod_full ├──────value: x.yz - ├considering: $tod_full - ├───────text: + ├considering: ░$tod_full + ├───────text: ░ ├considering: $tod_full - ├──────value: Tue, 2 Mar 1999 09:44:33 +0000 - ├──expanding: $smtp_active_hostname ESMTP Exim $version_number $tod_full - ╰─────result: the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 - ╭considering: ${if match_domain {$sender_helo_name}{+dlist}} + ├──────value: Tue,░2░Mar░1999░09:44:33░+0000 + ├───expanded: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full + ╰─────result: the.local.host.name░ESMTP░Exim░x.yz░Tue,░2░Mar░1999░09:44:33░+0000 +try option acl_smtp_helo + ╭considering: ${if░match_domain░{$sender_helo_name}{+dlist}} ╭considering: $sender_helo_name}{+dlist}} ├──────value: ehlo.domain ╰──(tainted) ├considering: }{+dlist}} - ├──expanding: $sender_helo_name + ├───expanded: $sender_helo_name ╰─────result: ehlo.domain ╰──(tainted) ╭considering: +dlist}} ├───────text: +dlist ├considering: }} - ├──expanding: +dlist + ├───expanded: +dlist ╰─────result: +dlist ╭considering: $domain ├──────value: ehlo.domain ╰──(tainted) - ├──expanding: $domain + ├───expanded: $domain ╰─────result: ehlo.domain ╰──(tainted) - ├──condition: match_domain {$sender_helo_name}{+dlist} + ├──condition: match_domain░{$sender_helo_name}{+dlist} ├─────result: true - ├──expanding: ${if match_domain {$sender_helo_name}{+dlist}} + ├───expanded: ${if░match_domain░{$sender_helo_name}{+dlist}} ╰─────result: true +try option acl_smtp_etrn +try option acl_smtp_vrfy +try option acl_smtp_expn + in chunking_advertise_hosts? no (end of list) +try option acl_smtp_mail ╭considering: domain=$domain/sender_domain=$sender_address_domain ├───────text: domain= ├considering: $domain/sender_domain=$sender_address_domain @@ -464,9 +500,11 @@ LOG: smtp_connection MAIN ├considering: $sender_address_domain ├──────value: sender.domain ╰──(tainted) - ├──expanding: domain=$domain/sender_domain=$sender_address_domain + ├───expanded: domain=$domain/sender_domain=$sender_address_domain ╰─────result: domain=/sender_domain=sender.domain ╰──(tainted) + in "domain=/sender_domain=sender.domain"? no (end of list) +try option acl_smtp_rcpt ╭considering: domain=$domain/sender_domain=$sender_address_domain ├───────text: domain= ├considering: $domain/sender_domain=$sender_address_domain @@ -477,9 +515,10 @@ LOG: smtp_connection MAIN ├considering: $sender_address_domain ├──────value: sender.domain ╰──(tainted) - ├──expanding: domain=$domain/sender_domain=$sender_address_domain + ├───expanded: domain=$domain/sender_domain=$sender_address_domain ╰─────result: domain=recipient.domain/sender_domain=sender.domain ╰──(tainted) +recipient.domain in "domain=recipient.domain/sender_domain=sender.domain"? no (end of list) ╭considering: domain=$domain/sender_domain=$sender_address_domain ├───────text: domain= ├considering: $domain/sender_domain=$sender_address_domain @@ -490,9 +529,11 @@ LOG: smtp_connection MAIN ├considering: $sender_address_domain ├──────value: sender.domain ╰──(tainted) - ├──expanding: domain=$domain/sender_domain=$sender_address_domain + ├───expanded: domain=$domain/sender_domain=$sender_address_domain ╰─────result: domain=recipient.domain/sender_domain=sender.domain ╰──(tainted) +sender.domain in "domain=recipient.domain/sender_domain=sender.domain"? no (end of list) +try option acl_smtp_quit LOG: smtp_connection MAIN SMTP connection from CALLER D=qqs closed by QUIT ->>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0545 b/test/stderr/0545 index 94f313af8..0f7a71a32 100644 --- a/test/stderr/0545 +++ b/test/stderr/0545 @@ -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 @@ -18,26 +19,30 @@ local_part=userx domain=alias-eximtesthost calling dns router dns router called for userx@alias-eximtesthost domain = alias-eximtesthost -alias-eximtesthost in "*"? - list element: * - alias-eximtesthost in "*"? yes (matched "*") -DNS lookup of alias-eximtesthost (MX) using fakens -DNS lookup of alias-eximtesthost (MX) succeeded -CNAME found: change to eximtesthost.test.ex -DNS lookup of eximtesthost.test.ex (MX) using fakens -DNS lookup of eximtesthost.test.ex (MX) gave NO_DATA -returning DNS_NODATA -faking res_search(MX) response length as 65535 - writing neg-cache entry for eximtesthost.test.ex-MX-xxxx, ttl 3000 -alias-eximtesthost (MX resp) DNSSEC -DNS lookup of alias-eximtesthost (A) using fakens -DNS lookup of alias-eximtesthost (A) succeeded -CNAME found: change to eximtesthost.test.ex -DNS lookup of eximtesthost.test.ex (A) using fakens -DNS lookup of eximtesthost.test.ex (A) succeeded +main lookup for domain + check dnssec require list + alias-eximtesthost in dnssec_require_domains? no (option unset) + check dnssec request list + alias-eximtesthost in dnssec_request_domains? + list element: * + alias-eximtesthost in dnssec_request_domains? yes (matched "*") + DNS lookup of alias-eximtesthost (MX) using fakens + DNS lookup of alias-eximtesthost (MX) succeeded + CNAME found: change to eximtesthost.test.ex + DNS lookup of eximtesthost.test.ex (MX) using fakens + DNS lookup of eximtesthost.test.ex (MX) gave NO_DATA + returning DNS_NODATA + faking res_search(MX) response length as 65535 + writing neg-cache entry for eximtesthost.test.ex-MX-xxxx, ttl 3000 + alias-eximtesthost (MX resp) DNSSEC + DNS lookup of alias-eximtesthost (A) using fakens + DNS lookup of alias-eximtesthost (A) succeeded + CNAME found: change to eximtesthost.test.ex + DNS lookup of eximtesthost.test.ex (A) using fakens + DNS lookup of eximtesthost.test.ex (A) succeeded local host found for non-MX address -fully qualified name = alias-eximtesthost.test.ex -eximtesthost.test.ex ip4.ip4.ip4.ip4 mx=-1 sort=xx + fully qualified name = alias-eximtesthost.test.ex + eximtesthost.test.ex ip4.ip4.ip4.ip4 mx=-1 sort=xx domain changed to alias-eximtesthost.test.ex rewriting header lines re-routed to userx@alias-eximtesthost.test.ex @@ -50,21 +55,25 @@ local_part=userx domain=alias-eximtesthost.test.ex calling dns router dns router called for userx@alias-eximtesthost.test.ex domain = alias-eximtesthost.test.ex -alias-eximtesthost.test.ex in "*"? - list element: * - alias-eximtesthost.test.ex in "*"? yes (matched "*") -DNS lookup of alias-eximtesthost.test.ex (MX) using fakens -DNS lookup of alias-eximtesthost.test.ex (MX) succeeded -CNAME found: change to eximtesthost.test.ex -DNS lookup of eximtesthost.test.ex (MX): using cached value DNS_NODATA -DNS lookup of alias-eximtesthost.test.ex (A) using fakens -DNS lookup of alias-eximtesthost.test.ex (A) succeeded -CNAME found: change to eximtesthost.test.ex -DNS lookup of eximtesthost.test.ex (A) using fakens -DNS lookup of eximtesthost.test.ex (A) succeeded +main lookup for domain + check dnssec require list + alias-eximtesthost.test.ex in dnssec_require_domains? no (option unset) + check dnssec request list + alias-eximtesthost.test.ex in dnssec_request_domains? + list element: * + alias-eximtesthost.test.ex in dnssec_request_domains? yes (matched "*") + DNS lookup of alias-eximtesthost.test.ex (MX) using fakens + DNS lookup of alias-eximtesthost.test.ex (MX) succeeded + CNAME found: change to eximtesthost.test.ex + DNS lookup of eximtesthost.test.ex (MX): using cached value DNS_NODATA + DNS lookup of alias-eximtesthost.test.ex (A) using fakens + DNS lookup of alias-eximtesthost.test.ex (A) succeeded + CNAME found: change to eximtesthost.test.ex + DNS lookup of eximtesthost.test.ex (A) using fakens + DNS lookup of eximtesthost.test.ex (A) succeeded local host found for non-MX address -fully qualified name = alias-eximtesthost.test.ex -eximtesthost.test.ex ip4.ip4.ip4.ip4 mx=-1 sort=xx + fully qualified name = alias-eximtesthost.test.ex + eximtesthost.test.ex ip4.ip4.ip4.ip4 mx=-1 sort=xx remote host address is the local host: alias-eximtesthost.test.ex: configured to try delivery anyway set transport smtp queued for smtp transport: local_part = userx @@ -78,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 @@ -97,26 +107,30 @@ local_part=userx domain=alias-eximtesthost.test.ex calling dns router dns router called for userx@alias-eximtesthost.test.ex domain = alias-eximtesthost.test.ex -alias-eximtesthost.test.ex in "*"? - list element: * - alias-eximtesthost.test.ex in "*"? yes (matched "*") -DNS lookup of alias-eximtesthost.test.ex (MX) using fakens -DNS lookup of alias-eximtesthost.test.ex (MX) succeeded -CNAME found: change to eximtesthost.test.ex -DNS lookup of eximtesthost.test.ex (MX) using fakens -DNS lookup of eximtesthost.test.ex (MX) gave NO_DATA -returning DNS_NODATA -faking res_search(MX) response length as 65535 - writing neg-cache entry for eximtesthost.test.ex-MX-xxxx, ttl 3000 -alias-eximtesthost.test.ex (MX resp) DNSSEC -DNS lookup of alias-eximtesthost.test.ex (A) using fakens -DNS lookup of alias-eximtesthost.test.ex (A) succeeded -CNAME found: change to eximtesthost.test.ex -DNS lookup of eximtesthost.test.ex (A) using fakens -DNS lookup of eximtesthost.test.ex (A) succeeded +main lookup for domain + check dnssec require list + alias-eximtesthost.test.ex in dnssec_require_domains? no (option unset) + check dnssec request list + alias-eximtesthost.test.ex in dnssec_request_domains? + list element: * + alias-eximtesthost.test.ex in dnssec_request_domains? yes (matched "*") + DNS lookup of alias-eximtesthost.test.ex (MX) using fakens + DNS lookup of alias-eximtesthost.test.ex (MX) succeeded + CNAME found: change to eximtesthost.test.ex + DNS lookup of eximtesthost.test.ex (MX) using fakens + DNS lookup of eximtesthost.test.ex (MX) gave NO_DATA + returning DNS_NODATA + faking res_search(MX) response length as 65535 + writing neg-cache entry for eximtesthost.test.ex-MX-xxxx, ttl 3000 + alias-eximtesthost.test.ex (MX resp) DNSSEC + DNS lookup of alias-eximtesthost.test.ex (A) using fakens + DNS lookup of alias-eximtesthost.test.ex (A) succeeded + CNAME found: change to eximtesthost.test.ex + DNS lookup of eximtesthost.test.ex (A) using fakens + DNS lookup of eximtesthost.test.ex (A) succeeded local host found for non-MX address -fully qualified name = alias-eximtesthost.test.ex -eximtesthost.test.ex ip4.ip4.ip4.ip4 mx=-1 sort=xx + fully qualified name = alias-eximtesthost.test.ex + eximtesthost.test.ex ip4.ip4.ip4.ip4 mx=-1 sort=xx remote host address is the local host: alias-eximtesthost.test.ex: configured to try delivery anyway set transport smtp queued for smtp transport: local_part = userx diff --git a/test/stderr/0554 b/test/stderr/0554 index 2816f0baf..4f87801df 100644 --- a/test/stderr/0554 +++ b/test/stderr/0554 @@ -1,8 +1,8 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config admin user dropping to exim gid; retaining priv uid -locking TESTSUITE/spool/db/retry.lockfile no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: x@y @@ -16,32 +16,31 @@ After routing: Failed addresses: Deferred addresses: checking retry status of 127.0.0.1 -locking TESTSUITE/spool/db/retry.lockfile no retry data available added retry item for R:x@y:: errno=-44 more_errno=dd,A flags=0 -cmdlog: '220:EHLO:250:MAIL:250:RCPT:451:QUIT:250' +cmdlog: '220:EHLO:250:MAIL:250:RCPT:451:QUIT+:250' +>>>>>>>>>>>>>>>> Exim pid=p1235 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> reading retry information for R:x@y: from subprocess added retry item LOG: MAIN == x@y R=r1 T=smtp defer (-44) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error Processing retry items -Succeeded addresses: -Failed addresses: -Deferred addresses: - x@y -locking TESTSUITE/spool/db/retry.lockfile -retry for R:x@y: = * 0 0 -failing_interval=ttt message_age=ttt -Writing retry data for R:x@y: - first failed=dddd last try=dddd next try=+2 expired=0 - errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error + Succeeded addresses: + Failed addresses: + Deferred addresses: + x@y + retry for R:x@y: = * 0 0 + failing_interval=ttt message_age=ttt + Writing retry data for R:x@y: + first failed=dddd last try=dddd next try=+2 expired=0 + errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary error 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 -locking TESTSUITE/spool/db/retry.lockfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: x@y no domain retry record @@ -57,13 +56,12 @@ After routing: Failed addresses: Deferred addresses: checking retry status of 127.0.0.1 -locking TESTSUITE/spool/db/retry.lockfile no host retry record no message retry record added retry item for R:x@y:: errno=dd more_errno=dd,A flags=1 added retry item for R:x@y: errno=dd more_errno=dd,A flags=1 -locking TESTSUITE/spool/db/wait-smtp.lockfile -cmdlog: '220:EHLO:250:MAIL:250:RCPT:250:DATA:354:.:250:QUIT:250' +cmdlog: '220:EHLO:250:MAIL:250:RCPT:250:DATA:354:.:250:QUIT+:250' +>>>>>>>>>>>>>>>> Exim pid=p1237 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> reading retry information for R:x@y from subprocess existing delete item dropped added delete item @@ -82,15 +80,14 @@ reading retry information for R:x@y: from subprocess LOG: MAIN => x@y R=r1 T=smtp H=127.0.0.1 [127.0.0.1] C="250 OK" Processing retry items -Succeeded addresses: - x@y -locking TESTSUITE/spool/db/retry.lockfile -deleted retry information for R:x@y: -deleted retry information for R:x@y -deleted retry information for R:y -Failed addresses: -Deferred addresses: + Succeeded addresses: + x@y + deleted retry information for R:x@y: + deleted retry information for R:x@y + deleted retry information for R:y + Failed addresses: + Deferred addresses: end of retry processing LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0563 b/test/stderr/0563 index e20d7cc93..8ce12a2e5 100644 --- a/test/stderr/0563 +++ b/test/stderr/0563 @@ -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 @@ -17,7 +18,7 @@ routing joe-real@testexim.test.ex --------> router1 router <-------- local_part=joe-real domain=testexim.test.ex checking local_parts -joe-real in "+aliases"? +joe-real in local_parts? list element: +aliases start sublist aliases joe-real in "joe:sam:tom"? @@ -26,20 +27,20 @@ joe-real in "+aliases"? ╎list element: tom joe-real in "joe:sam:tom"? no (end of list) end sublist aliases -joe-real in "+aliases"? no (end of list) +joe-real in local_parts? no (end of list) router1 router skipped: local_parts mismatch --------> router2 router <-------- local_part=joe-real domain=testexim.test.ex stripped suffix -real checking local_parts -joe in "+aliases"? +joe in local_parts? list element: +aliases start sublist aliases joe in "joe:sam:tom"? ╎list element: joe ╎joe in "joe:sam:tom"? yes (matched "joe") end sublist aliases - joe in "+aliases"? yes (matched "+aliases") + joe in local_parts? yes (matched "+aliases") calling router2 router router2 router called for joe-real@testexim.test.ex domain = testexim.test.ex diff --git a/test/stderr/0569 b/test/stderr/0569 index 706e61db5..8c41999d9 100644 --- a/test/stderr/0569 +++ b/test/stderr/0569 @@ -26,6 +26,7 @@ >>> accept: condition test succeeded in inline ACL >>> end of inline ACL: ACCEPT >>> host in ignore_fromline_hosts? no (option unset) +LOG: 10HmaX-000000005vi-0000 qualify/rewrite: '>' missing at end of address >>> using ACL "check_message" >>> processing "require" (TESTSUITE/test-config 25) >>> message: ${if def:acl_m_message {$acl_m_message}} diff --git a/test/stderr/0575 b/test/stderr/0575 index 3c7534e44..ad89f09be 100644 --- a/test/stderr/0575 +++ b/test/stderr/0575 @@ -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 @@ -46,8 +47,8 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers search_tidyup called >>Headers after rewriting and local additions: diff --git a/test/stderr/0578 b/test/stderr/0578 index d804df43b..67739d428 100644 --- a/test/stderr/0578 +++ b/test/stderr/0578 @@ -1,9 +1,11 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config trusted user admin user LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@localhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -12,7 +14,8 @@ Attempting full verification using callout callout cache: no domain record found for localhost callout cache: no address record found for ok@localhost interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate @@ -29,15 +32,25 @@ cmdlog: '220:EHLO:250-:MAIL|:RCPT:250:250:QUIT:250' wrote callout cache domain record for localhost: result=1 postmaster=0 random=0 wrote positive callout cache address record for ok@localhost +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@localhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -46,15 +59,25 @@ Attempting full verification using callout callout cache: found domain record for localhost callout cache: found address record for ok@localhost callout cache: address record is positive +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@localhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -63,7 +86,8 @@ Attempting full verification using callout callout cache: found domain record for localhost callout cache: address record expired for ok@localhost interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... + failed: Connection refused LOG: MAIN REJECT H=(test) [V4NET.0.0.1] U=root sender verify defer for : Could not complete sender verify callout: 127.0.0.1 [127.0.0.1] : Connection refused created log directory TESTSUITE/spool/log @@ -73,11 +97,13 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying bad@localhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -86,7 +112,8 @@ Attempting full verification using callout callout cache: found domain record for localhost callout cache: no address record found for bad@localhost interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate @@ -111,11 +138,13 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying bad@localhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -132,11 +161,13 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@localhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -145,7 +176,8 @@ Attempting full verification using callout callout cache: found domain record for localhost callout cache: address record expired for ok@localhost interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate @@ -169,11 +201,13 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@localhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -189,11 +223,14 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -202,7 +239,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost callout cache: no address record found for ok@otherhost interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate @@ -234,11 +272,14 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -254,11 +295,14 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost2 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -267,7 +311,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost2 callout cache: no address record found for ok@otherhost2 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate @@ -291,15 +336,25 @@ cmdlog: '220:EHLO:250-:MAIL|:RCPT:250:250:RSET:250:MAIL|:RCPT:250:250:QUIT:250' wrote callout cache domain record for otherhost2: result=1 postmaster=1 random=0 wrote positive callout cache address record for ok@otherhost2 +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost2 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -309,15 +364,26 @@ callout cache: found domain record for otherhost2 callout cache: domain accepts RCPT TO: callout cache: found address record for ok@otherhost2 callout cache: address record is positive +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost3 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -326,7 +392,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost3 callout cache: no address record found for ok@otherhost3 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate @@ -342,17 +409,27 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected cmdlog: '220:EHLO:250-:MAIL|:RCPT:250:250:QUIT:250' wrote callout cache domain record for otherhost3: result=1 postmaster=0 random=1 +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) LOG: MAIN (random) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying otherok@otherhost3 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -360,17 +437,28 @@ Considering otherok@otherhost3 Attempting full verification using callout callout cache: found domain record for otherhost3 callout cache: domain accepts random addresses +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) LOG: MAIN (random) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost4 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -379,7 +467,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost4 callout cache: no address record found for ok@otherhost4 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate @@ -395,17 +484,27 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected cmdlog: '220:EHLO:250-:MAIL|:RCPT:250:250:QUIT:250' wrote callout cache domain record for otherhost4: result=1 postmaster=0 random=1 +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) LOG: MAIN (random) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost4 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -413,17 +512,27 @@ Considering ok@otherhost4 Attempting full verification using callout callout cache: found domain record for otherhost4 callout cache: domain accepts random addresses +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) LOG: MAIN (random) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost41 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -432,7 +541,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost41 callout cache: no address record found for ok@otherhost41 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate @@ -462,15 +572,25 @@ cmdlog: '220:EHLO:250-:MAIL|:RCPT:250:550:RSET:250:MAIL|:RCPT:250:250:RSET:250:M wrote callout cache domain record for otherhost41: result=1 postmaster=1 random=2 wrote positive callout cache address record for ok@otherhost41 +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost41 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -481,15 +601,23 @@ callout cache: domain rejects random addresses callout cache: domain accepts RCPT TO: callout cache: found address record for ok@otherhost41 callout cache: address record is positive +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost21 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -498,7 +626,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost21 callout cache: no address record found for ok@otherhost21 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate @@ -522,15 +651,25 @@ cmdlog: '220:EHLO:250-:MAIL|:RCPT:250:250:RSET:250:MAIL|:RCPT:250:250:QUIT:250' wrote callout cache domain record for otherhost21: result=1 postmaster=1 random=0 wrote positive callout cache address record for ok@otherhost21 +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok2@otherhost21 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -540,7 +679,8 @@ callout cache: found domain record for otherhost21 callout cache: domain accepts RCPT TO: callout cache: no address record found for ok2@otherhost21 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate @@ -557,15 +697,26 @@ cmdlog: '220:EHLO:250-:MAIL|:RCPT:250:250:QUIT:250' wrote callout cache domain record for otherhost21: result=1 postmaster=1 random=0 wrote positive callout cache address record for ok2@otherhost21 +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost31 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -574,7 +725,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost31 callout cache: no address record found for ok@otherhost31 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate @@ -597,15 +749,25 @@ cmdlog: '220:EHLO:250-:MAIL|:RCPT:250:550:RSET:250:MAIL|:RCPT:250:250:QUIT:250' wrote callout cache domain record for otherhost31: result=1 postmaster=0 random=2 wrote positive callout cache address record for ok@otherhost31 +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying okok@otherhost31 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -615,7 +777,8 @@ callout cache: found domain record for otherhost31 callout cache: domain rejects random addresses callout cache: no address record found for okok@otherhost31 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate @@ -632,15 +795,25 @@ cmdlog: '220:EHLO:250-:MAIL|:RCPT:250:250:QUIT:250' wrote callout cache domain record for otherhost31: result=1 postmaster=0 random=2 wrote positive callout cache address record for okok@otherhost31 +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying okokok@otherhost31 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -649,7 +822,8 @@ Attempting full verification using callout callout cache: domain record expired for otherhost31 callout cache: no address record found for okokok@otherhost31 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate @@ -672,15 +846,27 @@ cmdlog: '220:EHLO:250-:MAIL|:RCPT:250:550:RSET:250:MAIL|:RCPT:250:250:QUIT:250' wrote callout cache domain record for otherhost31: result=1 postmaster=0 random=2 wrote positive callout cache address record for okokok@otherhost31 +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying okok@otherhost51 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -689,7 +875,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost51 callout cache: no address record found for okok@otherhost51 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate @@ -712,11 +899,18 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying okokok@otherhost52 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -725,7 +919,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost52 callout cache: no address record found for okokok@otherhost52 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate @@ -749,15 +944,29 @@ cmdlog: '220:EHLO:250-:MAIL|:RCPT:250:250:RSET:250:MAIL|:RCPT:250:250:QUIT:250' wrote callout cache domain record for otherhost52: result=1 postmaster=1 random=0 wrote positive callout cache address record for okokok@otherhost52 +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) verifying Reply-To: header address abcd@x.y.z >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying abcd@x.y.z @@ -767,7 +976,8 @@ Attempting full verification using callout callout cache: no domain record found for x.y.z callout cache: no address record found for abcd@x.y.z/ interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate @@ -784,17 +994,30 @@ cmdlog: '220:EHLO:250-:MAIL|:RCPT:250:250:QUIT:250' wrote callout cache domain record for x.y.z: result=1 postmaster=0 random=0 wrote positive callout cache address record for abcd@x.y.z/ +host in "V4NET.0.0.8"? no (end of list) LOG: MAIN <= ok7@otherhost53 H=(test) [V4NET.0.0.7] U=root P=smtp S=sss 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.7"? no (end of list) verifying Reply-To: header address abcd@x.y.z >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying abcd@x.y.z @@ -804,7 +1027,8 @@ Attempting full verification using callout callout cache: found domain record for x.y.z callout cache: no address record found for abcd@x.y.z interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate @@ -825,11 +1049,19 @@ 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying ok@otherhost9 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -838,7 +1070,8 @@ Attempting full verification using callout callout cache: no domain record found for otherhost9 callout cache: no address record found for ok@otherhost9 interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate @@ -864,15 +1097,26 @@ cmdlog: '220:EHLO:250-:MAIL|:RCPT:250:250:RSET:250:MAIL|:RCPT:250:550:RCPT:250:Q wrote callout cache domain record for otherhost9: result=1 postmaster=1 random=0 wrote positive callout cache address record for ok@otherhost9 +host in "V4NET.0.0.10"? no (end of list) +host in "V4NET.0.0.10"? no (end of list) 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 LOG: smtp_connection MAIN SMTP connection from root +test in helo_lookup_domains? no (end of list) +host in "V4NET.0.0.1"? no (end of list) +host in "V4NET.0.0.2"? no (end of list) +host in "V4NET.0.0.3"? no (end of list) +host in "V4NET.0.0.4"? no (end of list) +host in "V4NET.0.0.5"? no (end of list) +host in "V4NET.0.0.6"? no (end of list) +host in "V4NET.0.0.9"? no (end of list) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Verifying z@test.ex >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -881,7 +1125,8 @@ Attempting full verification using callout callout cache: no domain record found for test.ex callout cache: no address record found for z@test.ex/ interface=NULL port=PORT_S -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex SMTP<< 250-Yeah mate diff --git a/test/stderr/0584 b/test/stderr/0584 index 32ce9e762..a15f0f048 100644 --- a/test/stderr/0584 +++ b/test/stderr/0584 @@ -15,9 +15,9 @@ >>> check verify = sender=userx@test.ex >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@test.ex ->>> userx in "userx"? +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling goodroute router >>> routed by goodroute router >>> ----------- end verify ------------ @@ -44,9 +44,9 @@ LOG: 10HmaX-000000005vi-0000 <= userx@test.ex H=(test) [127.0.0.1] P=smtp S=sss >>> check verify = sender=fail@test.ex >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing fail@test.ex ->>> fail in "userx"? +>>> fail in local_parts? >>> list element: userx ->>> fail in "userx"? no (end of list) +>>> fail in local_parts? no (end of list) >>> no more routers >>> ----------- end verify ------------ >>> require: condition test failed in ACL "check_recipient" @@ -71,9 +71,9 @@ LOG: H=(test) [127.0.0.1] F= rejected RCPT : Sende >>> = sender=userx@test.ex/defer_ok >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@test.ex ->>> userx in "userx"? +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling goodroute router >>> routed by goodroute router >>> ----------- end verify ------------ diff --git a/test/stderr/0588 b/test/stderr/0588 index e1f5d4f29..0be237c7e 100644 --- a/test/stderr/0588 +++ b/test/stderr/0588 @@ -15,9 +15,12 @@ >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing should_log@delay1500.test.ex >>> calling all router ->>> delay1500.test.ex in "*"? ->>> list element: * ->>> delay1500.test.ex in "*"? yes (matched "*") +>>> check dnssec require list +>>> delay1500.test.ex in dnssec_require_domains? no (option unset) +>>> check dnssec request list +>>> delay1500.test.ex in dnssec_request_domains? +>>> list element: * +>>> delay1500.test.ex in dnssec_request_domains? yes (matched "*") LOG: Long A lookup for 'delay1500.test.ex': ssss msec >>> local host found for non-MX address >>> routed by all router @@ -41,9 +44,12 @@ LOG: Long A lookup for 'delay1500.test.ex': ssss msec >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing should_not_log@delay500.test.ex >>> calling all router ->>> delay500.test.ex in "*"? ->>> list element: * ->>> delay500.test.ex in "*"? yes (matched "*") +>>> check dnssec require list +>>> delay500.test.ex in dnssec_require_domains? no (option unset) +>>> check dnssec request list +>>> delay500.test.ex in dnssec_request_domains? +>>> list element: * +>>> delay500.test.ex in dnssec_request_domains? yes (matched "*") >>> local host found for non-MX address >>> routed by all router >>> ----------- end verify ------------ diff --git a/test/stderr/0609 b/test/stderr/0609 index 2ea697f69..6a801a299 100644 --- a/test/stderr/0609 +++ b/test/stderr/0609 @@ -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 @@ -19,6 +20,7 @@ p1235 LOG: smtp_connection MAIN p1235 SMTP connection from [127.0.0.1] (TCP/IP connection count = 1) p1235 Process p1235 is handling incoming connection from [127.0.0.1] p1235 Process p1235 is ready for new message +p1235 test in helo_lookup_domains? no (end of list) p1235 using ACL "delay4_accept" p1235 processing "accept" (TESTSUITE/test-config 24) p1235 check delay = 4s @@ -39,6 +41,7 @@ p1236 LOG: smtp_connection MAIN p1236 SMTP connection from [127.0.0.1] (TCP/IP connection count = 1) p1236 Process p1236 is handling incoming connection from [127.0.0.1] p1236 Process p1236 is ready for new message +p1236 test in helo_lookup_domains? no (end of list) p1236 using ACL "delay4_accept" p1236 processing "accept" (TESTSUITE/test-config 24) p1236 check delay = 4s diff --git a/test/stderr/0620 b/test/stderr/0620 index b0a0114fd..147ad3067 100644 --- a/test/stderr/0620 +++ b/test/stderr/0620 @@ -1,125 +1,149 @@ Exim version x.yz .... +Hints DB: environment after trimming: PATH= adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys configuration file is TESTSUITE/test-config admin user +try option gecos_pattern +try option gecos_name +try option unknown_login +try option smtp_active_hostname LOG: smtp_connection MAIN SMTP connection from CALLER - ╭considering: $smtp_active_hostname ESMTP Exim $version_number $tod_full +try option message_size_limit +try option acl_smtp_connect +try option smtp_banner + ╭considering: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full ├──────value: primaryhostname.ex - ├considering: ESMTP Exim $version_number $tod_full - ├───────text: ESMTP Exim - ├considering: $version_number $tod_full + ├considering: ░ESMTP░Exim░$version_number░$tod_full + ├───────text: ░ESMTP░Exim░ + ├considering: $version_number░$tod_full ├──────value: x.yz - ├considering: $tod_full - ├───────text: + ├considering: ░$tod_full + ├───────text: ░ ├considering: $tod_full - ├──────value: Tue, 2 Mar 1999 09:44:33 +0000 - ├──expanding: $smtp_active_hostname ESMTP Exim $version_number $tod_full - ╰─────result: primaryhostname.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 - ╭considering: domain $domain - ├───────text: domain + ├──────value: Tue,░2░Mar░1999░09:44:33░+0000 + ├───expanded: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full + ╰─────result: primaryhostname.ex░ESMTP░Exim░x.yz░Tue,░2░Mar░1999░09:44:33░+0000 +try option acl_smtp_helo +try option acl_smtp_mail +try option acl_smtp_rcpt + ╭considering: domain░$domain + ├───────text: domain░ ├considering: $domain ├──────value: trythiskey.ex ╰──(tainted) - ├──expanding: domain $domain - ╰─────result: domain trythiskey.ex + ├───expanded: domain░$domain + ╰─────result: domain░trythiskey.ex ╰──(tainted) LOG: MAIN domain trythiskey.ex created log directory TESTSUITE/spool/log - ╭considering: value $domain_data - ├───────text: value + ╭considering: value░░$domain_data + ├───────text: value░░ ├considering: $domain_data - ├──────value: has this data - ├──expanding: value $domain_data - ╰─────result: value has this data + ├──────value: has░this░data + ├───expanded: value░░$domain_data + ╰─────result: value░░has░this░data LOG: MAIN value has this data - ╭considering: \$0 '$0' \$1 '$1' + ╭considering: \$0░'$0'░░\$1░'$1' ├backslashed: '\$' - ├considering: 0 '$0' \$1 '$1' - ├───────text: 0 ' - ├considering: $0' \$1 '$1' + ├considering: 0░'$0'░░\$1░'$1' + ├───────text: 0░' + ├considering: $0'░░\$1░'$1' ├──────value: trythiskey.ex ╰──(tainted) - ├considering: ' \$1 '$1' - ├───────text: ' - ├considering: \$1 '$1' + ├considering: '░░\$1░'$1' + ├───────text: '░░ + ├considering: \$1░'$1' ├backslashed: '\$' - ├considering: 1 '$1' - ├───────text: 1 ' + ├considering: 1░'$1' + ├───────text: 1░' ├considering: $1' ├considering: ' ├───────text: ' - ├──expanding: \$0 '$0' \$1 '$1' - ╰─────result: $0 'trythiskey.ex' $1 '' + ├───expanded: \$0░'$0'░░\$1░'$1' + ╰─────result: $0░'trythiskey.ex'░░$1░'' ╰──(tainted) LOG: MAIN $0 'trythiskey.ex' $1 '' +try option acl_smtp_quit 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= adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys configuration file is TESTSUITE/test-config admin user +try option gecos_pattern +try option gecos_name +try option unknown_login +try option smtp_active_hostname LOG: smtp_connection MAIN SMTP connection from CALLER - ╭considering: $smtp_active_hostname ESMTP Exim $version_number $tod_full +try option message_size_limit +try option acl_smtp_connect +try option smtp_banner + ╭considering: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full ├──────value: primaryhostname.ex - ├considering: ESMTP Exim $version_number $tod_full - ├───────text: ESMTP Exim - ├considering: $version_number $tod_full + ├considering: ░ESMTP░Exim░$version_number░$tod_full + ├───────text: ░ESMTP░Exim░ + ├considering: $version_number░$tod_full ├──────value: x.yz - ├considering: $tod_full - ├───────text: + ├considering: ░$tod_full + ├───────text: ░ ├considering: $tod_full - ├──────value: Tue, 2 Mar 1999 09:44:33 +0000 - ├──expanding: $smtp_active_hostname ESMTP Exim $version_number $tod_full - ╰─────result: primaryhostname.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 - ╭considering: domain $domain - ├───────text: domain + ├──────value: Tue,░2░Mar░1999░09:44:33░+0000 + ├───expanded: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full + ╰─────result: primaryhostname.ex░ESMTP░Exim░x.yz░Tue,░2░Mar░1999░09:44:33░+0000 +try option acl_smtp_helo +try option acl_smtp_mail +try option acl_smtp_rcpt + ╭considering: domain░$domain + ├───────text: domain░ ├considering: $domain ├──────value: trythiskey.ex ╰──(tainted) - ├──expanding: domain $domain - ╰─────result: domain trythiskey.ex + ├───expanded: domain░$domain + ╰─────result: domain░trythiskey.ex ╰──(tainted) LOG: MAIN domain trythiskey.ex - ╭considering: value $domain_data - ├───────text: value + ╭considering: value░░$domain_data + ├───────text: value░░ ├considering: $domain_data ├──────value: trythiskey.ex - ├──expanding: value $domain_data - ╰─────result: value trythiskey.ex + ├───expanded: value░░$domain_data + ╰─────result: value░░trythiskey.ex LOG: MAIN value trythiskey.ex - ╭considering: \$0 '$0' \$1 '$1' + ╭considering: \$0░'$0'░░\$1░'$1' ├backslashed: '\$' - ├considering: 0 '$0' \$1 '$1' - ├───────text: 0 ' - ├considering: $0' \$1 '$1' + ├considering: 0░'$0'░░\$1░'$1' + ├───────text: 0░' + ├considering: $0'░░\$1░'$1' ├──────value: trythiskey.ex ╰──(tainted) - ├considering: ' \$1 '$1' - ├───────text: ' - ├considering: \$1 '$1' + ├considering: '░░\$1░'$1' + ├───────text: '░░ + ├considering: \$1░'$1' ├backslashed: '\$' - ├considering: 1 '$1' - ├───────text: 1 ' + ├considering: 1░'$1' + ├───────text: 1░' ├considering: $1' ├considering: ' ├───────text: ' - ├──expanding: \$0 '$0' \$1 '$1' - ╰─────result: $0 'trythiskey.ex' $1 '' + ├───expanded: \$0░'$0'░░\$1░'$1' + ╰─────result: $0░'trythiskey.ex'░░$1░'' ╰──(tainted) LOG: MAIN $0 'trythiskey.ex' $1 '' +try option acl_smtp_quit LOG: smtp_connection MAIN SMTP connection from CALLER D=qqs closed by QUIT >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0623 b/test/stderr/0623 index db3130155..3786f7168 100644 --- a/test/stderr/0623 +++ b/test/stderr/0623 @@ -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 @@ -17,7 +19,8 @@ getting address for 127.0.0.1 checking retry status of 127.0.0.1 127.0.0.1 [127.0.0.1]:1111 retry-status = usable delivering 10HmaZ-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (tempreject@test.ex) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes @@ -54,20 +57,23 @@ LOG: MAIN ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL SMTP<< 221 Closing connection SMTP(close)>> -cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:300:.:QUIT:451:221' -added retry item for T:127.0.0.1:127.0.0.1:PORT_D:10HmaZ-000000005vi-0000: errno=-46 more_errno=dd,A flags=6 +cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:300:.:QUIT+:451:221' +added retry item for T:[127.0.0.1]:127.0.0.1:PORT_D:10HmaZ-000000005vi-0000: errno=-46 more_errno=dd,A flags=6 all IP addresses skipped or deferred at least one address Leaving send_to_server transport +>>>>>>>>>>>>>>>> Exim pid=p1236 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN == tempreject@test.ex R=client T=send_to_server defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 451 Service not available >>>>>>>>>>>>>>>> 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 @@ -83,7 +89,8 @@ no host retry record no message retry record 127.0.0.1 [127.0.0.1]:1111 retry-status = usable delivering 10HmbA-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (permreject@test.ex) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes @@ -118,22 +125,25 @@ cmd buf flush ddd bytes (more expected) ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL SMTP<< 221 Closing connection SMTP(close)>> -cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:300:.:QUIT:550:221' +cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:300:.:QUIT+:550:221' Leaving send_to_server transport +>>>>>>>>>>>>>>>> Exim pid=p1239 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN ** permreject@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 550 content rejected LOG: MAIN permreject@test.ex: error ignored LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1237 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> 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@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 @@ -149,7 +159,8 @@ no host retry record no message retry record 127.0.0.1 [127.0.0.1]:1111 retry-status = usable delivering 10HmbB-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (permreject@test.ex) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... +connected SMTP<< 220 Server ready SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes @@ -186,11 +197,12 @@ LOG: MAIN ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL SMTP(closed)<< SMTP(close)>> -cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:300:.:QUIT' -added retry item for T:127.0.0.1:127.0.0.1:PORT_D:10HmbB-000000005vi-0000: errno=-18 more_errno=dd,A flags=6 +cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:300:.:QUIT+' +added retry item for T:[127.0.0.1]:127.0.0.1:PORT_D:10HmbB-000000005vi-0000: errno=-18 more_errno=dd,A flags=6 all IP addresses skipped or deferred at least one address Leaving send_to_server transport +>>>>>>>>>>>>>>>> Exim pid=p1242 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN == permreject@test.ex R=client T=send_to_server defer (-18) H=127.0.0.1 [127.0.0.1]: Remote host closed connection in response to end of data ->>>>>>>>>>>>>>>> Exim pid=p1239 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1238 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1241 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1240 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0628 b/test/stderr/0628 index f112b1cc7..e033ceae2 100644 --- a/test/stderr/0628 +++ b/test/stderr/0628 @@ -3,8 +3,8 @@ 01:01:01 p1237 accept: condition test succeeded in ACL "chk_data" 01:01:01 p1237 end of ACL "chk_data": ACCEPT 01:01:01 p1237 ╭considering: ${tod_full} -01:01:01 p1237 ├──expanding: ${tod_full} -01:01:01 p1237 ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 +01:01:01 p1237 ├───expanded: ${tod_full} +01:01:01 p1237 ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 01:01:01 p1237 Writing spool header file: TESTSUITE/spool//input//hdr.10HmaX-000000005vi-0000 01:01:01 p1237 DSN: **** SPOOL_OUT - address: errorsto: orcpt: dsn_flags: 0x0 01:01:01 p1237 Renaming spool header file: TESTSUITE/spool//input//10HmaX-000000005vi-0000-H @@ -20,10 +20,12 @@ 01:01:01 p1237 Process p1237 is ready for new message 01:01:01 p1237 smtp_setup_msg entered 01:01:01 p1237 SMTP<< QUIT +01:01:01 p1237 try option acl_smtp_quit 01:01:01 p1237 SMTP>> 221 myhost.test.ex closing connection 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 @@ -51,8 +53,6 @@ 01:01:01 p1239 DSN: set orcpt: flags: 0x0 01:01:01 p1239 Delivery address list: 01:01:01 p1239 dest@test.ex -01:01:01 p1239 locking TESTSUITE/spool/db/retry.lockfile -01:01:01 p1239 locked TESTSUITE/spool/db/retry.lockfile 01:01:01 p1239 EXIM_DBOPEN: file dir flags=O_RDONLY 01:01:01 p1239 returned from EXIM_DBOPEN: (nil) 01:01:01 p1239 failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -67,7 +67,10 @@ 01:01:01 p1239 routing dest@test.ex 01:01:01 p1239 --------> r1 router <-------- 01:01:01 p1239 local_part=dest domain=test.ex +01:01:01 p1239 try option router_home_directory +01:01:01 p1239 try option set 01:01:01 p1239 calling r1 router +01:01:01 p1239 try option qualify_domain 01:01:01 p1239 rda_interpret (string): ':blackhole:' 01:01:01 p1239 expanded: ':blackhole:' 01:01:01 p1239 file is not a filter file @@ -116,8 +119,8 @@ 01:01:01 p1240 accept: condition test succeeded in ACL "chk_data" 01:01:01 p1240 end of ACL "chk_data": ACCEPT 01:01:01 p1240 ╭considering: ${tod_full} -01:01:01 p1240 ├──expanding: ${tod_full} -01:01:01 p1240 ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 +01:01:01 p1240 ├───expanded: ${tod_full} +01:01:01 p1240 ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 01:01:01 p1240 Writing spool header file: TESTSUITE/spool//input//hdr.10HmaY-000000005vi-0000 01:01:01 p1240 DSN: **** SPOOL_OUT - address: errorsto: orcpt: dsn_flags: 0x0 01:01:01 p1240 Renaming spool header file: TESTSUITE/spool//input//10HmaY-000000005vi-0000-H @@ -134,6 +137,7 @@ 01:01:01 p1240 Process p1240 is ready for new message 01:01:01 p1240 smtp_setup_msg entered 01:01:01 p1240 SMTP<< QUIT +01:01:01 p1240 try option acl_smtp_quit 01:01:01 p1240 SMTP>> 221 myhost.test.ex closing connection 01:01:01 p1240 LOG: smtp_connection MAIN 01:01:01 p1240 SMTP connection from (test.ex) [127.0.0.1] D=qqs closed by QUIT @@ -153,8 +157,6 @@ 01:01:01 p1241 DSN: set orcpt: flags: 0x0 01:01:01 p1241 Delivery address list: 01:01:01 p1241 dest2@test.ex -01:01:01 p1241 locking TESTSUITE/spool/db/retry.lockfile -01:01:01 p1241 locked TESTSUITE/spool/db/retry.lockfile 01:01:01 p1241 EXIM_DBOPEN: file dir flags=O_RDONLY 01:01:01 p1241 returned from EXIM_DBOPEN: (nil) 01:01:01 p1241 failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -169,7 +171,10 @@ 01:01:01 p1241 routing dest2@test.ex 01:01:01 p1241 --------> r1 router <-------- 01:01:01 p1241 local_part=dest2 domain=test.ex +01:01:01 p1241 try option router_home_directory +01:01:01 p1241 try option set 01:01:01 p1241 calling r1 router +01:01:01 p1241 try option qualify_domain 01:01:01 p1241 rda_interpret (string): ':blackhole:' 01:01:01 p1241 expanded: ':blackhole:' 01:01:01 p1241 file is not a filter file diff --git a/test/stderr/0630 b/test/stderr/0630 index 3ecc9dcbd..eccfd268e 100644 --- a/test/stderr/0630 +++ b/test/stderr/0630 @@ -1,4 +1,3 @@ -01:01:01 p1235 no domain retry record 01:01:01 p1235 no address retry record 01:01:01 p1235 dest3@test.ex: queued for routing 01:01:01 p1235 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -11,15 +10,15 @@ 01:01:01 p1235 ├considering: $local_part 01:01:01 p1235 ├──────value: dest3 01:01:01 p1235 ╰──(tainted) -01:01:01 p1235 ├──expanding: /$local_part +01:01:01 p1235 ├───expanded: /$local_part 01:01:01 p1235 ╰─────result: /dest3 01:01:01 p1235 ╰──(tainted) -01:01:01 p1235 dest3 in "/dest3"? +01:01:01 p1235 dest3 in local_parts? 01:01:01 p1235 list element: /dest3 01:01:01 p1235 LOG: MAIN PANIC 01:01:01 p1235 Tainted filename '/dest3' 01:01:01 p1235 LOG: MAIN PANIC DIE -01:01:01 p1235 failed to open /dest3 when checking "/$local_part": Permission denied (euid=uuuu egid=EXIM_GID) +01:01:01 p1235 failed to open /dest3 when checking local_parts: Permission denied (euid=uuuu egid=EXIM_GID) 01:01:01 p1235 search_tidyup called 01:01:01 p1235 >>>>>>>>>>>>>>>> Exim pid=p1235 (daemon-accept-delivery) terminating with rc=1 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0632 b/test/stderr/0632 index 66928e2e8..d7fac294a 100644 --- a/test/stderr/0632 +++ b/test/stderr/0632 @@ -1,20 +1,25 @@ ******** SERVER ******** Exim version x.yz .... +Hints DB: environment after trimming: PATH= adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys configuration file is TESTSUITE/test-config admin user dropping to exim gid; retaining priv uid +try option gecos_pattern +try option gecos_name +try option unknown_login daemon_smtp_port overridden by -oX: <: 1225 creating notifier socket +try option notifier_socket ╭considering: $spool_directory/exim_daemon_notify ├──────value: TESTSUITE/spool ├considering: /exim_daemon_notify ├───────text: /exim_daemon_notify - ├──expanding: $spool_directory/exim_daemon_notify + ├───expanded: $spool_directory/exim_daemon_notify ╰─────result: TESTSUITE/spool/exim_daemon_notify TESTSUITE/spool/exim_daemon_notify listening on all interfaces (IPv6) port PORT_D @@ -25,460 +30,475 @@ LOG: MAIN daemon running with uid=EXIM_UID gid=EXIM_GID euid=EXIM_UID egid=EXIM_GID Listening... Connection request from 127.0.0.1 port sssss +try option smtp_accept_max_per_host search_tidyup called +p1235 try option smtp_active_hostname p1235 Process p1235 is handling incoming connection from [127.0.0.1] -p1235 ╭considering: $smtp_active_hostname ESMTP Exim $version_number $tod_full +p1235 try option message_size_limit +p1235 try option acl_smtp_connect +p1235 try option smtp_banner +p1235 ╭considering: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full p1235 ├──────value: myhost.test.ex -p1235 ├considering: ESMTP Exim $version_number $tod_full -p1235 ├───────text: ESMTP Exim -p1235 ├considering: $version_number $tod_full +p1235 ├considering: ░ESMTP░Exim░$version_number░$tod_full +p1235 ├───────text: ░ESMTP░Exim░ +p1235 ├considering: $version_number░$tod_full p1235 ├──────value: x.yz -p1235 ├considering: $tod_full -p1235 ├───────text: +p1235 ├considering: ░$tod_full +p1235 ├───────text: ░ p1235 ├considering: $tod_full -p1235 ├──────value: Tue, 2 Mar 1999 09:44:33 +0000 -p1235 ├──expanding: $smtp_active_hostname ESMTP Exim $version_number $tod_full -p1235 ╰─────result: myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 +p1235 ├──────value: Tue,░2░Mar░1999░09:44:33░+0000 +p1235 ├───expanded: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full +p1235 ╰─────result: myhost.test.ex░ESMTP░Exim░x.yz░Tue,░2░Mar░1999░09:44:33░+0000 p1235 Process p1235 is ready for new message +p1235 test.ex in helo_lookup_domains? no (end of list) +p1235 try option acl_smtp_helo +p1235 try option acl_smtp_mail +p1235 try option acl_smtp_rcpt p1235 compiled caseless RE '^nomatch_list' not found in local cache p1235 compiled RE '^nomatch_list' saved in local cache p1235 sending RE '^nomatch_list' to daemon +p1235 try option notifier_socket p1235 ╭considering: $spool_directory/exim_daemon_notify p1235 ├──────value: TESTSUITE/spool p1235 ├considering: /exim_daemon_notify p1235 ├───────text: /exim_daemon_notify -p1235 ├──expanding: $spool_directory/exim_daemon_notify +p1235 ├───expanded: $spool_directory/exim_daemon_notify p1235 ╰─────result: TESTSUITE/spool/exim_daemon_notify -p1235 ╭considering: ${if match {a_random_string} {static_RE}} -p1235 ╭considering: a_random_string} {static_RE}} +p1235 test.ex in "^nomatch_list"? no (end of list) +p1235 ╭considering: ${if░match░{a_random_string}░{static_RE}} +p1235 ╭considering: a_random_string}░{static_RE}} p1235 ├───────text: a_random_string -p1235 ├considering: } {static_RE}} -p1235 ├──expanding: a_random_string +p1235 ├considering: }░{static_RE}} +p1235 ├───expanded: a_random_string p1235 ╰─────result: a_random_string p1235 ╭considering: static_RE}} p1235 ├───────text: static_RE p1235 ├considering: }} -p1235 ├──expanding: static_RE +p1235 ├───expanded: static_RE p1235 ╰─────result: static_RE p1235 compiled RE 'static_RE' not found in local cache p1235 compiling RE 'static_RE' p1235 compiled RE 'static_RE' saved in local cache p1235 sending RE 'static_RE' to daemon +p1235 try option notifier_socket p1235 ╭considering: $spool_directory/exim_daemon_notify p1235 ├──────value: TESTSUITE/spool p1235 ├considering: /exim_daemon_notify p1235 ├───────text: /exim_daemon_notify -p1235 ├──expanding: $spool_directory/exim_daemon_notify +p1235 ├───expanded: $spool_directory/exim_daemon_notify p1235 ╰─────result: TESTSUITE/spool/exim_daemon_notify -p1235 ├──condition: match {a_random_string} {static_RE} +p1235 ├──condition: match░{a_random_string}░{static_RE} p1235 ├─────result: false -p1235 ├──expanding: ${if match {a_random_string} {static_RE}} +p1235 ├───expanded: ${if░match░{a_random_string}░{static_RE}} p1235 ╰─────result: -p1235 ╭considering: ${if match {a_random_string} {tricky_static_RE\$}} -p1235 ╭considering: a_random_string} {tricky_static_RE\$}} +p1235 ╭considering: ${if░match░{a_random_string}░{tricky_static_RE\$}} +p1235 ╭considering: a_random_string}░{tricky_static_RE\$}} p1235 ├───────text: a_random_string -p1235 ├considering: } {tricky_static_RE\$}} -p1235 ├──expanding: a_random_string +p1235 ├considering: }░{tricky_static_RE\$}} +p1235 ├───expanded: a_random_string p1235 ╰─────result: a_random_string p1235 ╭considering: tricky_static_RE\$}} p1235 ├───────text: tricky_static_RE p1235 ├considering: \$}} p1235 ├backslashed: '\$' p1235 ├considering: }} -p1235 ├──expanding: tricky_static_RE\$ +p1235 ├───expanded: tricky_static_RE\$ p1235 ╰─────result: tricky_static_RE$ p1235 compiled RE 'tricky_static_RE$' not found in local cache p1235 compiling RE 'tricky_static_RE$' p1235 compiled RE 'tricky_static_RE$' saved in local cache p1235 sending RE 'tricky_static_RE$' to daemon +p1235 try option notifier_socket p1235 ╭considering: $spool_directory/exim_daemon_notify p1235 ├──────value: TESTSUITE/spool p1235 ├considering: /exim_daemon_notify p1235 ├───────text: /exim_daemon_notify -p1235 ├──expanding: $spool_directory/exim_daemon_notify +p1235 ├───expanded: $spool_directory/exim_daemon_notify p1235 ╰─────result: TESTSUITE/spool/exim_daemon_notify -p1235 ├──condition: match {a_random_string} {tricky_static_RE\$} +p1235 ├──condition: match░{a_random_string}░{tricky_static_RE\$} p1235 ├─────result: false -p1235 ├──expanding: ${if match {a_random_string} {tricky_static_RE\$}} +p1235 ├───expanded: ${if░match░{a_random_string}░{tricky_static_RE\$}} p1235 ╰─────result: -p1235 ╭considering: ${if match {a_random_string} {pid=${pid} uncacheable_RE}} -p1235 ╭considering: a_random_string} {pid=${pid} uncacheable_RE}} +p1235 ╭considering: ${if░match░{a_random_string}░{pid=${pid}░uncacheable_RE}} +p1235 ╭considering: a_random_string}░{pid=${pid}░uncacheable_RE}} p1235 ├───────text: a_random_string -p1235 ├considering: } {pid=${pid} uncacheable_RE}} -p1235 ├──expanding: a_random_string +p1235 ├considering: }░{pid=${pid}░uncacheable_RE}} +p1235 ├───expanded: a_random_string p1235 ╰─────result: a_random_string -p1235 ╭considering: pid=${pid} uncacheable_RE}} +p1235 ╭considering: pid=${pid}░uncacheable_RE}} p1235 ├───────text: pid= -p1235 ├considering: ${pid} uncacheable_RE}} -p1235 ├considering: uncacheable_RE}} -p1235 ├───────text: uncacheable_RE +p1235 ├considering: ${pid}░uncacheable_RE}} +p1235 ├considering: ░uncacheable_RE}} +p1235 ├───────text: ░uncacheable_RE p1235 ├considering: }} -p1235 ├──expanding: pid=${pid} uncacheable_RE -p1235 ╰─────result: pid=p1235 uncacheable_RE +p1235 ├───expanded: pid=${pid}░uncacheable_RE +p1235 ╰─────result: pid=p1235░uncacheable_RE p1235 compiling RE 'pid=p1235 uncacheable_RE' -p1235 ├──condition: match {a_random_string} {pid=${pid} uncacheable_RE} +p1235 ├──condition: match░{a_random_string}░{pid=${pid}░uncacheable_RE} p1235 ├─────result: false -p1235 ├──expanding: ${if match {a_random_string} {pid=${pid} uncacheable_RE}} +p1235 ├───expanded: ${if░match░{a_random_string}░{pid=${pid}░uncacheable_RE}} p1235 ╰─────result: +p1235 try option acl_smtp_predata p1235 search_tidyup called p1235 search_tidyup called p1235 ╭considering: ${tod_full} -p1235 ├──expanding: ${tod_full} -p1235 ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 -p1235 ╭considering: Received: ${if def:sender_rcvhost {from $sender_rcvhost -p1235 }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1235 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├───────text: Received: -p1235 ├considering: ${if def:sender_rcvhost {from $sender_rcvhost -p1235 }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1235 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} +p1235 ├───expanded: ${tod_full} +p1235 ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 +p1235 try option received_header_text +p1235 ╭considering: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ +p1235 ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1235 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───────text: Received:░ +p1235 ├considering: ${if░def:sender_rcvhost░{from░$sender_rcvhost↩ +p1235 ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1235 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} p1235 ├──condition: def:sender_rcvhost p1235 ├─────result: true -p1235 ╭considering: from $sender_rcvhost -p1235 }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1235 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├───────text: from -p1235 ├considering: $sender_rcvhost -p1235 }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1235 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├──────value: [127.0.0.1] (helo=test.ex) +p1235 ╭considering: from░$sender_rcvhost↩ +p1235 ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1235 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───────text: from░ +p1235 ├considering: $sender_rcvhost↩ +p1235 ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1235 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├──────value: [127.0.0.1]░(helo=test.ex) p1235 ╰──(tainted) -p1235 ├considering: -p1235 }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1235 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├───────text: -p1235 -p1235 ├considering: }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1235 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├──expanding: from $sender_rcvhost -p1235 -p1235 ╰─────result: from [127.0.0.1] (helo=test.ex) -p1235 +p1235 ├considering: ↩ +p1235 ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1235 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───────text: ↩ +p1235 ␉ +p1235 ├considering: }{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1235 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───expanded: from░$sender_rcvhost↩ +p1235 ␉ +p1235 ╰─────result: from░[127.0.0.1]░(helo=test.ex)↩ +p1235 ␉ p1235 ╰──(tainted) -p1235 ╭───scanning: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1235 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} +p1235 ╭───scanning: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1235 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} p1235 ├──condition: def:sender_ident p1235 ├─────result: false -p1235 ╭───scanning: from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1235 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├───────text: from -p1235 ├───scanning: ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1235 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ╎╭───scanning: $sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1235 ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 ╎ }}(Exim $version_number) -p1235 ╎ ${if def:sender_address {(envelope-from <$sender_address>) -p1235 ╎ }}id $message_exim_id${if def:received_for { -p1235 ╎ for $received_for}} +p1235 ╭───scanning: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1235 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───────text: from░ +p1235 ├───scanning: ${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1235 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ╎╭───scanning: $sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1235 ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ╎␉}}(Exim░$version_number)↩ +p1235 ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ╎␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ╎␉for░$received_for}} p1235 ╎├──────value: -p1235 ╎├───scanning: } }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1235 ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 ╎ }}(Exim $version_number) -p1235 ╎ ${if def:sender_address {(envelope-from <$sender_address>) -p1235 ╎ }}id $message_exim_id${if def:received_for { -p1235 ╎ for $received_for}} -p1235 ╎├──expanding: $sender_ident -p1235 ╎├─────result: +p1235 ╎├───scanning: }░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1235 ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ╎␉}}(Exim░$version_number)↩ +p1235 ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ╎␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ╎␉for░$received_for}} +p1235 ╎├───expanded: $sender_ident +p1235 ╎├─────result: ◀skipped▶ p1235 ╎╰───skipping: result is not used -p1235 ├───scanning: }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1235 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├───────text: -p1235 ├───scanning: }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1235 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├──expanding: from ${quote_local_part:$sender_ident} -p1235 ├─────result: from +p1235 ├───scanning: ░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1235 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───────text: ░ +p1235 ├───scanning: }}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1235 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───expanded: from░${quote_local_part:$sender_ident}░ +p1235 ├─────result: ◀skipped▶ p1235 ╰───skipping: result is not used p1235 ├───item-res: -p1235 ├───scanning: ${if def:sender_helo_name {(helo=$sender_helo_name) -p1235 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} +p1235 ├───scanning: ${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1235 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} p1235 ├──condition: def:sender_helo_name p1235 ├─────result: false -p1235 ╭───scanning: (helo=$sender_helo_name) -p1235 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} +p1235 ╭───scanning: (helo=$sender_helo_name)↩ +p1235 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} p1235 ├───────text: (helo= -p1235 ├───scanning: $sender_helo_name) -p1235 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} +p1235 ├───scanning: $sender_helo_name)↩ +p1235 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} p1235 ├──────value: -p1235 ├───scanning: ) -p1235 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├───────text: ) -p1235 -p1235 ├───scanning: }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├──expanding: (helo=$sender_helo_name) -p1235 -p1235 ├─────result: (helo=) -p1235 +p1235 ├───scanning: )↩ +p1235 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───────text: )↩ +p1235 ␉ +p1235 ├───scanning: }}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───expanded: (helo=$sender_helo_name)↩ +p1235 ␉ +p1235 ├─────result: ◀skipped▶ p1235 ╰───skipping: result is not used p1235 ├───item-res: -p1235 ├───scanning: }}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├──expanding: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1235 }} -p1235 ├─────result: +p1235 ├───scanning: }}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───expanded: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1235 ␉}} +p1235 ├─────result: ◀skipped▶ p1235 ╰───skipping: result is not used -p1235 ├───item-res: from [127.0.0.1] (helo=test.ex) -p1235 +p1235 ├───item-res: from░[127.0.0.1]░(helo=test.ex)↩ +p1235 ␉ p1235 ╰──(tainted) -p1235 ├considering: by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├───────text: by -p1235 ├considering: $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} +p1235 ├considering: by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───────text: by░ +p1235 ├considering: $primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} p1235 ├──────value: myhost.test.ex -p1235 ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├───────text: -p1235 ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} +p1235 ├considering: ░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───────text: ░ +p1235 ├considering: ${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} p1235 ├──condition: def:received_protocol p1235 ├─────result: true -p1235 ╭considering: with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├───────text: with -p1235 ├considering: $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} +p1235 ╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───────text: with░ +p1235 ├considering: $received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} p1235 ├──────value: smtp -p1235 ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├───────text: -p1235 ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├──expanding: with $received_protocol -p1235 ╰─────result: with smtp -p1235 ├───item-res: with smtp +p1235 ├considering: ░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───────text: ░ +p1235 ├considering: }}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───expanded: with░$received_protocol░ +p1235 ╰─────result: with░smtp░ +p1235 ├───item-res: with░smtp░ p1235 ╰──(tainted) -p1235 ├considering: ${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├──expanding: ($tls_in_ver) -p1235 ├─────result: () +p1235 ├considering: ${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───expanded: ░($tls_in_ver) +p1235 ├─────result: ◀skipped▶ p1235 ╰───skipping: result is not used p1235 ├───item-res: p1235 ╰──(tainted) -p1235 ├considering: ${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} +p1235 ├considering: ${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} p1235 ├──condition: def:tls_in_cipher_std p1235 ├─────result: false -p1235 ╭───scanning: tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├───────text: tls -p1235 ├───scanning: $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} +p1235 ╭───scanning: ░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───────text: ░tls░ +p1235 ├───scanning: $tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} p1235 ├──────value: -p1235 ├───scanning: -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├───────text: -p1235 -p1235 ├───scanning: }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├──expanding: tls $tls_in_cipher_std -p1235 -p1235 ├─────result: tls -p1235 +p1235 ├───scanning: ↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───────text: ↩ +p1235 ␉ +p1235 ├───scanning: }}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───expanded: ░tls░$tls_in_cipher_std↩ +p1235 ␉ +p1235 ├─────result: ◀skipped▶ p1235 ╰───skipping: result is not used p1235 ├───item-res: p1235 ╰──(tainted) -p1235 ├considering: (Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├───────text: (Exim -p1235 ├considering: $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} +p1235 ├considering: (Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───────text: (Exim░ +p1235 ├considering: $version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} p1235 ├──────value: x.yz -p1235 ├considering: ) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├───────text: ) -p1235 -p1235 ├considering: ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} +p1235 ├considering: )↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───────text: )↩ +p1235 ␉ +p1235 ├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} p1235 ├──condition: def:sender_address p1235 ├─────result: true -p1235 ╭considering: (envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├───────text: (envelope-from < -p1235 ├considering: $sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} +p1235 ╭considering: (envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───────text: (envelope-from░< +p1235 ├considering: $sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} p1235 ├──────value: CALLER@test.ex p1235 ╰──(tainted) -p1235 ├considering: >) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├───────text: >) -p1235 -p1235 ├considering: }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├──expanding: (envelope-from <$sender_address>) -p1235 -p1235 ╰─────result: (envelope-from ) -p1235 +p1235 ├considering: >)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───────text: >)↩ +p1235 ␉ +p1235 ├considering: }}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───expanded: (envelope-from░<$sender_address>)↩ +p1235 ␉ +p1235 ╰─────result: (envelope-from░)↩ +p1235 ␉ p1235 ╰──(tainted) -p1235 ├───item-res: (envelope-from ) -p1235 +p1235 ├───item-res: (envelope-from░)↩ +p1235 ␉ p1235 ╰──(tainted) -p1235 ├considering: id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ├───────text: id -p1235 ├considering: $message_exim_id${if def:received_for { -p1235 for $received_for}} +p1235 ├considering: id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ├───────text: id░ +p1235 ├considering: $message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} p1235 ├──────value: 10HmaX-000000005vi-0000 -p1235 ├considering: ${if def:received_for { -p1235 for $received_for}} +p1235 ├considering: ${if░def:received_for░{↩ +p1235 ␉for░$received_for}} p1235 ├──condition: def:received_for p1235 ├─────result: true -p1235 ╭considering: -p1235 for $received_for}} -p1235 ├───────text: -p1235 for +p1235 ╭considering: ↩ +p1235 ␉for░$received_for}} +p1235 ├───────text: ↩ +p1235 ␉for░ p1235 ├considering: $received_for}} p1235 ├──────value: dest_1@test.ex p1235 ╰──(tainted) p1235 ├considering: }} -p1235 ├──expanding: -p1235 for $received_for -p1235 ╰─────result: -p1235 for dest_1@test.ex +p1235 ├───expanded: ↩ +p1235 ␉for░$received_for +p1235 ╰─────result: ↩ +p1235 ␉for░dest_1@test.ex p1235 ╰──(tainted) -p1235 ├───item-res: -p1235 for dest_1@test.ex +p1235 ├───item-res: ↩ +p1235 ␉for░dest_1@test.ex p1235 ╰──(tainted) -p1235 ├──expanding: Received: ${if def:sender_rcvhost {from $sender_rcvhost -p1235 }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1235 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1235 }}(Exim $version_number) -p1235 ${if def:sender_address {(envelope-from <$sender_address>) -p1235 }}id $message_exim_id${if def:received_for { -p1235 for $received_for}} -p1235 ╰─────result: Received: from [127.0.0.1] (helo=test.ex) -p1235 by myhost.test.ex with smtp (Exim x.yz) -p1235 (envelope-from ) -p1235 id 10HmaX-000000005vi-0000 -p1235 for dest_1@test.ex +p1235 ├───expanded: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ +p1235 ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1235 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1235 ␉}}(Exim░$version_number)↩ +p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1235 ␉for░$received_for}} +p1235 ╰─────result: Received:░from░[127.0.0.1]░(helo=test.ex)↩ +p1235 ␉by░myhost.test.ex░with░smtp░(Exim░x.yz)↩ +p1235 ␉(envelope-from░)↩ +p1235 ␉id░10HmaX-000000005vi-0000↩ +p1235 ␉for░dest_1@test.ex p1235 ╰──(tainted) +p1235 try option acl_smtp_data p1235 ╭considering: ${tod_full} -p1235 ├──expanding: ${tod_full} -p1235 ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 +p1235 ├───expanded: ${tod_full} +p1235 ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 LOG: MAIN <= CALLER@test.ex H=(test.ex) [127.0.0.1] Ci=p1235 P=smtp S=sss search_tidyup called Process p1235 is ready for new message +try option acl_smtp_quit LOG: smtp_connection MAIN SMTP connection Ci=p1235 from (test.ex) [127.0.0.1] D=qqs closed by QUIT p1234 1 SMTP accept process running @@ -505,434 +525,446 @@ p1234 normal exit, 0 p1234 0 SMTP accept processes now running p1234 Listening... p1234 Connection request from 127.0.0.1 port sssss +p1234 try option smtp_accept_max_per_host p1234 search_tidyup called +p1236 try option smtp_active_hostname p1236 Process p1236 is handling incoming connection from [127.0.0.1] -p1236 ╭considering: $smtp_active_hostname ESMTP Exim $version_number $tod_full +p1236 try option message_size_limit +p1236 try option acl_smtp_connect +p1236 try option smtp_banner +p1236 ╭considering: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full p1236 ├──────value: myhost.test.ex -p1236 ├considering: ESMTP Exim $version_number $tod_full -p1236 ├───────text: ESMTP Exim -p1236 ├considering: $version_number $tod_full +p1236 ├considering: ░ESMTP░Exim░$version_number░$tod_full +p1236 ├───────text: ░ESMTP░Exim░ +p1236 ├considering: $version_number░$tod_full p1236 ├──────value: x.yz -p1236 ├considering: $tod_full -p1236 ├───────text: +p1236 ├considering: ░$tod_full +p1236 ├───────text: ░ p1236 ├considering: $tod_full -p1236 ├──────value: Tue, 2 Mar 1999 09:44:33 +0000 -p1236 ├──expanding: $smtp_active_hostname ESMTP Exim $version_number $tod_full -p1236 ╰─────result: myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 +p1236 ├──────value: Tue,░2░Mar░1999░09:44:33░+0000 +p1236 ├───expanded: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full +p1236 ╰─────result: myhost.test.ex░ESMTP░Exim░x.yz░Tue,░2░Mar░1999░09:44:33░+0000 p1236 Process p1236 is ready for new message +p1236 test.ex in helo_lookup_domains? no (end of list) +p1236 try option acl_smtp_helo +p1236 try option acl_smtp_mail +p1236 try option acl_smtp_rcpt p1236 compiled caseless RE '^nomatch_list' found in local cache -p1236 ╭considering: ${if match {a_random_string} {static_RE}} -p1236 ╭considering: a_random_string} {static_RE}} +p1236 test.ex in "^nomatch_list"? no (end of list) +p1236 ╭considering: ${if░match░{a_random_string}░{static_RE}} +p1236 ╭considering: a_random_string}░{static_RE}} p1236 ├───────text: a_random_string -p1236 ├considering: } {static_RE}} -p1236 ├──expanding: a_random_string +p1236 ├considering: }░{static_RE}} +p1236 ├───expanded: a_random_string p1236 ╰─────result: a_random_string p1236 ╭considering: static_RE}} p1236 ├───────text: static_RE p1236 ├considering: }} -p1236 ├──expanding: static_RE +p1236 ├───expanded: static_RE p1236 ╰─────result: static_RE p1236 compiled RE 'static_RE' found in local cache -p1236 ├──condition: match {a_random_string} {static_RE} +p1236 ├──condition: match░{a_random_string}░{static_RE} p1236 ├─────result: false -p1236 ├──expanding: ${if match {a_random_string} {static_RE}} +p1236 ├───expanded: ${if░match░{a_random_string}░{static_RE}} p1236 ╰─────result: -p1236 ╭considering: ${if match {a_random_string} {tricky_static_RE\$}} -p1236 ╭considering: a_random_string} {tricky_static_RE\$}} +p1236 ╭considering: ${if░match░{a_random_string}░{tricky_static_RE\$}} +p1236 ╭considering: a_random_string}░{tricky_static_RE\$}} p1236 ├───────text: a_random_string -p1236 ├considering: } {tricky_static_RE\$}} -p1236 ├──expanding: a_random_string +p1236 ├considering: }░{tricky_static_RE\$}} +p1236 ├───expanded: a_random_string p1236 ╰─────result: a_random_string p1236 ╭considering: tricky_static_RE\$}} p1236 ├───────text: tricky_static_RE p1236 ├considering: \$}} p1236 ├backslashed: '\$' p1236 ├considering: }} -p1236 ├──expanding: tricky_static_RE\$ +p1236 ├───expanded: tricky_static_RE\$ p1236 ╰─────result: tricky_static_RE$ p1236 compiled RE 'tricky_static_RE$' found in local cache -p1236 ├──condition: match {a_random_string} {tricky_static_RE\$} +p1236 ├──condition: match░{a_random_string}░{tricky_static_RE\$} p1236 ├─────result: false -p1236 ├──expanding: ${if match {a_random_string} {tricky_static_RE\$}} +p1236 ├───expanded: ${if░match░{a_random_string}░{tricky_static_RE\$}} p1236 ╰─────result: -p1236 ╭considering: ${if match {a_random_string} {pid=${pid} uncacheable_RE}} -p1236 ╭considering: a_random_string} {pid=${pid} uncacheable_RE}} +p1236 ╭considering: ${if░match░{a_random_string}░{pid=${pid}░uncacheable_RE}} +p1236 ╭considering: a_random_string}░{pid=${pid}░uncacheable_RE}} p1236 ├───────text: a_random_string -p1236 ├considering: } {pid=${pid} uncacheable_RE}} -p1236 ├──expanding: a_random_string +p1236 ├considering: }░{pid=${pid}░uncacheable_RE}} +p1236 ├───expanded: a_random_string p1236 ╰─────result: a_random_string -p1236 ╭considering: pid=${pid} uncacheable_RE}} +p1236 ╭considering: pid=${pid}░uncacheable_RE}} p1236 ├───────text: pid= -p1236 ├considering: ${pid} uncacheable_RE}} -p1236 ├considering: uncacheable_RE}} -p1236 ├───────text: uncacheable_RE +p1236 ├considering: ${pid}░uncacheable_RE}} +p1236 ├considering: ░uncacheable_RE}} +p1236 ├───────text: ░uncacheable_RE p1236 ├considering: }} -p1236 ├──expanding: pid=${pid} uncacheable_RE -p1236 ╰─────result: pid=p1236 uncacheable_RE +p1236 ├───expanded: pid=${pid}░uncacheable_RE +p1236 ╰─────result: pid=p1236░uncacheable_RE p1236 compiling RE 'pid=p1236 uncacheable_RE' -p1236 ├──condition: match {a_random_string} {pid=${pid} uncacheable_RE} +p1236 ├──condition: match░{a_random_string}░{pid=${pid}░uncacheable_RE} p1236 ├─────result: false -p1236 ├──expanding: ${if match {a_random_string} {pid=${pid} uncacheable_RE}} +p1236 ├───expanded: ${if░match░{a_random_string}░{pid=${pid}░uncacheable_RE}} p1236 ╰─────result: +p1236 try option acl_smtp_predata p1236 search_tidyup called p1236 search_tidyup called p1236 ╭considering: ${tod_full} -p1236 ├──expanding: ${tod_full} -p1236 ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 -p1236 ╭considering: Received: ${if def:sender_rcvhost {from $sender_rcvhost -p1236 }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1236 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├───────text: Received: -p1236 ├considering: ${if def:sender_rcvhost {from $sender_rcvhost -p1236 }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1236 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} +p1236 ├───expanded: ${tod_full} +p1236 ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 +p1236 try option received_header_text +p1236 ╭considering: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ +p1236 ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1236 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───────text: Received:░ +p1236 ├considering: ${if░def:sender_rcvhost░{from░$sender_rcvhost↩ +p1236 ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1236 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} p1236 ├──condition: def:sender_rcvhost p1236 ├─────result: true -p1236 ╭considering: from $sender_rcvhost -p1236 }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1236 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├───────text: from -p1236 ├considering: $sender_rcvhost -p1236 }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1236 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├──────value: [127.0.0.1] (helo=test.ex) +p1236 ╭considering: from░$sender_rcvhost↩ +p1236 ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1236 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───────text: from░ +p1236 ├considering: $sender_rcvhost↩ +p1236 ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1236 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├──────value: [127.0.0.1]░(helo=test.ex) p1236 ╰──(tainted) -p1236 ├considering: -p1236 }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1236 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├───────text: -p1236 -p1236 ├considering: }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1236 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├──expanding: from $sender_rcvhost -p1236 -p1236 ╰─────result: from [127.0.0.1] (helo=test.ex) -p1236 +p1236 ├considering: ↩ +p1236 ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1236 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───────text: ↩ +p1236 ␉ +p1236 ├considering: }{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1236 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───expanded: from░$sender_rcvhost↩ +p1236 ␉ +p1236 ╰─────result: from░[127.0.0.1]░(helo=test.ex)↩ +p1236 ␉ p1236 ╰──(tainted) -p1236 ╭───scanning: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1236 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} +p1236 ╭───scanning: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1236 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} p1236 ├──condition: def:sender_ident p1236 ├─────result: false -p1236 ╭───scanning: from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1236 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├───────text: from -p1236 ├───scanning: ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1236 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ╎╭───scanning: $sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1236 ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 ╎ }}(Exim $version_number) -p1236 ╎ ${if def:sender_address {(envelope-from <$sender_address>) -p1236 ╎ }}id $message_exim_id${if def:received_for { -p1236 ╎ for $received_for}} +p1236 ╭───scanning: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1236 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───────text: from░ +p1236 ├───scanning: ${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1236 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ╎╭───scanning: $sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1236 ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ╎␉}}(Exim░$version_number)↩ +p1236 ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ╎␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ╎␉for░$received_for}} p1236 ╎├──────value: -p1236 ╎├───scanning: } }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1236 ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 ╎ }}(Exim $version_number) -p1236 ╎ ${if def:sender_address {(envelope-from <$sender_address>) -p1236 ╎ }}id $message_exim_id${if def:received_for { -p1236 ╎ for $received_for}} -p1236 ╎├──expanding: $sender_ident -p1236 ╎├─────result: +p1236 ╎├───scanning: }░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1236 ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ╎␉}}(Exim░$version_number)↩ +p1236 ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ╎␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ╎␉for░$received_for}} +p1236 ╎├───expanded: $sender_ident +p1236 ╎├─────result: ◀skipped▶ p1236 ╎╰───skipping: result is not used -p1236 ├───scanning: }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1236 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├───────text: -p1236 ├───scanning: }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1236 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├──expanding: from ${quote_local_part:$sender_ident} -p1236 ├─────result: from +p1236 ├───scanning: ░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1236 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───────text: ░ +p1236 ├───scanning: }}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1236 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───expanded: from░${quote_local_part:$sender_ident}░ +p1236 ├─────result: ◀skipped▶ p1236 ╰───skipping: result is not used p1236 ├───item-res: -p1236 ├───scanning: ${if def:sender_helo_name {(helo=$sender_helo_name) -p1236 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} +p1236 ├───scanning: ${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1236 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} p1236 ├──condition: def:sender_helo_name p1236 ├─────result: false -p1236 ╭───scanning: (helo=$sender_helo_name) -p1236 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} +p1236 ╭───scanning: (helo=$sender_helo_name)↩ +p1236 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} p1236 ├───────text: (helo= -p1236 ├───scanning: $sender_helo_name) -p1236 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} +p1236 ├───scanning: $sender_helo_name)↩ +p1236 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} p1236 ├──────value: -p1236 ├───scanning: ) -p1236 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├───────text: ) -p1236 -p1236 ├───scanning: }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├──expanding: (helo=$sender_helo_name) -p1236 -p1236 ├─────result: (helo=) -p1236 +p1236 ├───scanning: )↩ +p1236 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───────text: )↩ +p1236 ␉ +p1236 ├───scanning: }}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───expanded: (helo=$sender_helo_name)↩ +p1236 ␉ +p1236 ├─────result: ◀skipped▶ p1236 ╰───skipping: result is not used p1236 ├───item-res: -p1236 ├───scanning: }}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├──expanding: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1236 }} -p1236 ├─────result: +p1236 ├───scanning: }}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───expanded: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1236 ␉}} +p1236 ├─────result: ◀skipped▶ p1236 ╰───skipping: result is not used -p1236 ├───item-res: from [127.0.0.1] (helo=test.ex) -p1236 +p1236 ├───item-res: from░[127.0.0.1]░(helo=test.ex)↩ +p1236 ␉ p1236 ╰──(tainted) -p1236 ├considering: by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├───────text: by -p1236 ├considering: $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} +p1236 ├considering: by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───────text: by░ +p1236 ├considering: $primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} p1236 ├──────value: myhost.test.ex -p1236 ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├───────text: -p1236 ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} +p1236 ├considering: ░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───────text: ░ +p1236 ├considering: ${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} p1236 ├──condition: def:received_protocol p1236 ├─────result: true -p1236 ╭considering: with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├───────text: with -p1236 ├considering: $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} +p1236 ╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───────text: with░ +p1236 ├considering: $received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} p1236 ├──────value: smtp -p1236 ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├───────text: -p1236 ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├──expanding: with $received_protocol -p1236 ╰─────result: with smtp -p1236 ├───item-res: with smtp +p1236 ├considering: ░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───────text: ░ +p1236 ├considering: }}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───expanded: with░$received_protocol░ +p1236 ╰─────result: with░smtp░ +p1236 ├───item-res: with░smtp░ p1236 ╰──(tainted) -p1236 ├considering: ${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├──expanding: ($tls_in_ver) -p1236 ├─────result: () +p1236 ├considering: ${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───expanded: ░($tls_in_ver) +p1236 ├─────result: ◀skipped▶ p1236 ╰───skipping: result is not used p1236 ├───item-res: p1236 ╰──(tainted) -p1236 ├considering: ${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} +p1236 ├considering: ${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} p1236 ├──condition: def:tls_in_cipher_std p1236 ├─────result: false -p1236 ╭───scanning: tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├───────text: tls -p1236 ├───scanning: $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} +p1236 ╭───scanning: ░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───────text: ░tls░ +p1236 ├───scanning: $tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} p1236 ├──────value: -p1236 ├───scanning: -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├───────text: -p1236 -p1236 ├───scanning: }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├──expanding: tls $tls_in_cipher_std -p1236 -p1236 ├─────result: tls -p1236 +p1236 ├───scanning: ↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───────text: ↩ +p1236 ␉ +p1236 ├───scanning: }}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───expanded: ░tls░$tls_in_cipher_std↩ +p1236 ␉ +p1236 ├─────result: ◀skipped▶ p1236 ╰───skipping: result is not used p1236 ├───item-res: p1236 ╰──(tainted) -p1236 ├considering: (Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├───────text: (Exim -p1236 ├considering: $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} +p1236 ├considering: (Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───────text: (Exim░ +p1236 ├considering: $version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} p1236 ├──────value: x.yz -p1236 ├considering: ) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├───────text: ) -p1236 -p1236 ├considering: ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} +p1236 ├considering: )↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───────text: )↩ +p1236 ␉ +p1236 ├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} p1236 ├──condition: def:sender_address p1236 ├─────result: true -p1236 ╭considering: (envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├───────text: (envelope-from < -p1236 ├considering: $sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} +p1236 ╭considering: (envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───────text: (envelope-from░< +p1236 ├considering: $sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} p1236 ├──────value: CALLER@test.ex p1236 ╰──(tainted) -p1236 ├considering: >) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├───────text: >) -p1236 -p1236 ├considering: }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├──expanding: (envelope-from <$sender_address>) -p1236 -p1236 ╰─────result: (envelope-from ) -p1236 +p1236 ├considering: >)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───────text: >)↩ +p1236 ␉ +p1236 ├considering: }}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───expanded: (envelope-from░<$sender_address>)↩ +p1236 ␉ +p1236 ╰─────result: (envelope-from░)↩ +p1236 ␉ p1236 ╰──(tainted) -p1236 ├───item-res: (envelope-from ) -p1236 +p1236 ├───item-res: (envelope-from░)↩ +p1236 ␉ p1236 ╰──(tainted) -p1236 ├considering: id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ├───────text: id -p1236 ├considering: $message_exim_id${if def:received_for { -p1236 for $received_for}} +p1236 ├considering: id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ├───────text: id░ +p1236 ├considering: $message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} p1236 ├──────value: 10HmaY-000000005vi-0000 -p1236 ├considering: ${if def:received_for { -p1236 for $received_for}} +p1236 ├considering: ${if░def:received_for░{↩ +p1236 ␉for░$received_for}} p1236 ├──condition: def:received_for p1236 ├─────result: true -p1236 ╭considering: -p1236 for $received_for}} -p1236 ├───────text: -p1236 for +p1236 ╭considering: ↩ +p1236 ␉for░$received_for}} +p1236 ├───────text: ↩ +p1236 ␉for░ p1236 ├considering: $received_for}} p1236 ├──────value: dest_2@test.ex p1236 ╰──(tainted) p1236 ├considering: }} -p1236 ├──expanding: -p1236 for $received_for -p1236 ╰─────result: -p1236 for dest_2@test.ex +p1236 ├───expanded: ↩ +p1236 ␉for░$received_for +p1236 ╰─────result: ↩ +p1236 ␉for░dest_2@test.ex p1236 ╰──(tainted) -p1236 ├───item-res: -p1236 for dest_2@test.ex +p1236 ├───item-res: ↩ +p1236 ␉for░dest_2@test.ex p1236 ╰──(tainted) -p1236 ├──expanding: Received: ${if def:sender_rcvhost {from $sender_rcvhost -p1236 }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) -p1236 }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std -p1236 }}(Exim $version_number) -p1236 ${if def:sender_address {(envelope-from <$sender_address>) -p1236 }}id $message_exim_id${if def:received_for { -p1236 for $received_for}} -p1236 ╰─────result: Received: from [127.0.0.1] (helo=test.ex) -p1236 by myhost.test.ex with smtp (Exim x.yz) -p1236 (envelope-from ) -p1236 id 10HmaY-000000005vi-0000 -p1236 for dest_2@test.ex +p1236 ├───expanded: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ +p1236 ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ +p1236 ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ +p1236 ␉}}(Exim░$version_number)↩ +p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ +p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩ +p1236 ␉for░$received_for}} +p1236 ╰─────result: Received:░from░[127.0.0.1]░(helo=test.ex)↩ +p1236 ␉by░myhost.test.ex░with░smtp░(Exim░x.yz)↩ +p1236 ␉(envelope-from░)↩ +p1236 ␉id░10HmaY-000000005vi-0000↩ +p1236 ␉for░dest_2@test.ex p1236 ╰──(tainted) +p1236 try option acl_smtp_data p1236 ╭considering: ${tod_full} -p1236 ├──expanding: ${tod_full} -p1236 ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 +p1236 ├───expanded: ${tod_full} +p1236 ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 LOG: MAIN <= CALLER@test.ex H=(test.ex) [127.0.0.1] Ci=p1236 P=smtp S=sss search_tidyup called Process p1236 is ready for new message +try option acl_smtp_quit LOG: smtp_connection MAIN SMTP connection Ci=p1236 from (test.ex) [127.0.0.1] D=qqs closed by QUIT p1234 1 SMTP accept process running diff --git a/test/stderr/0633 b/test/stderr/0633 index 21a7f21cc..74415ceca 100644 --- a/test/stderr/0633 +++ b/test/stderr/0633 @@ -10,11 +10,11 @@ >>> list element: @ >>> list element: @[] >>> test in helo_lookup_domains? no (end of list) ->>> processing "accept" (TESTSUITE/test-config 21) +>>> processing "accept" (TESTSUITE/test-config 23) >>> accept: condition test succeeded in inline ACL >>> end of inline ACL: ACCEPT >>> using ACL "check_data" ->>> processing "accept" (TESTSUITE/test-config 15) +>>> processing "accept" (TESTSUITE/test-config 17) >>> check set acl_m0 = ${sg{${sg{${sg{aaa}{a}{bbbbbbbbbbb}}}{b}{cccccccccccc}}}{c}{ddddddddddddddddddd}} >>> = dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd **** debug string too long - truncated **** @@ -36,4 +36,2860 @@ LOG: 10HmaX-000000005vi-0000 ddddddddddddddddddddddddddddddddddddddddddddddddddd LOG: 10HmaX-000000005vi-0000 ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeaaa >>> accept: condition test succeeded in ACL "check_data" >>> end of ACL "check_data": ACCEPT -LOG: 10HmaX-000000005vi-0000 <= <> H=(test) [V4NET.0.0.0] P=smtp S=sss +LOG: 10HmaX-000000005vi-0000 <= <> H=(test) [V4NET.0.0.0] P=smtp S=sss for some@body +>>> host in hosts_connection_nolog? no (option unset) +>>> host in host_lookup? no (option unset) +>>> host in host_reject_connection? no (option unset) +>>> host in sender_unqualified_hosts? no (option unset) +>>> host in recipient_unqualified_hosts? no (option unset) +>>> host in helo_verify_hosts? no (option unset) +>>> host in helo_try_verify_hosts? no (option unset) +>>> host in helo_accept_junk_hosts? no (option unset) +>>> test in helo_lookup_domains? +>>> list element: @ +>>> list element: @[] +>>> test in helo_lookup_domains? no (end of list) +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> processing "accept" (TESTSUITE/test-config 23) +>>> accept: condition test succeeded in inline ACL +>>> end of inline ACL: ACCEPT +>>> using ACL "check_data" +>>> processing "accept" (TESTSUITE/test-config 17) +>>> check set acl_m0 = ${sg{${sg{${sg{aaa}{a}{bbbbbbbbbbb}}}{b}{cccccccccccc}}}{c}{ddddddddddddddddddd}} +>>> = dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd +**** debug string too long - truncated **** +>>> check logwrite = ${acl_m0}eeeeeeeeeeeeeee +>>> = dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd +**** debug string too long - truncated **** +LOG: 10HmaY-000000005vi-0000 ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeee +>>> check logwrite = ${acl_m0}eeeeeeeeeeeeeeea +>>> = dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd +**** debug string too long - truncated **** +LOG: 10HmaY-000000005vi-0000 ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeea +>>> check logwrite = ${acl_m0}eeeeeeeeeeeeeeeaa +>>> = dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd +**** debug string too long - truncated **** +LOG: 10HmaY-000000005vi-0000 ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeaa +>>> check logwrite = ${acl_m0}eeeeeeeeeeeeeeeaaa +>>> = dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd +**** debug string too long - truncated **** +LOG: 10HmaY-000000005vi-0000 ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeaaa +>>> accept: condition test succeeded in ACL "check_data" +>>> end of ACL "check_data": ACCEPT +LOG: 10HmaY-000000005vi-0000 <= <> H=(test) [V4NET.0.0.0] P=smtp S=sss for some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body some@body som diff --git a/test/stderr/0634 b/test/stderr/0634 index 5e4fbe08e..bb6334468 100644 --- a/test/stderr/0634 +++ b/test/stderr/0634 @@ -10,6 +10,8 @@ >>> list element: @ >>> list element: @[] >>> test1 in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -35,6 +37,8 @@ >>> list element: @ >>> list element: @[] >>> test2 in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -60,6 +64,8 @@ >>> list element: @ >>> list element: @[] >>> test3 in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * diff --git a/test/stderr/0699 b/test/stderr/0699 deleted file mode 100644 index f61a861c9..000000000 --- a/test/stderr/0699 +++ /dev/null @@ -1,10 +0,0 @@ -### Check that delivery of old-format spoolfiles works -### Check that the format-mangler utility can downgrade spoolfiles -### Check that the format-mangler utility can upgrade spoolfiles -### done - -******** SERVER ******** -### Check that delivery of old-format spoolfiles works -### Check that the format-mangler utility can downgrade spoolfiles -### Check that the format-mangler utility can upgrade spoolfiles -### done diff --git a/test/stderr/0907 b/test/stderr/0907 deleted file mode 100644 index fe9ba7150..000000000 --- a/test/stderr/0907 +++ /dev/null @@ -1,2 +0,0 @@ -1999-03-02 09:44:33 Exim configuration error in line 1 of TESTSUITE/test-config: - found unexpected BOM (Byte Order Mark) diff --git a/test/stderr/0908 b/test/stderr/0908 deleted file mode 100644 index ad35a1ae6..000000000 --- a/test/stderr/0908 +++ /dev/null @@ -1,2 +0,0 @@ -1999-03-02 09:44:33 Exim configuration error in line 1 of TESTSUITE/confs/0907: - found unexpected BOM (Byte Order Mark) diff --git a/test/stderr/0909 b/test/stderr/0909 new file mode 100644 index 000000000..3ba13b3b0 --- /dev/null +++ b/test/stderr/0909 @@ -0,0 +1,360 @@ +Exim version x.yz .... +Hints DB: +configuration file is TESTSUITE/test-config +trusted user +admin user +LOG: smtp_connection MAIN + SMTP connection from root +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 +dropping to exim gid; retaining priv uid +>>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>> +--------> good@test.ex <-------- +send_to_server transport entered + good@test.ex +using the transport's hosts: 127.0.0.1 +getting address for 127.0.0.1 +checking retry status of 127.0.0.1 +127.0.0.1 [127.0.0.1]:1111 retry-status = usable +delivering 10HmaX-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (good@test.ex) +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... +connected + SMTP<< 220 Server ready + SMTP>> EHLO myhost.test.ex +cmd buf flush ddd bytes + SMTP<< 250-hi there + 250-PIPELINING + 250-CHUNKING + 250 OK +using PIPELINING +CHUNKING usable +not using DSN + SMTP|> MAIL FROM:<> + SMTP|> RCPT TO: + will write message using CHUNKING +transport_check_waiting entered + sequence=1 local_max=500 global_max=-1 + no messages waiting for 127.0.0.1 +transport_check_waiting: FALSE +will pipeline QUIT + SMTP+> BDAT 329 LAST +cmd buf flush ddd bytes (more expected) +cannot use sendfile for body: spoolfile not wireformat +writing data block fd=dddd size=sss timeout=300 (more expected) + SMTP+> QUIT +cmd buf flush ddd bytes (more expected) + SMTP(shutdown)>> +sync_responses expect mail + SMTP<< 250 OK mail +sync_responses expect rcpt for good@test.ex + SMTP<< 250 OK rcpt + SMTP<< 250 OK chunked message data +ok=1 send_quit=0 send_rset=0 continue_more=0 yield=0 first_address is NULL + SMTP<< 221 Closing connection + SMTP(close)>> +cmdlog: '220:EHLO:250-:MAIL|:RCPT|:BDAT+:QUIT+:250:250:250:221' +Leaving send_to_server transport +>>>>>>>>>>>>>>>> Exim pid=p1236 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +LOG: MAIN + => good@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L K C="250 OK chunked message data" +LOG: MAIN + Completed +>>>>>>>>>>>>>>>> Exim pid=p1235 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +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 +LOG: smtp_connection MAIN + SMTP connection from root +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 +dropping to exim gid; retaining priv uid +>>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>> +--------> nopipe@test.ex <-------- +send_to_server transport entered + nopipe@test.ex +using the transport's hosts: 127.0.0.1 +getting address for 127.0.0.1 +checking retry status of 127.0.0.1 +127.0.0.1 [127.0.0.1]:1111 retry-status = usable +delivering 10HmaY-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (nopipe@test.ex) +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... +connected + SMTP<< 220 Server ready + SMTP>> EHLO myhost.test.ex +cmd buf flush ddd bytes + SMTP<< 250-hi there + 250-CHUNKING + 250 OK +not using PIPELINING +CHUNKING usable +not using DSN + SMTP>> MAIL FROM:<> +cmd buf flush ddd bytes + SMTP<< 250 OK mail + SMTP>> RCPT TO: +cmd buf flush ddd bytes +sync_responses expect rcpt for nopipe@test.ex + SMTP<< 250 OK rcpt + will write message using CHUNKING + SMTP+> BDAT 331 LAST +cmd buf flush ddd bytes (more expected) +cannot use sendfile for body: spoolfile not wireformat +writing data block fd=dddd size=sss timeout=300 + SMTP<< 250 OK chunked message data +ok=1 send_quit=1 send_rset=0 continue_more=0 yield=0 first_address is NULL +transport_check_waiting entered + sequence=1 local_max=500 global_max=-1 + no messages waiting for 127.0.0.1 +transport_check_waiting: FALSE + SMTP+> QUIT +cmd buf flush ddd bytes (more expected) + SMTP(shutdown)>> + SMTP<< 221 Closing connection + SMTP(close)>> +cmdlog: '220:EHLO:250-:MAIL:250:RCPT:250:BDAT+:250:QUIT+:221' +Leaving send_to_server transport +>>>>>>>>>>>>>>>> Exim pid=p1239 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +LOG: MAIN + => nopipe@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] K C="250 OK chunked message data" +LOG: MAIN + Completed +>>>>>>>>>>>>>>>> Exim pid=p1238 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +LOG: smtp_connection MAIN + SMTP connection from root D=q.qqqs 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 +LOG: smtp_connection MAIN + SMTP connection from root +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 +dropping to exim gid; retaining priv uid +>>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>> +--------> tempreject@test.ex <-------- +send_to_server transport entered + tempreject@test.ex +using the transport's hosts: 127.0.0.1 +getting address for 127.0.0.1 +checking retry status of 127.0.0.1 +127.0.0.1 [127.0.0.1]:1111 retry-status = usable +delivering 10HmaZ-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (tempreject@test.ex) +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... +connected + SMTP<< 220 Server ready + SMTP>> EHLO myhost.test.ex +cmd buf flush ddd bytes + SMTP<< 250-hi there + 250-PIPELINING + 250-CHUNKING + 250 OK +using PIPELINING +CHUNKING usable +not using DSN + SMTP|> MAIL FROM:<> + SMTP|> RCPT TO: + will write message using CHUNKING +transport_check_waiting entered + sequence=1 local_max=500 global_max=-1 + no messages waiting for 127.0.0.1 +transport_check_waiting: FALSE +will pipeline QUIT + SMTP+> BDAT 335 LAST +cmd buf flush ddd bytes (more expected) +cannot use sendfile for body: spoolfile not wireformat +writing data block fd=dddd size=sss timeout=300 (more expected) + SMTP+> QUIT +cmd buf flush ddd bytes (more expected) + SMTP(shutdown)>> +sync_responses expect mail + SMTP<< 250 OK mail +sync_responses expect rcpt for tempreject@test.ex + SMTP<< 250 OK rcpt + SMTP<< 451 Service not available +LOG: MAIN + H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 451 Service not available +ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL + SMTP<< 221 Closing connection + SMTP(close)>> +cmdlog: '220:EHLO:250-:MAIL|:RCPT|:BDAT+:QUIT+:250:250:451:221' +added retry item for T:[127.0.0.1]:127.0.0.1:PORT_D:10HmaZ-000000005vi-0000: errno=-46 more_errno=dd,A flags=6 +all IP addresses skipped or deferred at least one address +Leaving send_to_server transport +>>>>>>>>>>>>>>>> Exim pid=p1242 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +LOG: MAIN + == tempreject@test.ex R=client T=send_to_server defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 451 Service not available +>>>>>>>>>>>>>>>> Exim pid=p1241 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +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 +LOG: smtp_connection MAIN + SMTP connection from root +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 +dropping to exim gid; retaining priv uid +>>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>> +--------> permreject@test.ex <-------- +send_to_server transport entered + permreject@test.ex +using the transport's hosts: 127.0.0.1 +getting address for 127.0.0.1 +checking retry status of 127.0.0.1 +no host retry record +no message retry record +127.0.0.1 [127.0.0.1]:1111 retry-status = usable +delivering 10HmbA-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (permreject@test.ex) +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... +connected + SMTP<< 220 Server ready + SMTP>> EHLO myhost.test.ex +cmd buf flush ddd bytes + SMTP<< 250-hi there + 250-PIPELINING + 250-CHUNKING + 250 OK +using PIPELINING +CHUNKING usable +not using DSN + SMTP|> MAIL FROM:<> + SMTP|> RCPT TO: + will write message using CHUNKING +transport_check_waiting entered + sequence=1 local_max=500 global_max=-1 + no messages waiting for 127.0.0.1 +transport_check_waiting: FALSE +will pipeline QUIT + SMTP+> BDAT 335 LAST +cmd buf flush ddd bytes (more expected) +cannot use sendfile for body: spoolfile not wireformat +writing data block fd=dddd size=sss timeout=300 (more expected) + SMTP+> QUIT +cmd buf flush ddd bytes (more expected) + SMTP(shutdown)>> +sync_responses expect mail + SMTP<< 250 OK mail +sync_responses expect rcpt for permreject@test.ex + SMTP<< 250 OK rcpt + SMTP<< 550 content rejected +ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL + SMTP<< 221 Closing connection + SMTP(close)>> +cmdlog: '220:EHLO:250-:MAIL|:RCPT|:BDAT+:QUIT+:250:250:550:221' +Leaving send_to_server transport +>>>>>>>>>>>>>>>> Exim pid=p1245 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +LOG: MAIN + ** permreject@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 end of data: 550 content rejected +LOG: MAIN + permreject@test.ex: error ignored +LOG: MAIN + Completed +>>>>>>>>>>>>>>>> Exim pid=p1244 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +LOG: smtp_connection MAIN + SMTP connection from root D=q.qqqs 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 +LOG: smtp_connection MAIN + SMTP connection from root +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 +dropping to exim gid; retaining priv uid +>>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>> +--------> dataloss@test.ex <-------- +send_to_server transport entered + dataloss@test.ex +using the transport's hosts: 127.0.0.1 +getting address for 127.0.0.1 +checking retry status of 127.0.0.1 +no host retry record +no message retry record +127.0.0.1 [127.0.0.1]:1111 retry-status = usable +delivering 10HmbB-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (dataloss@test.ex) +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... +connected + SMTP<< 220 Server ready + SMTP>> EHLO myhost.test.ex +cmd buf flush ddd bytes + SMTP<< 250-hi there + 250-PIPELINING + 250-CHUNKING + 250 OK +using PIPELINING +CHUNKING usable +not using DSN + SMTP|> MAIL FROM:<> + SMTP|> RCPT TO: + will write message using CHUNKING +transport_check_waiting entered + sequence=1 local_max=500 global_max=-1 + no messages waiting for 127.0.0.1 +transport_check_waiting: FALSE +will pipeline QUIT + SMTP+> BDAT 333 LAST +cmd buf flush ddd bytes (more expected) +cannot use sendfile for body: spoolfile not wireformat +writing data block fd=dddd size=sss timeout=300 (more expected) + SMTP+> QUIT +cmd buf flush ddd bytes (more expected) + SMTP(shutdown)>> +sync_responses expect mail + SMTP<< 250 OK mail +sync_responses expect rcpt for dataloss@test.ex + SMTP<< 250 OK rcpt + SMTP(closed)<< +LOG: MAIN + H=127.0.0.1 [127.0.0.1]: Remote host closed connection in response to pipelined end of data +ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL + SMTP(closed)<< + SMTP(close)>> +cmdlog: '220:EHLO:250-:MAIL|:RCPT|:BDAT+:QUIT+:250:250' +added retry item for T:[127.0.0.1]:127.0.0.1:PORT_D:10HmbB-000000005vi-0000: errno=-18 more_errno=dd,A flags=6 +all IP addresses skipped or deferred at least one address +Leaving send_to_server transport +>>>>>>>>>>>>>>>> Exim pid=p1248 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +LOG: MAIN + == dataloss@test.ex R=client T=send_to_server defer (-18) H=127.0.0.1 [127.0.0.1]: Remote host closed connection in response to pipelined end of data +>>>>>>>>>>>>>>>> Exim pid=p1247 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +LOG: smtp_connection MAIN + SMTP connection from root D=q.qqqs closed by QUIT +>>>>>>>>>>>>>>>> Exim pid=p1246 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0911 b/test/stderr/0911 deleted file mode 100644 index e80deaa6b..000000000 --- a/test/stderr/0911 +++ /dev/null @@ -1,340 +0,0 @@ -Exim version x.yz .... -configuration file is TESTSUITE/test-config -trusted user -admin user -LOG: smtp_connection MAIN - SMTP connection from root -created log directory TESTSUITE/spool/log -LOG: MAIN - <= fred@myhost.test.ex U=root P=local-smtp S=sss -Exim version x.yz .... -configuration file is TESTSUITE/test-config -trusted user -admin user -dropping to exim gid; retaining priv uid ->>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>> ---------> good@test.ex <-------- -send_to_server transport entered - good@test.ex -using the transport's hosts: 127.0.0.1 -getting address for 127.0.0.1 -checking retry status of 127.0.0.1 -127.0.0.1 [127.0.0.1]:1111 retry-status = usable -delivering 10HmaX-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (good@test.ex) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected - SMTP<< 220 Server ready - SMTP>> EHLO myhost.test.ex -cmd buf flush ddd bytes - SMTP<< 250-hi there - 250-PIPELINING - 250-CHUNKING - 250 OK -using PIPELINING -CHUNKING usable -not using DSN - SMTP|> MAIL FROM:<> - SMTP|> RCPT TO: - will write message using CHUNKING -transport_check_waiting entered - sequence=1 local_max=500 global_max=-1 - no messages waiting for 127.0.0.1 -transport_check_waiting: FALSE -will pipeline QUIT - SMTP+> BDAT 329 LAST -cmd buf flush ddd bytes (more expected) -cannot use sendfile for body: spoolfile not wireformat -writing data block fd=dddd size=sss timeout=300 (more expected) - SMTP+> QUIT -cmd buf flush ddd bytes (more expected) - SMTP(shutdown)>> -sync_responses expect mail - SMTP<< 250 OK mail -sync_responses expect rcpt for good@test.ex - SMTP<< 250 OK rcpt - SMTP<< 250 OK chunked message data -ok=1 send_quit=0 send_rset=0 continue_more=0 yield=0 first_address is NULL - SMTP<< 221 Closing connection - SMTP(close)>> -cmdlog: '220:EHLO:250-:MAIL|:RCPT|:BDAT:QUIT:250:250:250:221' -Leaving send_to_server transport -LOG: MAIN - => good@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L K C="250 OK chunked message data" -LOG: MAIN - Completed ->>>>>>>>>>>>>>>> Exim pid=p1235 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> -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 .... -configuration file is TESTSUITE/test-config -trusted user -admin user -LOG: smtp_connection MAIN - SMTP connection from root -LOG: MAIN - <= fred@myhost.test.ex U=root P=local-smtp S=sss -Exim version x.yz .... -configuration file is TESTSUITE/test-config -trusted user -admin user -dropping to exim gid; retaining priv uid ->>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>> ---------> nopipe@test.ex <-------- -send_to_server transport entered - nopipe@test.ex -using the transport's hosts: 127.0.0.1 -getting address for 127.0.0.1 -checking retry status of 127.0.0.1 -127.0.0.1 [127.0.0.1]:1111 retry-status = usable -delivering 10HmaY-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (nopipe@test.ex) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected - SMTP<< 220 Server ready - SMTP>> EHLO myhost.test.ex -cmd buf flush ddd bytes - SMTP<< 250-hi there - 250-CHUNKING - 250 OK -not using PIPELINING -CHUNKING usable -not using DSN - SMTP>> MAIL FROM:<> -cmd buf flush ddd bytes - SMTP<< 250 OK mail - SMTP>> RCPT TO: -cmd buf flush ddd bytes -sync_responses expect rcpt for nopipe@test.ex - SMTP<< 250 OK rcpt - will write message using CHUNKING - SMTP+> BDAT 331 LAST -cmd buf flush ddd bytes (more expected) -cannot use sendfile for body: spoolfile not wireformat -writing data block fd=dddd size=sss timeout=300 - SMTP<< 250 OK chunked message data -ok=1 send_quit=1 send_rset=0 continue_more=0 yield=0 first_address is NULL -transport_check_waiting entered - sequence=1 local_max=500 global_max=-1 - no messages waiting for 127.0.0.1 -transport_check_waiting: FALSE - SMTP+> QUIT -cmd buf flush ddd bytes (more expected) - SMTP(shutdown)>> - SMTP<< 221 Closing connection - SMTP(close)>> -cmdlog: '220:EHLO:250-:MAIL:250:RCPT:250:BDAT:250:QUIT:221' -Leaving send_to_server transport -LOG: MAIN - => nopipe@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] K C="250 OK chunked message data" -LOG: MAIN - Completed ->>>>>>>>>>>>>>>> Exim pid=p1237 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> -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 .... -configuration file is TESTSUITE/test-config -trusted user -admin user -LOG: smtp_connection MAIN - SMTP connection from root -LOG: MAIN - <= fred@myhost.test.ex U=root P=local-smtp S=sss -Exim version x.yz .... -configuration file is TESTSUITE/test-config -trusted user -admin user -dropping to exim gid; retaining priv uid ->>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>> ---------> tempreject@test.ex <-------- -send_to_server transport entered - tempreject@test.ex -using the transport's hosts: 127.0.0.1 -getting address for 127.0.0.1 -checking retry status of 127.0.0.1 -127.0.0.1 [127.0.0.1]:1111 retry-status = usable -delivering 10HmaZ-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (tempreject@test.ex) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected - SMTP<< 220 Server ready - SMTP>> EHLO myhost.test.ex -cmd buf flush ddd bytes - SMTP<< 250-hi there - 250-PIPELINING - 250-CHUNKING - 250 OK -using PIPELINING -CHUNKING usable -not using DSN - SMTP|> MAIL FROM:<> - SMTP|> RCPT TO: - will write message using CHUNKING -transport_check_waiting entered - sequence=1 local_max=500 global_max=-1 - no messages waiting for 127.0.0.1 -transport_check_waiting: FALSE -will pipeline QUIT - SMTP+> BDAT 335 LAST -cmd buf flush ddd bytes (more expected) -cannot use sendfile for body: spoolfile not wireformat -writing data block fd=dddd size=sss timeout=300 (more expected) - SMTP+> QUIT -cmd buf flush ddd bytes (more expected) - SMTP(shutdown)>> -sync_responses expect mail - SMTP<< 250 OK mail -sync_responses expect rcpt for tempreject@test.ex - SMTP<< 250 OK rcpt - SMTP<< 451 Service not available -LOG: MAIN - H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 451 Service not available -ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL - SMTP<< 221 Closing connection - SMTP(close)>> -cmdlog: '220:EHLO:250-:MAIL|:RCPT|:BDAT:QUIT:250:250:451:221' -added retry item for T:127.0.0.1:127.0.0.1:PORT_D:10HmaZ-000000005vi-0000: errno=-46 more_errno=dd,A flags=6 -all IP addresses skipped or deferred at least one address -Leaving send_to_server transport -LOG: MAIN - == tempreject@test.ex R=client T=send_to_server defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 451 Service not available ->>>>>>>>>>>>>>>> Exim pid=p1239 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> -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 .... -configuration file is TESTSUITE/test-config -trusted user -admin user -LOG: smtp_connection MAIN - SMTP connection from root -LOG: MAIN - <= fred@myhost.test.ex U=root P=local-smtp S=sss -Exim version x.yz .... -configuration file is TESTSUITE/test-config -trusted user -admin user -dropping to exim gid; retaining priv uid ->>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>> ---------> permreject@test.ex <-------- -send_to_server transport entered - permreject@test.ex -using the transport's hosts: 127.0.0.1 -getting address for 127.0.0.1 -checking retry status of 127.0.0.1 -no host retry record -no message retry record -127.0.0.1 [127.0.0.1]:1111 retry-status = usable -delivering 10HmbA-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (permreject@test.ex) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected - SMTP<< 220 Server ready - SMTP>> EHLO myhost.test.ex -cmd buf flush ddd bytes - SMTP<< 250-hi there - 250-PIPELINING - 250-CHUNKING - 250 OK -using PIPELINING -CHUNKING usable -not using DSN - SMTP|> MAIL FROM:<> - SMTP|> RCPT TO: - will write message using CHUNKING -transport_check_waiting entered - sequence=1 local_max=500 global_max=-1 - no messages waiting for 127.0.0.1 -transport_check_waiting: FALSE -will pipeline QUIT - SMTP+> BDAT 335 LAST -cmd buf flush ddd bytes (more expected) -cannot use sendfile for body: spoolfile not wireformat -writing data block fd=dddd size=sss timeout=300 (more expected) - SMTP+> QUIT -cmd buf flush ddd bytes (more expected) - SMTP(shutdown)>> -sync_responses expect mail - SMTP<< 250 OK mail -sync_responses expect rcpt for permreject@test.ex - SMTP<< 250 OK rcpt - SMTP<< 550 content rejected -ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL - SMTP<< 221 Closing connection - SMTP(close)>> -cmdlog: '220:EHLO:250-:MAIL|:RCPT|:BDAT:QUIT:250:250:550:221' -Leaving send_to_server transport -LOG: MAIN - ** permreject@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 end of data: 550 content rejected -LOG: MAIN - permreject@test.ex: error ignored -LOG: MAIN - Completed ->>>>>>>>>>>>>>>> Exim pid=p1241 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> -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 .... -configuration file is TESTSUITE/test-config -trusted user -admin user -LOG: smtp_connection MAIN - SMTP connection from root -LOG: MAIN - <= fred@myhost.test.ex U=root P=local-smtp S=sss -Exim version x.yz .... -configuration file is TESTSUITE/test-config -trusted user -admin user -dropping to exim gid; retaining priv uid ->>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>> ---------> dataloss@test.ex <-------- -send_to_server transport entered - dataloss@test.ex -using the transport's hosts: 127.0.0.1 -getting address for 127.0.0.1 -checking retry status of 127.0.0.1 -no host retry record -no message retry record -127.0.0.1 [127.0.0.1]:1111 retry-status = usable -delivering 10HmbB-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (dataloss@test.ex) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected - SMTP<< 220 Server ready - SMTP>> EHLO myhost.test.ex -cmd buf flush ddd bytes - SMTP<< 250-hi there - 250-PIPELINING - 250-CHUNKING - 250 OK -using PIPELINING -CHUNKING usable -not using DSN - SMTP|> MAIL FROM:<> - SMTP|> RCPT TO: - will write message using CHUNKING -transport_check_waiting entered - sequence=1 local_max=500 global_max=-1 - no messages waiting for 127.0.0.1 -transport_check_waiting: FALSE -will pipeline QUIT - SMTP+> BDAT 333 LAST -cmd buf flush ddd bytes (more expected) -cannot use sendfile for body: spoolfile not wireformat -writing data block fd=dddd size=sss timeout=300 (more expected) - SMTP+> QUIT -cmd buf flush ddd bytes (more expected) - SMTP(shutdown)>> -sync_responses expect mail - SMTP<< 250 OK mail -sync_responses expect rcpt for dataloss@test.ex - SMTP<< 250 OK rcpt - SMTP(closed)<< -LOG: MAIN - H=127.0.0.1 [127.0.0.1]: Remote host closed connection in response to pipelined end of data -ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL - SMTP(closed)<< - SMTP(close)>> -cmdlog: '220:EHLO:250-:MAIL|:RCPT|:BDAT:QUIT:250:250' -added retry item for T:127.0.0.1:127.0.0.1:PORT_D:10HmbB-000000005vi-0000: errno=-18 more_errno=dd,A flags=6 -all IP addresses skipped or deferred at least one address -Leaving send_to_server transport -LOG: MAIN - == dataloss@test.ex R=client T=send_to_server defer (-18) H=127.0.0.1 [127.0.0.1]: Remote host closed connection in response to pipelined end of data ->>>>>>>>>>>>>>>> Exim pid=p1243 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> -LOG: smtp_connection MAIN - SMTP connection from root D=q.qqqs closed by QUIT ->>>>>>>>>>>>>>>> Exim pid=p1242 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/0951 b/test/stderr/0951 new file mode 100644 index 000000000..fe9ba7150 --- /dev/null +++ b/test/stderr/0951 @@ -0,0 +1,2 @@ +1999-03-02 09:44:33 Exim configuration error in line 1 of TESTSUITE/test-config: + found unexpected BOM (Byte Order Mark) diff --git a/test/stderr/0952 b/test/stderr/0952 new file mode 100644 index 000000000..e318bae79 --- /dev/null +++ b/test/stderr/0952 @@ -0,0 +1,2 @@ +1999-03-02 09:44:33 Exim configuration error in line 1 of TESTSUITE/confs/0951: + found unexpected BOM (Byte Order Mark) diff --git a/test/stderr/1000 b/test/stderr/1000 index f1a1de6a4..4d20918e4 100644 --- a/test/stderr/1000 +++ b/test/stderr/1000 @@ -14,18 +14,23 @@ >>> list element: 2001:ab8:37f:20:0:0:0:1 >>> host in "<; 2001:ab8:37f:20:0:0:0:1 ; v6.test.ex"? yes (matched "2001:ab8:37f:20:0:0:0:1") >>> warn: condition test succeeded in ACL "check_connect" -LOG: H=[2001:0ab8:037f:0020:0000:0000:0000:0001] Warning: matched hostlist +LOG: H=[2001:ab8:37f:20::1] Warning: matched hostlist >>> processing "accept" (TESTSUITE/test-config 24) >>> check condition = ${if eq{$sender_host_address}{2001:0ab8:037f:0020:0000:0000:0000:0001}} ->>> = true ->>> accept: condition test succeeded in ACL "check_connect" ->>> end of ACL "check_connect": ACCEPT +>>> = +>>> accept: condition test failed in ACL "check_connect" +>>> end of ACL "check_connect": implicit DENY +LOG: H=[2001:ab8:37f:20::1] rejected connection in "connect" ACL >>> host in hosts_connection_nolog? no (option unset) >>> host in host_lookup? >>> list element: * >>> host in host_lookup? yes (matched "*") ->>> looking up host name for V6NET:1234:0005:0006:0007:0008:0abc:000d +>>> looking up host name for V6NET:1234:5:6:7:8:abc:d >>> IP address lookup yielded "test3.ipv6.test.ex" +>>> check dnssec require list +>>> test3.ipv6.test.ex not in empty list (option unset? cannot trace name) +>>> check dnssec request list +>>> test3.ipv6.test.ex not in empty list (option unset? cannot trace name) >>> checking addresses for test3.ipv6.test.ex >>> V6NET:1234:5:6:7:8:abc:d OK >>> host in host_reject_connection? no (option unset) @@ -51,7 +56,7 @@ MUNGED: ::1 will be omitted in what follows >>> = >>> accept: condition test failed in ACL "check_connect" >>> end of ACL "check_connect": implicit DENY -LOG: H=test3.ipv6.test.ex [V6NET:1234:0005:0006:0007:0008:0abc:000d] rejected connection in "connect" ACL +LOG: H=test3.ipv6.test.ex [V6NET:1234:5:6:7:8:abc:d] rejected connection in "connect" ACL >>> host in hosts_connection_nolog? no (option unset) >>> host in host_lookup? no (option unset) >>> host in host_reject_connection? no (option unset) @@ -72,10 +77,10 @@ MUNGED: ::1 will be omitted in what follows >>> name=v6.test.ex address=V6NET:ffff:836f:a00:a:800:200a:c032 >>> host in "<; 2001:ab8:37f:20:0:0:0:1 ; v6.test.ex"? yes (matched "v6.test.ex") >>> warn: condition test succeeded in ACL "check_connect" -LOG: H=[V6NET:ffff:836f:0a00:000a:0800:200a:c032] Warning: matched hostlist +LOG: H=[V6NET:ffff:836f:a00:a:800:200a:c032] Warning: matched hostlist >>> processing "accept" (TESTSUITE/test-config 24) >>> check condition = ${if eq{$sender_host_address}{2001:0ab8:037f:0020:0000:0000:0000:0001}} >>> = >>> accept: condition test failed in ACL "check_connect" >>> end of ACL "check_connect": implicit DENY -LOG: H=[V6NET:ffff:836f:0a00:000a:0800:200a:c032] rejected connection in "connect" ACL +LOG: H=[V6NET:ffff:836f:a00:a:800:200a:c032] rejected connection in "connect" ACL diff --git a/test/stderr/1002 b/test/stderr/1002 index cd8cae71f..7dba773b5 100644 --- a/test/stderr/1002 +++ b/test/stderr/1002 @@ -28,6 +28,8 @@ >>> check domains = <+ @mx_any/ignore=<;127.0.0.1;::1 >>> mxt11a.test.ex in "<+ @mx_any/ignore=<;127.0.0.1;::1"? >>> list element: @mx_any/ignore=<;127.0.0.1;::1 +>>> check dnssec require list +>>> check dnssec request list >>> ::1 in "<;127.0.0.1;::1"? >>> list element: 127.0.0.1 >>> list element: ::1 diff --git a/test/stderr/1006 b/test/stderr/1006 index 3fe18948a..ef5f0b89f 100644 --- a/test/stderr/1006 +++ b/test/stderr/1006 @@ -1,47 +1,52 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config admin user dropping to exim gid; retaining priv uid -DNS lookup of mx46.test.ex (MX) using fakens -DNS lookup of mx46.test.ex (MX) succeeded + DNS lookup of mx46.test.ex (MX) using fakens + DNS lookup of mx46.test.ex (MX) succeeded + DNS lookup of 46.test.ex (AAAA) succeeded + DNS lookup of 46.test.ex (A) using fakens + DNS lookup of 46.test.ex (A) succeeded +manualroute in local_parts? no (end of list) DNS lookup of 46.test.ex (AAAA) succeeded DNS lookup of 46.test.ex (A) using fakens DNS lookup of 46.test.ex (A) succeeded -DNS lookup of 46.test.ex (AAAA) succeeded -DNS lookup of 46.test.ex (A) using fakens -DNS lookup of 46.test.ex (A) succeeded -DNS lookup of v6.test.ex (MX) using fakens -DNS lookup of v6.test.ex (MX) gave NO_DATA -returning DNS_NODATA -faking res_search(MX) response length as 65535 - writing neg-cache entry for v6.test.ex-MX-xxxx, ttl 3000 -DNS lookup of v6.test.ex (AAAA) succeeded -DNS lookup of v6.test.ex (A) using fakens -DNS lookup of v6.test.ex (A) gave NO_DATA -returning DNS_NODATA -faking res_search(A) response length as 65535 - writing neg-cache entry for v6.test.ex-A-xxxx, ttl 3000 + DNS lookup of v6.test.ex (MX) using fakens + DNS lookup of v6.test.ex (MX) gave NO_DATA + returning DNS_NODATA + faking res_search(MX) response length as 65535 + writing neg-cache entry for v6.test.ex-MX-xxxx, ttl 3000 + DNS lookup of v6.test.ex (AAAA) succeeded + DNS lookup of v6.test.ex (A) using fakens + DNS lookup of v6.test.ex (A) gave NO_DATA + returning DNS_NODATA + faking res_search(A) response length as 65535 + 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 -DNS lookup of mx46.test.ex (MX) using fakens -DNS lookup of mx46.test.ex (MX) succeeded -DNS lookup of 46.test.ex (A) using fakens -DNS lookup of 46.test.ex (A) succeeded + DNS lookup of mx46.test.ex (MX) using fakens + DNS lookup of mx46.test.ex (MX) succeeded + DNS lookup of 46.test.ex (A) using fakens + DNS lookup of 46.test.ex (A) succeeded +manualroute in local_parts? no (end of list) DNS lookup of 46.test.ex (A) using fakens DNS lookup of 46.test.ex (A) succeeded -DNS lookup of v6.test.ex (MX) using fakens -DNS lookup of v6.test.ex (MX) gave NO_DATA -returning DNS_NODATA -faking res_search(MX) response length as 65535 - writing neg-cache entry for v6.test.ex-MX-xxxx, ttl 3000 -DNS lookup of v6.test.ex (A) using fakens -DNS lookup of v6.test.ex (A) gave NO_DATA -returning DNS_NODATA -faking res_search(A) response length as 65535 - writing neg-cache entry for v6.test.ex-A-xxxx, ttl 3000 + DNS lookup of v6.test.ex (MX) using fakens + DNS lookup of v6.test.ex (MX) gave NO_DATA + returning DNS_NODATA + faking res_search(MX) response length as 65535 + writing neg-cache entry for v6.test.ex-MX-xxxx, ttl 3000 + DNS lookup of v6.test.ex (A) using fakens + DNS lookup of v6.test.ex (A) gave NO_DATA + returning DNS_NODATA + faking res_search(A) response length as 65535 + writing neg-cache entry for v6.test.ex-A-xxxx, ttl 3000 +dnslookup in local_parts? no (end of list) >>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=2 >>>>>>>>>>>>>>>> ******** SERVER ******** diff --git a/test/stderr/1007 b/test/stderr/1007 index ca46d25e6..aa1a3f048 100644 --- a/test/stderr/1007 +++ b/test/stderr/1007 @@ -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 diff --git a/test/stderr/1150 b/test/stderr/1150 index 1640aa020..5d06a61d2 100644 --- a/test/stderr/1150 +++ b/test/stderr/1150 @@ -1,11 +1,13 @@ LOG: queue_run MAIN Start queue run: pid=p1234 -qf delivering 10HmaX-000000005vi-0000 (queue run pid p1234) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... +connected SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 SMTP>> EHLO helo.data.changed SMTP<< 250-myhost.test.ex Hello helo.data.changed [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -15,6 +17,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected SMTP>> EHLO helo.data.changed SMTP<< 250-myhost.test.ex Hello helo.data.changed [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -36,11 +39,13 @@ LOG: MAIN LOG: MAIN Completed delivering 10HmaY-000000005vi-0000 (queue run pid p1234) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... +connected SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 SMTP>> EHLO helo.data.changed SMTP<< 250-myhost.test.ex Hello helo.data.changed [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -50,6 +55,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected SMTP>> EHLO helo.data.changed SMTP<< 250-myhost.test.ex Hello helo.data.changed [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -72,11 +78,13 @@ LOG: MAIN => CALLER@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbA-000000005vi-0000" LOG: MAIN -> xyz@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbA-000000005vi-0000" -Connecting to ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4]:PORT_D ... connected +Connecting to ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4]:PORT_D ... +connected SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 SMTP>> EHLO myhost.test.ex SMTP<< 250-myhost.test.ex Hello the.local.host.name [ip4.ip4.ip4.ip4] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -86,6 +94,7 @@ Connecting to ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4]:PORT_D ... connected SMTP>> EHLO myhost.test.ex SMTP<< 250-myhost.test.ex Hello the.local.host.name [ip4.ip4.ip4.ip4] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stderr/1157 b/test/stderr/1157 index fbb2e0761..c87a34c53 100644 --- a/test/stderr/1157 +++ b/test/stderr/1157 @@ -1,18 +1,24 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config admin user dropping to exim gid; retaining priv uid LOG: queue_run MAIN Start queue run: pid=p1234 -qqf ->>>>>>>>>>>>>>>> Exim pid=p1242 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1243 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1244 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected +>>>>>>>>>>>>>>>> Exim pid=p1242 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1243 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1244 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1245 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1246 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1247 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... +connected SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello localhost [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -20,10 +26,12 @@ cmd buf flush ddd bytes SMTP>> STARTTLS cmd buf flush ddd bytes SMTP<< 220 TLS go ahead +127.0.0.1 in tls_verify_cert_hostnames? no (end of list) SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello localhost [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -36,18 +44,21 @@ cmd buf flush ddd bytes SMTP<< 354 Enter message, ending with "." on a line by itself SMTP>> . SMTP<< 250 OK id=10HmbA-000000005vi-0000 +127.0.0.1 in hosts_noproxy_tls? no (end of list) +>>>>>>>>>>>>>>>> Exim pid=p1248 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => userx@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbA-000000005vi-0000" LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1245 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1249 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config trusted user admin user dropping to exim gid; retaining priv uid SMTP|> MAIL FROM: SIZE=ssss - SMTP|> RCPT TO: + SMTP|> RCPT TO: SMTP>> DATA cmd buf flush ddd bytes SMTP<< 250 OK @@ -55,20 +66,13 @@ cmd buf flush ddd bytes SMTP<< 354 Enter message, ending with "." on a line by itself SMTP>> . SMTP<< 250 OK id=10HmbB-000000005vi-0000 - SMTP(close)>> -cmdlog: 'MAIL|:RCPT|:DATA:250:250:354:.:250' +>>>>>>>>>>>>>>>> Exim pid=p1251 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN - => userz@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbB-000000005vi-0000" + => usery@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbB-000000005vi-0000" LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1246 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>> -Exim version x.yz .... -configuration file is TESTSUITE/test-config -trusted user -admin user -dropping to exim gid; retaining priv uid SMTP|> MAIL FROM: SIZE=ssss - SMTP|> RCPT TO: + SMTP|> RCPT TO: SMTP>> DATA cmd buf flush ddd bytes SMTP<< 250 OK @@ -82,31 +86,38 @@ cmd buf flush ddd bytes (more expected) SMTP<< 250 OK id=10HmbC-000000005vi-0000 SMTP<< 221 myhost.test.ex closing connection SMTP(close)>> -cmdlog: 'MAIL|:RCPT|:DATA:250:250:354:.:QUIT:250:221' +cmdlog: 'MAIL|:RCPT|:DATA:250:250:354:.:QUIT+:250:221' +>>>>>>>>>>>>>>>> Exim pid=p1252 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN - => usery@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbC-000000005vi-0000" + => userz@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbC-000000005vi-0000" LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1247 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1248 (tls-proxy) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1250 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1253 (tls-proxy) terminating with rc=0 >>>>>>>>>>>>>>>> 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 LOG: queue_run MAIN Start queue run: pid=p1235 -qqf ->>>>>>>>>>>>>>>> Exim pid=p1249 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1250 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1251 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected +>>>>>>>>>>>>>>>> Exim pid=p1254 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1255 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1256 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1257 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1258 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1259 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... +connected SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello localhost [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -114,10 +125,12 @@ cmd buf flush ddd bytes SMTP>> STARTTLS cmd buf flush ddd bytes SMTP<< 220 TLS go ahead +127.0.0.1 in tls_verify_cert_hostnames? no (end of list) SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello localhost [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -130,18 +143,21 @@ cmd buf flush ddd bytes SMTP<< 354 Enter message, ending with "." on a line by itself SMTP>> . SMTP<< 250 OK id=10HmbG-000000005vi-0000 +127.0.0.1 in hosts_noproxy_tls? no (end of list) +>>>>>>>>>>>>>>>> Exim pid=p1260 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => usera@test.ex R=cl_override T=send_to_server H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbG-000000005vi-0000" LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1252 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1261 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config trusted user admin user dropping to exim gid; retaining priv uid SMTP|> MAIL FROM: SIZE=ssss - SMTP|> RCPT TO: + SMTP|> RCPT TO: SMTP>> DATA cmd buf flush ddd bytes SMTP<< 250 OK @@ -149,20 +165,13 @@ cmd buf flush ddd bytes SMTP<< 354 Enter message, ending with "." on a line by itself SMTP>> . SMTP<< 250 OK id=10HmbH-000000005vi-0000 - SMTP(close)>> -cmdlog: 'MAIL|:RCPT|:DATA:250:250:354:.:250' +>>>>>>>>>>>>>>>> Exim pid=p1263 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN - => userc@test.ex R=cl_override T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbH-000000005vi-0000" + => userb@test.ex R=cl_override T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbH-000000005vi-0000" LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1253 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>> -Exim version x.yz .... -configuration file is TESTSUITE/test-config -trusted user -admin user -dropping to exim gid; retaining priv uid SMTP|> MAIL FROM: SIZE=ssss - SMTP|> RCPT TO: + SMTP|> RCPT TO: SMTP>> DATA cmd buf flush ddd bytes SMTP<< 250 OK @@ -176,31 +185,38 @@ cmd buf flush ddd bytes (more expected) SMTP<< 250 OK id=10HmbI-000000005vi-0000 SMTP<< 221 myhost.test.ex closing connection SMTP(close)>> -cmdlog: 'MAIL|:RCPT|:DATA:250:250:354:.:QUIT:250:221' +cmdlog: 'MAIL|:RCPT|:DATA:250:250:354:.:QUIT+:250:221' +>>>>>>>>>>>>>>>> Exim pid=p1264 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN - => userb@test.ex R=cl_override T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbI-000000005vi-0000" + => userc@test.ex R=cl_override T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbI-000000005vi-0000" LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1254 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1255 (tls-proxy) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1262 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1265 (tls-proxy) terminating with rc=0 >>>>>>>>>>>>>>>> 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 LOG: queue_run MAIN Start queue run: pid=p1236 -qqf ->>>>>>>>>>>>>>>> Exim pid=p1256 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1257 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1258 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected +>>>>>>>>>>>>>>>> Exim pid=p1266 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1267 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1268 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1269 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1270 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1271 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... +connected SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello localhost [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -208,10 +224,12 @@ cmd buf flush ddd bytes SMTP>> STARTTLS cmd buf flush ddd bytes SMTP<< 220 TLS go ahead +127.0.0.1 in tls_verify_cert_hostnames? no (end of list) SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello localhost [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -228,18 +246,21 @@ cmd buf flush ddd bytes cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello localhost [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS 250 HELP SMTP(close)>> cmdlog: '220:EHLO:250-:STARTTLS:220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:354:.:250:EHLO:250-' +>>>>>>>>>>>>>>>> Exim pid=p1272 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => user_p@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbM-000000005vi-0000" LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1259 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1273 (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config trusted user admin user @@ -247,15 +268,17 @@ dropping to exim gid; retaining priv uid SMTP>> STARTTLS cmd buf flush ddd bytes SMTP<< 220 TLS go ahead +127.0.0.1 in tls_verify_cert_hostnames? no (end of list) SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello localhost [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP SMTP|> MAIL FROM: SIZE=ssss - SMTP|> RCPT TO: + SMTP|> RCPT TO: SMTP>> DATA cmd buf flush ddd bytes SMTP<< 250 OK @@ -267,34 +290,30 @@ cmd buf flush ddd bytes cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello localhost [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS 250 HELP - SMTP(close)>> -cmdlog: 'STARTTLS:220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:354:.:250:EHLO:250-' +>>>>>>>>>>>>>>>> Exim pid=p1275 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN - => user_r@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbN-000000005vi-0000" + => user_q@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbN-000000005vi-0000" LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1260 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>> -Exim version x.yz .... -configuration file is TESTSUITE/test-config -trusted user -admin user -dropping to exim gid; retaining priv uid SMTP>> STARTTLS cmd buf flush ddd bytes SMTP<< 220 TLS go ahead +127.0.0.1 in tls_verify_cert_hostnames? no (end of list) SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello localhost [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP SMTP|> MAIL FROM: SIZE=ssss - SMTP|> RCPT TO: + SMTP|> RCPT TO: SMTP>> DATA cmd buf flush ddd bytes SMTP<< 250 OK @@ -307,11 +326,12 @@ cmd buf flush ddd bytes SMTP<< 221 myhost.test.ex closing connection SMTP(close)>> cmdlog: 'STARTTLS:220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:354:.:QUIT:250:221' +>>>>>>>>>>>>>>>> Exim pid=p1276 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN - => user_q@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbO-000000005vi-0000" + => user_r@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbO-000000005vi-0000" LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1261 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1274 (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: queue_run MAIN End queue run: pid=p1236 -qqf >>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/1160 b/test/stderr/1160 index 7a2a1aee5..2cbfc2785 100644 --- a/test/stderr/1160 +++ b/test/stderr/1160 @@ -1,11 +1,13 @@ LOG: queue_run MAIN Start queue run: pid=p1234 -qf delivering 10HmaX-000000005vi-0000 (queue run pid p1234) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... +connected SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 SMTP>> EHLO helo.data.changed SMTP<< 250-myhost.test.ex Hello helo.data.changed [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -27,11 +29,13 @@ LOG: MAIN LOG: MAIN Completed delivering 10HmaY-000000005vi-0000 (queue run pid p1234) -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... +connected SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 SMTP>> EHLO helo.data.changed SMTP<< 250-myhost.test.ex Hello helo.data.changed [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -54,11 +58,13 @@ LOG: MAIN => CALLER@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbA-000000005vi-0000" LOG: MAIN -> xyz@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbA-000000005vi-0000" -Connecting to ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4]:PORT_D ... connected +Connecting to ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4]:PORT_D ... +connected SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 SMTP>> EHLO myhost.test.ex SMTP<< 250-myhost.test.ex Hello the.local.host.name [ip4.ip4.ip4.ip4] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stderr/2035 b/test/stderr/2035 index 502516dd5..920205672 100644 --- a/test/stderr/2035 +++ b/test/stderr/2035 @@ -1,14 +1,17 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config admin user LOG: smtp_connection MAIN SMTP connection from CALLER -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... +connected SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello localhost [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -16,10 +19,12 @@ cmd buf flush ddd bytes SMTP>> STARTTLS cmd buf flush ddd bytes SMTP<< 220 TLS go ahead +127.0.0.1 in tls_verify_cert_hostnames? no (end of list) SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello localhost [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -38,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 @@ -69,13 +75,14 @@ cmd buf flush ddd bytes (more expected) SMTP(TLS shutdown)>> SMTP<< 221 myhost.test.ex closing connection SMTP(close)>> -cmdlog: 'DATA:354:.:250:QUIT:221' +cmdlog: 'DATA:354:.:250:QUIT+:221' Leaving t1 transport +>>>>>>>>>>>>>>>> Exim pid=p1238 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => userb@test.ex R=client T=t1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmaY-000000005vi-0000" LOG: MAIN Completed >>>>>>>>>>>>>>>> Exim pid=p1237 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1238 (tls-proxy) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1239 (tls-proxy) terminating with rc=0 >>>>>>>>>>>>>>>> ******** SERVER ******** diff --git a/test/stderr/2135 b/test/stderr/2135 index 502516dd5..920205672 100644 --- a/test/stderr/2135 +++ b/test/stderr/2135 @@ -1,14 +1,17 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config admin user LOG: smtp_connection MAIN SMTP connection from CALLER -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... +connected SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello localhost [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -16,10 +19,12 @@ cmd buf flush ddd bytes SMTP>> STARTTLS cmd buf flush ddd bytes SMTP<< 220 TLS go ahead +127.0.0.1 in tls_verify_cert_hostnames? no (end of list) SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello localhost [127.0.0.1] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -38,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 @@ -69,13 +75,14 @@ cmd buf flush ddd bytes (more expected) SMTP(TLS shutdown)>> SMTP<< 221 myhost.test.ex closing connection SMTP(close)>> -cmdlog: 'DATA:354:.:250:QUIT:221' +cmdlog: 'DATA:354:.:250:QUIT+:221' Leaving t1 transport +>>>>>>>>>>>>>>>> Exim pid=p1238 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => userb@test.ex R=client T=t1 H=127.0.0.1 [127.0.0.1]:PORT_D X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmaY-000000005vi-0000" LOG: MAIN Completed >>>>>>>>>>>>>>>> Exim pid=p1237 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1238 (tls-proxy) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1239 (tls-proxy) terminating with rc=0 >>>>>>>>>>>>>>>> ******** SERVER ******** diff --git a/test/stderr/2200 b/test/stderr/2200 index 7f1722497..70972b0c0 100644 --- a/test/stderr/2200 +++ b/test/stderr/2200 @@ -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 diff --git a/test/stderr/2201 b/test/stderr/2201 index 61b8b2967..eb37f80cb 100644 --- a/test/stderr/2201 +++ b/test/stderr/2201 @@ -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 @@ -21,15 +22,15 @@ routing test.ex@test.ex --------> r0 router <-------- local_part=test.ex domain=test.ex checking senders -CALLER@myhost.test.ex in "a@shorthost.test.ex"? +CALLER@myhost.test.ex in senders? list element: a@shorthost.test.ex address match test: subject=CALLER@myhost.test.ex pattern=a@shorthost.test.ex -CALLER@myhost.test.ex in "a@shorthost.test.ex"? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) r0 router skipped: senders mismatch --------> r1 router <-------- local_part=test.ex domain=test.ex checking domains -test.ex in "dnsdb;test.ex"? +test.ex in domains? list element: dnsdb;test.ex search_open: dnsdb "NULL" search_find: file="NULL" @@ -40,13 +41,13 @@ test.ex in "dnsdb;test.ex"? database lookup required for test.ex (tainted) dnsdb key: test.ex -DNS lookup of test.ex (TXT) using fakens -DNS lookup of test.ex (TXT) succeeded + DNS lookup of test.ex (TXT) using fakens + DNS lookup of test.ex (TXT) succeeded creating new cache entry - lookup yielded: A TXT record for test.ex. - test.ex in "dnsdb;test.ex"? yes (matched "dnsdb;test.ex") + lookup yielded: A░TXT░record░for░test.ex. + test.ex in domains? yes (matched "dnsdb;test.ex") checking local_parts -test.ex in "dnsdb;test.ex"? +test.ex in local_parts? list element: dnsdb;test.ex search_open: dnsdb "NULL" cached open @@ -56,8 +57,8 @@ test.ex in "dnsdb;test.ex"? internal_search_find: file="NULL" type=dnsdb key="test.ex" opts=NULL cached data used for lookup of test.ex - lookup yielded: A TXT record for test.ex. - test.ex in "dnsdb;test.ex"? yes (matched "dnsdb;test.ex") + lookup yielded: A░TXT░record░for░test.ex. + test.ex in local_parts? yes (matched "dnsdb;test.ex") calling r1 router r1 router called for test.ex@test.ex domain = test.ex @@ -78,15 +79,15 @@ routing unknown@test.ex --------> r0 router <-------- local_part=unknown domain=test.ex checking senders -CALLER@myhost.test.ex in "a@shorthost.test.ex"? +CALLER@myhost.test.ex in senders? list element: a@shorthost.test.ex address match test: subject=CALLER@myhost.test.ex pattern=a@shorthost.test.ex -CALLER@myhost.test.ex in "a@shorthost.test.ex"? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) r0 router skipped: senders mismatch --------> r1 router <-------- local_part=unknown domain=test.ex checking domains -test.ex in "dnsdb;test.ex"? +test.ex in domains? list element: dnsdb;test.ex search_open: dnsdb "NULL" cached open @@ -96,10 +97,10 @@ test.ex in "dnsdb;test.ex"? internal_search_find: file="NULL" type=dnsdb key="test.ex" opts=NULL cached data used for lookup of test.ex - lookup yielded: A TXT record for test.ex. - test.ex in "dnsdb;test.ex"? yes (matched "dnsdb;test.ex") + lookup yielded: A░TXT░record░for░test.ex. + test.ex in domains? yes (matched "dnsdb;test.ex") checking local_parts -unknown in "dnsdb;unknown"? +unknown in local_parts? list element: dnsdb;unknown search_open: dnsdb "NULL" cached open @@ -111,19 +112,19 @@ unknown in "dnsdb;unknown"? database lookup required for unknown (tainted) dnsdb key: unknown -DNS lookup of unknown (TXT) using fakens -DNS lookup of unknown (TXT) gave HOST_NOT_FOUND -returning DNS_NOMATCH -faking res_search(TXT) response length as 65535 - writing neg-cache entry for unknown-TXT-xxxx, ttl 3000 + DNS lookup of unknown (TXT) using fakens + DNS lookup of unknown (TXT) gave HOST_NOT_FOUND + returning DNS_NOMATCH + faking res_search(TXT) response length as 65535 + writing neg-cache entry for unknown-TXT-xxxx, ttl 3000 creating new cache entry lookup failed -unknown in "dnsdb;unknown"? no (end of list) +unknown in local_parts? no (end of list) r1 router skipped: local_parts mismatch --------> r2 router <-------- local_part=unknown domain=test.ex checking domains -test.ex in "dnsdb;test.ex"? +test.ex in domains? list element: dnsdb;test.ex search_open: dnsdb "NULL" cached open @@ -133,10 +134,10 @@ test.ex in "dnsdb;test.ex"? internal_search_find: file="NULL" type=dnsdb key="test.ex" opts=NULL cached data used for lookup of test.ex - lookup yielded: A TXT record for test.ex. - test.ex in "dnsdb;test.ex"? yes (matched "dnsdb;test.ex") + lookup yielded: A░TXT░record░for░test.ex. + test.ex in domains? yes (matched "dnsdb;test.ex") checking senders -CALLER@myhost.test.ex in "dnsdb;A=myhost.test.ex"? +CALLER@myhost.test.ex in senders? list element: dnsdb;A=myhost.test.ex address match test: subject=CALLER@myhost.test.ex pattern=dnsdb;A=myhost.test.ex search_open: dnsdb "NULL" @@ -148,11 +149,11 @@ CALLER@myhost.test.ex in "dnsdb;A=myhost.test.ex"? type=dnsdb key="A=myhost.test.ex" opts=NULL database lookup required for A=myhost.test.ex dnsdb key: myhost.test.ex -DNS lookup of myhost.test.ex (A) using fakens -DNS lookup of myhost.test.ex (A) succeeded + DNS lookup of myhost.test.ex (A) using fakens + DNS lookup of myhost.test.ex (A) succeeded creating new cache entry lookup yielded: V4NET.10.10.10 - CALLER@myhost.test.ex in "dnsdb;A=myhost.test.ex"? yes (matched "dnsdb;A=myhost.test.ex") + CALLER@myhost.test.ex in senders? yes (matched "dnsdb;A=myhost.test.ex") calling r2 router r2 router called for unknown@test.ex domain = test.ex @@ -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 @@ -231,6 +234,7 @@ p1238 Process p1238 is handling incoming connection from [127.0.0.1] p1238 Process p1238 is ready for new message 1 SMTP accept process running Listening... +p1238 host in chunking_advertise_hosts? no (end of list) p1238 dnslists check: rbl.test.ex/V4NET.11.12.14 p1238 new DNS lookup for 14.12.11.V4NET.rbl.test.ex p1238 dnslists: wrote cache entry, ttl=2 diff --git a/test/stderr/2202 b/test/stderr/2202 index 9cd2772a2..f9c7704ca 100644 --- a/test/stderr/2202 +++ b/test/stderr/2202 @@ -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 @@ -48,15 +49,15 @@ check hosts = +ignore_unknown : *.$sender_address_domain : $sender_address_domai database lookup required for >:defer_never,mxh=cioce.test.again.dns (tainted) dnsdb key: cioce.test.again.dns -DNS lookup of cioce.test.again.dns (MX) using fakens -DNS lookup of cioce.test.again.dns (MX) gave TRY_AGAIN + DNS lookup of cioce.test.again.dns (MX) using fakens + DNS lookup of cioce.test.again.dns (MX) gave TRY_AGAIN cioce.test.again.dns in dns_again_means_nonexist? list element: * cioce.test.again.dns in dns_again_means_nonexist? yes (matched "*") -cioce.test.again.dns is in dns_again_means_nonexist: returning DNS_NOMATCH -DNS: couldn't fake dnsa len -DNS: no SOA record found for neg-TTL - writing neg-cache entry for cioce.test.again.dns-MX-xxxx, ttl -1 + cioce.test.again.dns is in dns_again_means_nonexist: returning DNS_NOMATCH + DNS: couldn't fake dnsa len + DNS: no SOA record found for neg-TTL + writing neg-cache entry for cioce.test.again.dns-MX-xxxx, ttl -1 creating new cache entry lookup failed host in "+ignore_unknown : *.cioce.test.again.dns : cioce.test.again.dns : "? @@ -64,13 +65,17 @@ host in "+ignore_unknown : *.cioce.test.again.dns : cioce.test.again.dns : "? list element: *.cioce.test.again.dns sender host name required, to match against *.cioce.test.again.dns looking up host name for ip4.ip4.ip4.ip4 -DNS lookup of ip4-reverse.in-addr.arpa (PTR) using fakens -DNS lookup of ip4-reverse.in-addr.arpa (PTR) succeeded + DNS lookup of ip4-reverse.in-addr.arpa (PTR) using fakens + DNS lookup of ip4-reverse.in-addr.arpa (PTR) succeeded IP address lookup yielded "the.local.host.name" -DNS lookup of the.local.host.name (A) using fakens -DNS lookup of the.local.host.name (A) succeeded + check dnssec require list + the.local.host.name not in empty list (option unset? cannot trace name) + check dnssec request list + the.local.host.name not in empty list (option unset? cannot trace name) + DNS lookup of the.local.host.name (A) using fakens + DNS lookup of the.local.host.name (A) succeeded local host found for non-MX address -the.local.host.name ip4.ip4.ip4.ip4 mx=-1 sort=xx + the.local.host.name ip4.ip4.ip4.ip4 mx=-1 sort=xx checking addresses for the.local.host.name Forward DNS security status: unverified ip4.ip4.ip4.ip4 OK @@ -78,15 +83,15 @@ sender_fullhost = the.local.host.name (test) [ip4.ip4.ip4.ip4] sender_rcvhost = the.local.host.name ([ip4.ip4.ip4.ip4] helo=test) list element: cioce.test.again.dns using host_fake_gethostbyname for cioce.test.again.dns (IPv4) -DNS lookup of cioce.test.again.dns (A) using fakens -DNS lookup of cioce.test.again.dns (A) gave TRY_AGAIN + DNS lookup of cioce.test.again.dns (A) using fakens + DNS lookup of cioce.test.again.dns (A) gave TRY_AGAIN cioce.test.again.dns in dns_again_means_nonexist? list element: * cioce.test.again.dns in dns_again_means_nonexist? yes (matched "*") -cioce.test.again.dns is in dns_again_means_nonexist: returning DNS_NOMATCH -DNS: couldn't fake dnsa len -DNS: no SOA record found for neg-TTL - writing neg-cache entry for cioce.test.again.dns-A-xxxx, ttl -1 + cioce.test.again.dns is in dns_again_means_nonexist: returning DNS_NOMATCH + DNS: couldn't fake dnsa len + DNS: no SOA record found for neg-TTL + writing neg-cache entry for cioce.test.again.dns-A-xxxx, ttl -1 host_fake_gethostbyname(af=inet) returned 1 (HOST_NOT_FOUND) no IP address found for host cioce.test.again.dns (during SMTP connection from the.local.host.name (test) [ip4.ip4.ip4.ip4]) LOG: host_lookup_failed MAIN @@ -105,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 @@ -140,27 +146,31 @@ test.again.dns in "+try_again_dns_list"? start sublist try_again_dns_list test.again.dns in "@mx_any"? ╎list element: @mx_any -DNS lookup of test.again.dns (MX) using fakens -DNS lookup of test.again.dns (MX) gave TRY_AGAIN + ╎check dnssec require list + ╎check dnssec request list + ╎DNS lookup of test.again.dns (MX) using fakens + ╎DNS lookup of test.again.dns (MX) gave TRY_AGAIN ╎test.again.dns in dns_again_means_nonexist? ╎ list element: !+try_again_dns_list ╎ start sublist try_again_dns_list ╎ test.again.dns in "@mx_any"? ╎ ╎list element: @mx_any -DNS lookup of test.again.dns (MX) using fakens -DNS lookup of test.again.dns (MX) gave TRY_AGAIN + ╎ ╎check dnssec require list + ╎ ╎check dnssec request list + ╎ ╎DNS lookup of test.again.dns (MX) using fakens + ╎ ╎DNS lookup of test.again.dns (MX) gave TRY_AGAIN LOG: MAIN PANIC dns_again_means_nonexist recursion seen for test.again.dns (assuming nonexist) -DNS: couldn't fake dnsa len -DNS: no SOA record found for neg-TTL - writing neg-cache entry for test.again.dns-MX-xxxx, ttl -1 + ╎ ╎DNS: couldn't fake dnsa len + ╎ ╎DNS: no SOA record found for neg-TTL + ╎ ╎ writing neg-cache entry for test.again.dns-MX-xxxx, ttl -1 ╎ test.again.dns in "@mx_any"? no (end of list) ╎ end sublist try_again_dns_list ╎test.again.dns in dns_again_means_nonexist? yes (end of list) -test.again.dns is in dns_again_means_nonexist: returning DNS_NOMATCH -DNS: couldn't fake dnsa len -DNS: no SOA record found for neg-TTL - update neg-cache entry for test.again.dns-MX-xxxx, ttl -1 + ╎test.again.dns is in dns_again_means_nonexist: returning DNS_NOMATCH + ╎DNS: couldn't fake dnsa len + ╎DNS: no SOA record found for neg-TTL + ╎ update neg-cache entry for test.again.dns-MX-xxxx, ttl -1 test.again.dns in "@mx_any"? no (end of list) end sublist try_again_dns_list test.again.dns in "+try_again_dns_list"? no (end of list) diff --git a/test/stderr/2600 b/test/stderr/2600 index 72291ff43..5b8d97e38 100644 --- a/test/stderr/2600 +++ b/test/stderr/2600 @@ -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,7 +12,7 @@ dropping to exim gid; retaining priv uid file lookup required for select name from them where id='userx'; in TESTSUITE/aux-fixed/sqlitedb creating new cache entry - lookup yielded: Ayen Other + lookup yielded: Ayen░Other search_open: sqlite "TESTSUITE/aux-fixed/sqlitedb" cached open search_find: file="TESTSUITE/aux-fixed/sqlitedb" @@ -22,7 +23,7 @@ dropping to exim gid; retaining priv uid cached data found but wrong opts; file lookup required for select name from them where id='userx'; c in TESTSUITE/aux-fixed/sqlitedb replacing old cache entry - lookup yielded: Ayen Other + lookup yielded: Ayen░Other search_open: sqlite "TESTSUITE/aux-fixed/sqlitedb" cached open search_find: file="TESTSUITE/aux-fixed/sqlitedb" @@ -33,7 +34,7 @@ dropping to exim gid; retaining priv uid cached data found but wrong opts; file lookup required for select name from them where id='userx'; c in TESTSUITE/aux-fixed/sqlitedb replacing old cache entry - lookup yielded: Ayen Other + lookup yielded: Ayen░Other search_open: sqlite "TESTSUITE/aux-fixed/sqlitedb" cached open search_find: file="TESTSUITE/aux-fixed/sqlitedb" @@ -43,7 +44,7 @@ dropping to exim gid; retaining priv uid type=sqlite key="select name from them where id='userx';" opts="file=TESTSUITE/aux-fixed/sqlitedb" cached data used for lookup of select name from them where id='userx'; in TESTSUITE/aux-fixed/sqlitedb - lookup yielded: Ayen Other + lookup yielded: Ayen░Other search_open: sqlite "TESTSUITE/aux-fixed/sqlitedb" cached open search_find: file="TESTSUITE/aux-fixed/sqlitedb" @@ -76,7 +77,7 @@ dropping to exim gid; retaining priv uid file lookup required for select id,name from them where id='nothing'; in TESTSUITE/aux-fixed/sqlitedb creating new cache entry - lookup yielded: id=nothing name="" + lookup yielded: id=nothing░name=""░ search_open: sqlite "TESTSUITE/aux-fixed/sqlitedb" cached open search_find: file="TESTSUITE/aux-fixed/sqlitedb" @@ -87,7 +88,7 @@ dropping to exim gid; retaining priv uid file lookup required for select * from them where id='quote2'; in TESTSUITE/aux-fixed/sqlitedb creating new cache entry - lookup yielded: name="\"stquot" id=quote2 + lookup yielded: name="\"stquot"░id=quote2░ search_open: sqlite "TESTSUITE/aux-fixed/sqlitedb" cached open search_find: file="TESTSUITE/aux-fixed/sqlitedb" @@ -98,8 +99,8 @@ dropping to exim gid; retaining priv uid file lookup required for select * from them where id='newline'; in TESTSUITE/aux-fixed/sqlitedb creating new cache entry - lookup yielded: name="before - after" id=newline + lookup yielded: name="before↩ + after"░id=newline░ search_open: sqlite "TESTSUITE/aux-fixed/sqlitedb" cached open search_find: file="TESTSUITE/aux-fixed/sqlitedb" @@ -110,7 +111,7 @@ dropping to exim gid; retaining priv uid file lookup required for select * from them where id='tab'; in TESTSUITE/aux-fixed/sqlitedb creating new cache entry - lookup yielded: name="x x" id=tab + lookup yielded: name="x␉x"░id=tab░ search_open: sqlite "TESTSUITE/aux-fixed/sqlitedb" cached open search_find: file="TESTSUITE/aux-fixed/sqlitedb" @@ -121,7 +122,7 @@ dropping to exim gid; retaining priv uid file lookup required for select * from them where id='its'; in TESTSUITE/aux-fixed/sqlitedb creating new cache entry - lookup yielded: name=it's id=its + lookup yielded: name=it's░id=its░ search_open: sqlite "TESTSUITE/aux-fixed/sqlitedb" cached open search_find: file="TESTSUITE/aux-fixed/sqlitedb" @@ -132,10 +133,11 @@ dropping to exim gid; retaining priv uid file lookup required for select * from them where name='it''s'; in TESTSUITE/aux-fixed/sqlitedb creating new cache entry - lookup yielded: name=it's id=its + lookup yielded: name=it's░id=its░ 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 @@ -193,7 +195,7 @@ host in "+relay_hosts"? list element: +relay_hosts start sublist relay_hosts host in "sqlite,file=TESTSUITE/aux-fixed/sqlitedb; select * from them where id='10.0.0.0'"? - ╎list element: sqlite,file=TESTSUITE/aux-fixed/sqlitedb; select * from them where id='10.0.0.0' + ╎list element: sqlite,file=TESTSUITE/aux-fixed/sqlitedb;░select░*░from░them░where░id='10.0.0.0' ╎search_open: sqlite "TESTSUITE/aux-fixed/sqlitedb" ╎search_find: file="TESTSUITE/aux-fixed/sqlitedb" ╎ key="select * from them where id='10.0.0.0'" partial=-1 affix=NULL starflags=0 opts="file=TESTSUITE/aux-fixed/sqlitedb" @@ -234,7 +236,7 @@ host in "+relay_hosts"? list element: +relay_hosts start sublist relay_hosts host in "sqlite,file=TESTSUITE/aux-fixed/sqlitedb; select * from them where id='10.0.0.0'"? - ╎list element: sqlite,file=TESTSUITE/aux-fixed/sqlitedb; select * from them where id='10.0.0.0' + ╎list element: sqlite,file=TESTSUITE/aux-fixed/sqlitedb;░select░*░from░them░where░id='10.0.0.0' ╎search_open: sqlite "TESTSUITE/aux-fixed/sqlitedb" ╎ cached open ╎search_find: file="TESTSUITE/aux-fixed/sqlitedb" @@ -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 @@ -321,7 +324,7 @@ host in "+relay_hosts"? list element: +relay_hosts start sublist relay_hosts host in "sqlite;TESTSUITE/aux-fixed/sqlitedb select * from them where id='10.0.0.0'"? - ╎list element: sqlite;TESTSUITE/aux-fixed/sqlitedb select * from them where id='10.0.0.0' + ╎list element: sqlite;TESTSUITE/aux-fixed/sqlitedb░select░*░from░them░where░id='10.0.0.0' ╎search_open: sqlite "TESTSUITE/aux-fixed/sqlitedb" ╎search_find: file="TESTSUITE/aux-fixed/sqlitedb" ╎ key="select * from them where id='10.0.0.0'" partial=-1 affix=NULL starflags=0 opts=NULL @@ -362,7 +365,7 @@ host in "+relay_hosts"? list element: +relay_hosts start sublist relay_hosts host in "sqlite;TESTSUITE/aux-fixed/sqlitedb select * from them where id='10.0.0.0'"? - ╎list element: sqlite;TESTSUITE/aux-fixed/sqlitedb select * from them where id='10.0.0.0' + ╎list element: sqlite;TESTSUITE/aux-fixed/sqlitedb░select░*░from░them░where░id='10.0.0.0' ╎search_open: sqlite "TESTSUITE/aux-fixed/sqlitedb" ╎ cached open ╎search_find: file="TESTSUITE/aux-fixed/sqlitedb" @@ -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 @@ -449,7 +453,7 @@ host in "+relay_hosts"? list element: +relay_hosts start sublist relay_hosts host in "sqlite;TESTSUITE/aux-fixed/sqlitedb select * from them where id='10.10.10.10'"? - ╎list element: sqlite;TESTSUITE/aux-fixed/sqlitedb select * from them where id='10.10.10.10' + ╎list element: sqlite;TESTSUITE/aux-fixed/sqlitedb░select░*░from░them░where░id='10.10.10.10' ╎search_open: sqlite "TESTSUITE/aux-fixed/sqlitedb" ╎search_find: file="TESTSUITE/aux-fixed/sqlitedb" ╎ key="select * from them where id='10.10.10.10'" partial=-1 affix=NULL starflags=0 opts=NULL @@ -459,7 +463,7 @@ host in "+relay_hosts"? ╎file lookup required for select * from them where id='10.10.10.10' ╎ in TESTSUITE/aux-fixed/sqlitedb ╎creating new cache entry - ╎lookup yielded: name=ok id=10.10.10.10 + ╎lookup yielded: name=ok░id=10.10.10.10░ ╎host in "sqlite;TESTSUITE/aux-fixed/sqlitedb select * from them where id='10.10.10.10'"? yes (matched "sqlite;TESTSUITE/aux-fixed/sqlitedb select * from them where id='10.10.10.10'") end sublist relay_hosts host in "+relay_hosts"? yes (matched "+relay_hosts") @@ -485,7 +489,7 @@ host in "+relay_hosts"? list element: +relay_hosts start sublist relay_hosts host in "sqlite;TESTSUITE/aux-fixed/sqlitedb select * from them where id='10.10.10.10'"? - ╎list element: sqlite;TESTSUITE/aux-fixed/sqlitedb select * from them where id='10.10.10.10' + ╎list element: sqlite;TESTSUITE/aux-fixed/sqlitedb░select░*░from░them░where░id='10.10.10.10' ╎search_open: sqlite "TESTSUITE/aux-fixed/sqlitedb" ╎ cached open ╎search_find: file="TESTSUITE/aux-fixed/sqlitedb" @@ -495,7 +499,7 @@ host in "+relay_hosts"? ╎ type=sqlite key="select * from them where id='10.10.10.10'" opts=NULL ╎cached data used for lookup of select * from them where id='10.10.10.10' ╎ in TESTSUITE/aux-fixed/sqlitedb - ╎lookup yielded: name=ok id=10.10.10.10 + ╎lookup yielded: name=ok░id=10.10.10.10░ ╎host in "sqlite;TESTSUITE/aux-fixed/sqlitedb select * from them where id='10.10.10.10'"? yes (matched "sqlite;TESTSUITE/aux-fixed/sqlitedb select * from them where id='10.10.10.10'") end sublist relay_hosts host in "+relay_hosts"? yes (matched "+relay_hosts") @@ -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 @@ -529,15 +534,15 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=F: From: CALLER_NAME search_tidyup called >>Headers after rewriting and local additions: -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaX-000000005vi-0000-D Data file written for message 10HmaX-000000005vi-0000 @@ -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 @@ -580,8 +586,6 @@ body_linecount=1 message_linecount=8 DSN: set orcpt: flags: 0x0 Delivery address list: userx@myhost.test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -606,7 +610,7 @@ processing address_data file lookup required for select name from them where id='userx' in TESTSUITE/aux-fixed/sqlitedb creating new cache entry - lookup yielded: Ayen Other + lookup yielded: Ayen░Other calling r1 router r1 router called for userx@myhost.test.ex domain = myhost.test.ex @@ -628,8 +632,6 @@ After routing: search_tidyup called >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> userx@myhost.test.ex <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -667,6 +669,7 @@ writing data block fd=dddd size=sss timeout=0 writing data block fd=dddd size=sss timeout=0 appendfile yields 0 with errno=dd more_errno=dd search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1240 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling userx@myhost.test.ex t1 transport returned OK for userx@myhost.test.ex post-process userx@myhost.test.ex (0) @@ -678,10 +681,10 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1239 set_process_info: pppp tidying up after delivering 10HmaX-000000005vi-0000 Processing retry items -Succeeded addresses: - userx@myhost.test.ex: no retry items -Failed addresses: -Deferred addresses: + Succeeded addresses: + userx@myhost.test.ex: no retry items + Failed addresses: + Deferred addresses: end of retry processing DSN: processing router : r1 DSN: processing successful delivery address: userx@myhost.test.ex @@ -700,6 +703,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 @@ -712,10 +716,11 @@ dropping to exim gid; retaining priv uid file lookup required for select name from them where id='userx'; in TESTSUITE/aux-fixed/sqlitedb creating new cache entry - lookup yielded: Ayen Other + lookup yielded: Ayen░Other 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 @@ -728,10 +733,11 @@ dropping to exim gid; retaining priv uid type=sqlite key="select name from them where id='userx';" opts=NULL database lookup required for select name from them where id='userx'; creating new cache entry - lookup yielded: Ayen Other + lookup yielded: Ayen░Other 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 +746,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 diff --git a/test/stderr/2610 b/test/stderr/2610 index 5bbc3c165..950d09229 100644 --- a/test/stderr/2610 +++ b/test/stderr/2610 @@ -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 @@ -15,7 +16,7 @@ dropping to exim gid; retaining priv uid MySQL query: "select name from them where id='ph10';" opts 'NULL' MYSQL new connection: host=127.0.0.1 port=PORT_N socket=NULL database=test user=root creating new cache entry - lookup yielded: Philip Hazel + lookup yielded: Philip░Hazel search_open: mysql "NULL" cached open search_find: file="NULL" @@ -24,7 +25,7 @@ dropping to exim gid; retaining priv uid internal_search_find: file="NULL" type=mysql key="select name from them where id='ph10';" opts=NULL cached data used for lookup of select name from them where id='ph10'; - lookup yielded: Philip Hazel + lookup yielded: Philip░Hazel search_open: mysql "NULL" cached open search_find: file="NULL" @@ -61,7 +62,7 @@ dropping to exim gid; retaining priv uid MySQL query: "select id,name from them where id='nothing';" opts 'NULL' MYSQL using cached connection for 127.0.0.1:PORT_N/test/root creating new cache entry - lookup yielded: id=nothing name="" + lookup yielded: id=nothing░name=""░ search_open: mysql "NULL" cached open search_find: file="NULL" @@ -112,7 +113,7 @@ dropping to exim gid; retaining priv uid MySQL query: "select * from them where id='quote2';" opts 'NULL' MYSQL using cached connection for 127.0.0.1:PORT_N/test/root creating new cache entry - lookup yielded: name="\"stquot" id=quote2 + lookup yielded: name="\"stquot"░id=quote2░ search_open: mysql "NULL" cached open search_find: file="NULL" @@ -135,6 +136,9 @@ dropping to exim gid; retaining priv uid type=mysql key="servers=x:127.0.0.1::PORT_N; select name from them where id='ph10';" opts=NULL database lookup required for servers=x:127.0.0.1::PORT_N; select name from them where id='ph10'; MySQL query: "servers=x:127.0.0.1::PORT_N; select name from them where id='ph10';" opts 'NULL' +LOG: MAIN + Exim configuration error in line 89 of TESTSUITE/test-config: + WARNING: obsolete syntax used for lookup lookup deferred: MySQL server "x" not found in mysql_servers search_open: mysql "NULL" cached open @@ -145,9 +149,12 @@ dropping to exim gid; retaining priv uid type=mysql key="servers=127.0.0.1::PORT_N:x; select name from them where id='ph10';" opts=NULL database lookup required for servers=127.0.0.1::PORT_N:x; select name from them where id='ph10'; MySQL query: "servers=127.0.0.1::PORT_N:x; select name from them where id='ph10';" opts 'NULL' +LOG: MAIN + Exim configuration error in line 89 of TESTSUITE/test-config: + WARNING: obsolete syntax used for lookup MYSQL using cached connection for 127.0.0.1:PORT_N/test/root creating new cache entry - lookup yielded: Philip Hazel + lookup yielded: Philip░Hazel search_open: mysql "NULL" cached open search_find: file="NULL" @@ -157,9 +164,12 @@ dropping to exim gid; retaining priv uid type=mysql key="servers=127.0.0.1::PORT_N/test/root/:x; select name from them where id='ph10';" opts=NULL database lookup required for servers=127.0.0.1::PORT_N/test/root/:x; select name from them where id='ph10'; MySQL query: "servers=127.0.0.1::PORT_N/test/root/:x; select name from them where id='ph10';" opts 'NULL' +LOG: MAIN + Exim configuration error in line 89 of TESTSUITE/test-config: + WARNING: obsolete syntax used for lookup MYSQL using cached connection for 127.0.0.1:PORT_N/test/root creating new cache entry - lookup yielded: Philip Hazel + lookup yielded: Philip░Hazel search_open: mysql "NULL" cached open search_find: file="NULL" @@ -169,9 +179,12 @@ dropping to exim gid; retaining priv uid type=mysql key="servers=ip4.ip4.ip4.ip4::1223/test/root/:127.0.0.1::PORT_N; select name from them where id='ph10';" opts=NULL database lookup required for servers=ip4.ip4.ip4.ip4::1223/test/root/:127.0.0.1::PORT_N; select name from them where id='ph10'; MySQL query: "servers=ip4.ip4.ip4.ip4::1223/test/root/:127.0.0.1::PORT_N; select name from them where id='ph10';" opts 'NULL' +LOG: MAIN + Exim configuration error in line 89 of TESTSUITE/test-config: + WARNING: obsolete syntax used for lookup MYSQL new connection: host=ip4.ip4.ip4.ip4 port=PORT_N socket=NULL database=test user=root creating new cache entry - lookup yielded: Philip Hazel + lookup yielded: Philip░Hazel search_open: mysql "NULL" cached open search_find: file="NULL" @@ -181,9 +194,12 @@ dropping to exim gid; retaining priv uid type=mysql key="servers=localhost(TESTSUITE/mysql/sock)/test/root/pass; select name from them where id='ph10';" opts=NULL database lookup required for servers=localhost(TESTSUITE/mysql/sock)/test/root/pass; select name from them where id='ph10'; MySQL query: "servers=localhost(TESTSUITE/mysql/sock)/test/root/pass; select name from them where id='ph10';" opts 'NULL' +LOG: MAIN + Exim configuration error in line 89 of TESTSUITE/test-config: + WARNING: obsolete syntax used for lookup MYSQL new connection: host=localhost port=0 socket=TESTSUITE/mysql/sock database=test user=root creating new cache entry - lookup yielded: Philip Hazel + lookup yielded: Philip░Hazel search_open: mysql "NULL" cached open search_find: file="NULL" @@ -195,7 +211,7 @@ dropping to exim gid; retaining priv uid MySQL query: "SELECT name FROM them WHERE id IN ('ph10', 'aaaa');" opts 'NULL' MYSQL using cached connection for 127.0.0.1:PORT_N/test/root creating new cache entry - lookup yielded: Philip Hazel + lookup yielded: Philip░Hazel↩ Aristotle search_open: mysql "NULL" cached open @@ -208,8 +224,8 @@ dropping to exim gid; retaining priv uid MySQL query: "SELECT * FROM them WHERE id IN ('ph10', 'aaaa');" opts 'NULL' MYSQL using cached connection for 127.0.0.1:PORT_N/test/root creating new cache entry - lookup yielded: name="Philip Hazel" id=ph10 - name=Aristotle id=aaaa + lookup yielded: name="Philip░Hazel"░id=ph10░↩ + name=Aristotle░id=aaaa░ search_open: mysql "NULL" cached open search_find: file="NULL" @@ -228,241 +244,492 @@ close MYSQL connection: localhost(TESTSUITE/mysql/sock)/test/root 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 +01:01:01 p1235 environment after trimming: +01:01:01 p1235 PATH= +01:01:01 p1235 adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys +01:01:01 p1235 configuration file is TESTSUITE/test-config +01:01:01 p1235 admin user +01:01:01 p1235 changed uid/gid: privilege not needed +01:01:01 p1235 uid=EXIM_UID gid=EXIM_GID pid=p1235 +01:01:01 p1235 seeking password data for user "CALLER": cache not available +01:01:01 p1235 getpwnam() succeeded uid=CALLER_UID gid=CALLER_GID +01:01:01 p1235 try option gecos_pattern +01:01:01 p1235 try option gecos_name +01:01:01 p1235 try option unknown_login +01:01:01 p1235 originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME +01:01:01 p1235 sender address = CALLER@myhost.test.ex +01:01:01 p1235 try option smtp_active_hostname +01:01:01 p1235 sender_fullhost = [10.0.0.0] +01:01:01 p1235 sender_rcvhost = [10.0.0.0] +01:01:01 p1235 host in hosts_connection_nolog? no (option unset) +01:01:01 p1235 LOG: smtp_connection MAIN +01:01:01 p1235 SMTP connection from [10.0.0.0] +01:01:01 p1235 try option message_size_limit +01:01:01 p1235 host in host_lookup? no (option unset) +01:01:01 p1235 set_process_info: pppp handling incoming connection from [10.0.0.0] +01:01:01 p1235 host in host_reject_connection? no (option unset) +01:01:01 p1235 host in sender_unqualified_hosts? no (option unset) +01:01:01 p1235 host in recipient_unqualified_hosts? no (option unset) +01:01:01 p1235 host in helo_verify_hosts? no (option unset) +01:01:01 p1235 host in helo_try_verify_hosts? no (option unset) +01:01:01 p1235 host in helo_accept_junk_hosts? no (option unset) +01:01:01 p1235 try option acl_smtp_connect +01:01:01 p1235 try option smtp_banner +01:01:01 p1235 ╭considering: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full +01:01:01 p1235 ├──────value: myhost.test.ex +01:01:01 p1235 ├considering: ░ESMTP░Exim░$version_number░$tod_full +01:01:01 p1235 ├───────text: ░ESMTP░Exim░ +01:01:01 p1235 ├considering: $version_number░$tod_full +01:01:01 p1235 ├──────value: x.yz +01:01:01 p1235 ├considering: ░$tod_full +01:01:01 p1235 ├───────text: ░ +01:01:01 p1235 ├considering: $tod_full +01:01:01 p1235 ├──────value: Tue,░2░Mar░1999░09:44:33░+0000 +01:01:01 p1235 ├───expanded: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full +01:01:01 p1235 ╰─────result: myhost.test.ex░ESMTP░Exim░x.yz░Tue,░2░Mar░1999░09:44:33░+0000 +01:01:01 p1235 host in pipelining_connect_advertise_hosts? +01:01:01 p1235 list element: +01:01:01 p1235 SMTP>> 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 +01:01:01 p1235 smtp_setup_msg entered +01:01:01 p1235 SMTP<< helo test +01:01:01 p1235 test in helo_lookup_domains? +01:01:01 p1235 list element: @ +01:01:01 p1235 list element: @[] +01:01:01 p1235 test in helo_lookup_domains? no (end of list) +01:01:01 p1235 sender_fullhost = (test) [10.0.0.0] +01:01:01 p1235 sender_rcvhost = [10.0.0.0] (helo=test) +01:01:01 p1235 set_process_info: pppp handling incoming connection from (test) [10.0.0.0] +01:01:01 p1235 spf_conn_init: test 10.0.0.0 +01:01:01 p1235 SPF_dns_exim_new +01:01:01 p1235 try option acl_smtp_helo +01:01:01 p1235 SMTP>> 250 myhost.test.ex Hello test [10.0.0.0] +01:01:01 p1235 SMTP<< mail from: +01:01:01 p1235 spool directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 msg_size = 0 +01:01:01 p1235 log directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 +01:01:01 p1235 try option acl_smtp_mail +01:01:01 p1235 SMTP>> 250 OK +01:01:01 p1235 SMTP<< rcpt to: +01:01:01 p1235 try option acl_smtp_rcpt +01:01:01 p1235 using ACL "check_recipient" +01:01:01 p1235 processing "warn" (TESTSUITE/test-config 26) +01:01:01 p1235 ╭considering: ok:░░░░${lookup░mysql░░░░░░░░░░░░░░░░░░░░{select░name░from░them░where░id░=░'${quote_mysql:$local_part}'}} +01:01:01 p1235 ├───────text: ok:░░░░ +01:01:01 p1235 ├considering: ${lookup░mysql░░░░░░░░░░░░░░░░░░░░{select░name░from░them░where░id░=░'${quote_mysql:$local_part}'}} +01:01:01 p1235 ╭considering: select░name░from░them░where░id░=░'${quote_mysql:$local_part}'}} +01:01:01 p1235 ├───────text: select░name░from░them░where░id░=░' +01:01:01 p1235 ├considering: ${quote_mysql:$local_part}'}} +01:01:01 p1235 ╭considering: $local_part}'}} +01:01:01 p1235 ├──────value: c +01:01:01 p1235 ╰──(tainted) +01:01:01 p1235 ├considering: }'}} +01:01:01 p1235 ├───expanded: $local_part +01:01:01 p1235 ╰─────result: c +01:01:01 p1235 ╰──(tainted) +01:01:01 p1235 ├─────op-res: c +01:01:01 p1235 ╰──(tainted, quoted:mysql) +01:01:01 p1235 ├considering: '}} +01:01:01 p1235 ├───────text: ' +01:01:01 p1235 ├considering: }} +01:01:01 p1235 ├───expanded: select░name░from░them░where░id░=░'${quote_mysql:$local_part}' +01:01:01 p1235 ╰─────result: select░name░from░them░where░id░=░'c' +01:01:01 p1235 ╰──(tainted, quoted:mysql) +01:01:01 p1235 search_open: mysql "NULL" +01:01:01 p1235 search_find: file="NULL" +01:01:01 p1235 key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts=NULL +01:01:01 p1235 LRU list: +01:01:01 p1235 internal_search_find: file="NULL" +01:01:01 p1235 type=mysql key="select name from them where id = 'c'" opts=NULL +01:01:01 p1235 database lookup required for select name from them where id = 'c' +01:01:01 p1235 (tainted, quoted:mysql) +01:01:01 p1235 MySQL query: "select name from them where id = 'c'" opts 'NULL' +01:01:01 p1235 MYSQL new connection: host=127.0.0.1 port=PORT_N socket=NULL database=test user=root +01:01:01 p1235 MYSQL: no data found +01:01:01 p1235 creating new cache entry +01:01:01 p1235 lookup failed +01:01:01 p1235 ├───item-res: +01:01:01 p1235 ├───expanded: ok:░░░░${lookup░mysql░░░░░░░░░░░░░░░░░░░░{select░name░from░them░where░id░=░'${quote_mysql:$local_part}'}} +01:01:01 p1235 ╰─────result: ok:░░░░ +01:01:01 p1235 check set acl_m0 = ok: ${lookup mysql {select name from them where id = '${quote_mysql:$local_part}'}} +01:01:01 p1235 = ok: +01:01:01 p1235 ╭considering: FAIL1:░${lookup░mysql,no_rd░░░░░░░░░░░░░░{select░name░from░them░where░id░=░'$local_part'}} +01:01:01 p1235 ├───────text: FAIL1:░ +01:01:01 p1235 ├considering: ${lookup░mysql,no_rd░░░░░░░░░░░░░░{select░name░from░them░where░id░=░'$local_part'}} +01:01:01 p1235 ╭considering: select░name░from░them░where░id░=░'$local_part'}} +01:01:01 p1235 ├───────text: select░name░from░them░where░id░=░' +01:01:01 p1235 ├considering: $local_part'}} +01:01:01 p1235 ├──────value: c +01:01:01 p1235 ╰──(tainted) +01:01:01 p1235 ├considering: '}} +01:01:01 p1235 ├───────text: ' +01:01:01 p1235 ├considering: }} +01:01:01 p1235 ├───expanded: select░name░from░them░where░id░=░'$local_part' +01:01:01 p1235 ╰─────result: select░name░from░them░where░id░=░'c' +01:01:01 p1235 ╰──(tainted) +01:01:01 p1235 search_open: mysql "NULL" +01:01:01 p1235 cached open +01:01:01 p1235 search_find: file="NULL" +01:01:01 p1235 key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts="no_rd" +01:01:01 p1235 LRU list: +01:01:01 p1235 internal_search_find: file="NULL" +01:01:01 p1235 type=mysql key="select name from them where id = 'c'" opts="no_rd" +01:01:01 p1235 cached data found but wrong opts; database lookup required for select name from them where id = 'c' +01:01:01 p1235 (tainted) +01:01:01 p1235 LOG: MAIN PANIC +01:01:01 p1235 tainted search query is not properly quoted (ACL warn, TESTSUITE/test-config 26): select name from them where id = 'c' +01:01:01 p1235 search_type NN (mysql) quoting -1 (none) +01:01:01 p1235 MySQL query: "select name from them where id = 'c'" opts 'no_rd' +01:01:01 p1235 MYSQL using cached connection for 127.0.0.1:PORT_N/test/root +01:01:01 p1235 MYSQL: no data found +01:01:01 p1235 replacing old cache entry +01:01:01 p1235 lookup failed +01:01:01 p1235 ├───item-res: +01:01:01 p1235 ├───expanded: FAIL1:░${lookup░mysql,no_rd░░░░░░░░░░░░░░{select░name░from░them░where░id░=░'$local_part'}} +01:01:01 p1235 ╰─────result: FAIL1:░ +01:01:01 p1235 check set acl_m0 = FAIL1: ${lookup mysql,no_rd {select name from them where id = '$local_part'}} +01:01:01 p1235 = FAIL1: +01:01:01 p1235 warn: condition test succeeded in ACL "check_recipient" +01:01:01 p1235 processing "warn" (TESTSUITE/test-config 31) +01:01:01 p1235 ╭considering: ok:░░░░${lookup░mysql,servers=127.0.0.1::PORT_N/test/root/pass░░░░░░{select░name░from░them░where░id░=░'${quote_mysql:$local_part}'}} +01:01:01 p1235 ├───────text: ok:░░░░ +01:01:01 p1235 ├considering: ${lookup░mysql,servers=127.0.0.1::PORT_N/test/root/pass░░░░░░{select░name░from░them░where░id░=░'${quote_mysql:$local_part}'}} +01:01:01 p1235 ╭considering: select░name░from░them░where░id░=░'${quote_mysql:$local_part}'}} +01:01:01 p1235 ├───────text: select░name░from░them░where░id░=░' +01:01:01 p1235 ├considering: ${quote_mysql:$local_part}'}} +01:01:01 p1235 ╭considering: $local_part}'}} +01:01:01 p1235 ├──────value: c +01:01:01 p1235 ╰──(tainted) +01:01:01 p1235 ├considering: }'}} +01:01:01 p1235 ├───expanded: $local_part +01:01:01 p1235 ╰─────result: c +01:01:01 p1235 ╰──(tainted) +01:01:01 p1235 ├─────op-res: c +01:01:01 p1235 ╰──(tainted, quoted:mysql) +01:01:01 p1235 ├considering: '}} +01:01:01 p1235 ├───────text: ' +01:01:01 p1235 ├considering: }} +01:01:01 p1235 ├───expanded: select░name░from░them░where░id░=░'${quote_mysql:$local_part}' +01:01:01 p1235 ╰─────result: select░name░from░them░where░id░=░'c' +01:01:01 p1235 ╰──(tainted, quoted:mysql) +01:01:01 p1235 search_open: mysql "NULL" +01:01:01 p1235 cached open +01:01:01 p1235 search_find: file="NULL" +01:01:01 p1235 key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts="servers=127.0.0.1::PORT_N/test/root/pass" +01:01:01 p1235 LRU list: +01:01:01 p1235 internal_search_find: file="NULL" +01:01:01 p1235 type=mysql key="select name from them where id = 'c'" opts="servers=127.0.0.1::PORT_N/test/root/pass" +01:01:01 p1235 cached data found but wrong opts; database lookup required for select name from them where id = 'c' +01:01:01 p1235 (tainted, quoted:mysql) +01:01:01 p1235 MySQL query: "select name from them where id = 'c'" opts 'servers=127.0.0.1::PORT_N/test/root/pass' +01:01:01 p1235 MYSQL using cached connection for 127.0.0.1:PORT_N/test/root +01:01:01 p1235 MYSQL: no data found +01:01:01 p1235 replacing old cache entry +01:01:01 p1235 lookup failed +01:01:01 p1235 ├───item-res: +01:01:01 p1235 ├───expanded: ok:░░░░${lookup░mysql,servers=127.0.0.1::PORT_N/test/root/pass░░░░░░{select░name░from░them░where░id░=░'${quote_mysql:$local_part}'}} +01:01:01 p1235 ╰─────result: ok:░░░░ +01:01:01 p1235 check set acl_m0 = ok: ${lookup mysql,servers=127.0.0.1::PORT_N/test/root/pass {select name from them where id = '${quote_mysql:$local_part}'}} +01:01:01 p1235 = ok: +01:01:01 p1235 ╭considering: ok:░░░░${lookup░mysql,servers=127.0.0.1::PORT_N░░░░{select░name░from░them░where░id░=░'${quote_mysql:$local_part}'}} +01:01:01 p1235 ├───────text: ok:░░░░ +01:01:01 p1235 ├considering: ${lookup░mysql,servers=127.0.0.1::PORT_N░░░░{select░name░from░them░where░id░=░'${quote_mysql:$local_part}'}} +01:01:01 p1235 ╭considering: select░name░from░them░where░id░=░'${quote_mysql:$local_part}'}} +01:01:01 p1235 ├───────text: select░name░from░them░where░id░=░' +01:01:01 p1235 ├considering: ${quote_mysql:$local_part}'}} +01:01:01 p1235 ╭considering: $local_part}'}} +01:01:01 p1235 ├──────value: c +01:01:01 p1235 ╰──(tainted) +01:01:01 p1235 ├considering: }'}} +01:01:01 p1235 ├───expanded: $local_part +01:01:01 p1235 ╰─────result: c +01:01:01 p1235 ╰──(tainted) +01:01:01 p1235 ├─────op-res: c +01:01:01 p1235 ╰──(tainted, quoted:mysql) +01:01:01 p1235 ├considering: '}} +01:01:01 p1235 ├───────text: ' +01:01:01 p1235 ├considering: }} +01:01:01 p1235 ├───expanded: select░name░from░them░where░id░=░'${quote_mysql:$local_part}' +01:01:01 p1235 ╰─────result: select░name░from░them░where░id░=░'c' +01:01:01 p1235 ╰──(tainted, quoted:mysql) +01:01:01 p1235 search_open: mysql "NULL" +01:01:01 p1235 cached open +01:01:01 p1235 search_find: file="NULL" +01:01:01 p1235 key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts="servers=127.0.0.1::PORT_N" +01:01:01 p1235 LRU list: +01:01:01 p1235 internal_search_find: file="NULL" +01:01:01 p1235 type=mysql key="select name from them where id = 'c'" opts="servers=127.0.0.1::PORT_N" +01:01:01 p1235 cached data found but wrong opts; database lookup required for select name from them where id = 'c' +01:01:01 p1235 (tainted, quoted:mysql) +01:01:01 p1235 MySQL query: "select name from them where id = 'c'" opts 'servers=127.0.0.1::PORT_N' +01:01:01 p1235 MYSQL using cached connection for 127.0.0.1:PORT_N/test/root +01:01:01 p1235 MYSQL: no data found +01:01:01 p1235 replacing old cache entry +01:01:01 p1235 lookup failed +01:01:01 p1235 ├───item-res: +01:01:01 p1235 ├───expanded: ok:░░░░${lookup░mysql,servers=127.0.0.1::PORT_N░░░░{select░name░from░them░where░id░=░'${quote_mysql:$local_part}'}} +01:01:01 p1235 ╰─────result: ok:░░░░ +01:01:01 p1235 check set acl_m0 = ok: ${lookup mysql,servers=127.0.0.1::PORT_N {select name from them where id = '${quote_mysql:$local_part}'}} +01:01:01 p1235 = ok: +01:01:01 p1235 ╭considering: FAIL2:░${lookup░mysql░░░░░{servers=127.0.0.1::PORT_N/test/root/pass;░select░name░from░them░where░id░=░'${quote_mysql:$local_part}'}} +01:01:01 p1235 ├───────text: FAIL2:░ +01:01:01 p1235 ├considering: ${lookup░mysql░░░░░{servers=127.0.0.1::PORT_N/test/root/pass;░select░name░from░them░where░id░=░'${quote_mysql:$local_part}'}} +01:01:01 p1235 ╭considering: servers=127.0.0.1::PORT_N/test/root/pass;░select░name░from░them░where░id░=░'${quote_mysql:$local_part}'}} +01:01:01 p1235 ├───────text: servers=127.0.0.1::PORT_N/test/root/pass;░select░name░from░them░where░id░=░' +01:01:01 p1235 ├considering: ${quote_mysql:$local_part}'}} +01:01:01 p1235 ╭considering: $local_part}'}} +01:01:01 p1235 ├──────value: c +01:01:01 p1235 ╰──(tainted) +01:01:01 p1235 ├considering: }'}} +01:01:01 p1235 ├───expanded: $local_part +01:01:01 p1235 ╰─────result: c +01:01:01 p1235 ╰──(tainted) +01:01:01 p1235 ├─────op-res: c +01:01:01 p1235 ╰──(tainted, quoted:mysql) +01:01:01 p1235 ├considering: '}} +01:01:01 p1235 ├───────text: ' +01:01:01 p1235 ├considering: }} +01:01:01 p1235 ├───expanded: servers=127.0.0.1::PORT_N/test/root/pass;░select░name░from░them░where░id░=░'${quote_mysql:$local_part}' +01:01:01 p1235 ╰─────result: servers=127.0.0.1::PORT_N/test/root/pass;░select░name░from░them░where░id░=░'c' +01:01:01 p1235 ╰──(tainted, quoted:mysql) +01:01:01 p1235 search_open: mysql "NULL" +01:01:01 p1235 cached open +01:01:01 p1235 search_find: file="NULL" +01:01:01 p1235 key="servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts=NULL +01:01:01 p1235 LRU list: +01:01:01 p1235 internal_search_find: file="NULL" +01:01:01 p1235 type=mysql key="servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c'" opts=NULL +01:01:01 p1235 database lookup required for servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c' +01:01:01 p1235 (tainted, quoted:mysql) +01:01:01 p1235 MySQL query: "servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c'" opts 'NULL' +01:01:01 p1235 LOG: MAIN +01:01:01 p1235 Exim configuration error in line 89 of TESTSUITE/test-config: +01:01:01 p1235 WARNING: obsolete syntax used for lookup +01:01:01 p1235 lookup deferred: MySQL server "127.0.0.1:PORT_N/test" is tainted +01:01:01 p1235 ├failed to expand: FAIL2: ${lookup mysql {servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = '${quote_mysql:$local_part}'}} +01:01:01 p1235 ╰───error message: lookup of "servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c'" gave DEFER: MySQL server "127.0.0.1:1223/test" is tainted +01:01:01 p1235 warn: condition test deferred in ACL "check_recipient" +01:01:01 p1235 LOG: MAIN +01:01:01 p1235 H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: MySQL server "127.0.0.1:PORT_N/test" is tainted +01:01:01 p1235 processing "warn" (TESTSUITE/test-config 39) +01:01:01 p1235 ╭considering: FAIL3:░${lookup░mysql░░░░░{servers=127.0.0.1::PORT_N;░select░name░from░them░where░id░=░'$local_part'}} +01:01:01 p1235 ├───────text: FAIL3:░ +01:01:01 p1235 ├considering: ${lookup░mysql░░░░░{servers=127.0.0.1::PORT_N;░select░name░from░them░where░id░=░'$local_part'}} +01:01:01 p1235 ╭considering: servers=127.0.0.1::PORT_N;░select░name░from░them░where░id░=░'$local_part'}} +01:01:01 p1235 ├───────text: servers=127.0.0.1::PORT_N;░select░name░from░them░where░id░=░' +01:01:01 p1235 ├considering: $local_part'}} +01:01:01 p1235 ├──────value: c +01:01:01 p1235 ╰──(tainted) +01:01:01 p1235 ├considering: '}} +01:01:01 p1235 ├───────text: ' +01:01:01 p1235 ├considering: }} +01:01:01 p1235 ├───expanded: servers=127.0.0.1::PORT_N;░select░name░from░them░where░id░=░'$local_part' +01:01:01 p1235 ╰─────result: servers=127.0.0.1::PORT_N;░select░name░from░them░where░id░=░'c' +01:01:01 p1235 ╰──(tainted) +01:01:01 p1235 search_open: mysql "NULL" +01:01:01 p1235 cached open +01:01:01 p1235 search_find: file="NULL" +01:01:01 p1235 key="servers=127.0.0.1::PORT_N; select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts=NULL +01:01:01 p1235 LRU list: +01:01:01 p1235 internal_search_find: file="NULL" +01:01:01 p1235 type=mysql key="servers=127.0.0.1::PORT_N; select name from them where id = 'c'" opts=NULL +01:01:01 p1235 database lookup required for servers=127.0.0.1::PORT_N; select name from them where id = 'c' +01:01:01 p1235 (tainted) +01:01:01 p1235 LOG: MAIN PANIC +01:01:01 p1235 tainted search query is not properly quoted (ACL warn, TESTSUITE/test-config 39): select name from them where id = 'c' +01:01:01 p1235 search_type NN (mysql) quoting -1 (none) +01:01:01 p1235 MySQL query: "servers=127.0.0.1::PORT_N; select name from them where id = 'c'" opts 'NULL' +01:01:01 p1235 LOG: MAIN +01:01:01 p1235 Exim configuration error in line 89 of TESTSUITE/test-config: +01:01:01 p1235 WARNING: obsolete syntax used for lookup +01:01:01 p1235 MYSQL using cached connection for 127.0.0.1:PORT_N/test/root +01:01:01 p1235 MYSQL: no data found +01:01:01 p1235 creating new cache entry +01:01:01 p1235 lookup failed +01:01:01 p1235 ├───item-res: +01:01:01 p1235 ├───expanded: FAIL3:░${lookup░mysql░░░░░{servers=127.0.0.1::PORT_N;░select░name░from░them░where░id░=░'$local_part'}} +01:01:01 p1235 ╰─────result: FAIL3:░ +01:01:01 p1235 check set acl_m0 = FAIL3: ${lookup mysql {servers=127.0.0.1::PORT_N; select name from them where id = '$local_part'}} +01:01:01 p1235 = FAIL3: +01:01:01 p1235 warn: condition test succeeded in ACL "check_recipient" +01:01:01 p1235 processing "warn" (TESTSUITE/test-config 42) +01:01:01 p1235 check set acl_m0 = ok: hostlist +01:01:01 p1235 check hosts = net-mysql;select * from them where id='${quote_mysql:$local_part}' +01:01:01 p1235 ╭considering: net-mysql;select░*░from░them░where░id='${quote_mysql:$local_part}' +01:01:01 p1235 ├───────text: net-mysql;select░*░from░them░where░id=' +01:01:01 p1235 ├considering: ${quote_mysql:$local_part}' +01:01:01 p1235 ╭considering: $local_part}' +01:01:01 p1235 ├──────value: c +01:01:01 p1235 ╰──(tainted) +01:01:01 p1235 ├considering: }' +01:01:01 p1235 ├───expanded: $local_part +01:01:01 p1235 ╰─────result: c +01:01:01 p1235 ╰──(tainted) +01:01:01 p1235 ├─────op-res: c +01:01:01 p1235 ╰──(tainted, quoted:mysql) +01:01:01 p1235 ├considering: ' +01:01:01 p1235 ├───────text: ' +01:01:01 p1235 ├───expanded: net-mysql;select░*░from░them░where░id='${quote_mysql:$local_part}' +01:01:01 p1235 ╰─────result: net-mysql;select░*░from░them░where░id='c' +01:01:01 p1235 ╰──(tainted, quoted:mysql) +01:01:01 p1235 host in "net-mysql;select * from them where id='c'"? +01:01:01 p1235 list element: net-mysql;select░*░from░them░where░id='c' +01:01:01 p1235 search_open: mysql "NULL" +01:01:01 p1235 cached open +01:01:01 p1235 search_find: file="NULL" +01:01:01 p1235 key="select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts=NULL +01:01:01 p1235 LRU list: +01:01:01 p1235 internal_search_find: file="NULL" +01:01:01 p1235 type=mysql key="select * from them where id='c'" opts=NULL +01:01:01 p1235 database lookup required for select * from them where id='c' +01:01:01 p1235 (tainted, quoted:mysql) +01:01:01 p1235 MySQL query: "select * from them where id='c'" opts 'NULL' +01:01:01 p1235 MYSQL using cached connection for 127.0.0.1:PORT_N/test/root +01:01:01 p1235 MYSQL: no data found +01:01:01 p1235 creating new cache entry +01:01:01 p1235 lookup failed +01:01:01 p1235 host in "net-mysql;select * from them where id='c'"? no (end of list) +01:01:01 p1235 warn: condition test failed in ACL "check_recipient" +01:01:01 p1235 processing "warn" (TESTSUITE/test-config 45) +01:01:01 p1235 check set acl_m0 = FAIL4: hostlist +01:01:01 p1235 check hosts = <& net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='${quote_mysql:$local_part}' +01:01:01 p1235 ╭considering: <&░net-mysql;servers=127.0.0.1::PORT_N/test/root/pass;░select░*░from░them░where░id='${quote_mysql:$local_part}' +01:01:01 p1235 ├───────text: <&░net-mysql;servers=127.0.0.1::PORT_N/test/root/pass;░select░*░from░them░where░id=' +01:01:01 p1235 ├considering: ${quote_mysql:$local_part}' +01:01:01 p1235 ╭considering: $local_part}' +01:01:01 p1235 ├──────value: c +01:01:01 p1235 ╰──(tainted) +01:01:01 p1235 ├considering: }' +01:01:01 p1235 ├───expanded: $local_part +01:01:01 p1235 ╰─────result: c +01:01:01 p1235 ╰──(tainted) +01:01:01 p1235 ├─────op-res: c +01:01:01 p1235 ╰──(tainted, quoted:mysql) +01:01:01 p1235 ├considering: ' +01:01:01 p1235 ├───────text: ' +01:01:01 p1235 ├───expanded: <&░net-mysql;servers=127.0.0.1::PORT_N/test/root/pass;░select░*░from░them░where░id='${quote_mysql:$local_part}' +01:01:01 p1235 ╰─────result: <&░net-mysql;servers=127.0.0.1::PORT_N/test/root/pass;░select░*░from░them░where░id='c' +01:01:01 p1235 ╰──(tainted, quoted:mysql) +01:01:01 p1235 host in "<& net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'"? +01:01:01 p1235 list element: net-mysql;servers=127.0.0.1::PORT_N/test/root/pass;░select░*░from░them░where░id='c' +01:01:01 p1235 search_open: mysql "NULL" +01:01:01 p1235 cached open +01:01:01 p1235 search_find: file="NULL" +01:01:01 p1235 key="servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts=NULL +01:01:01 p1235 LRU list: +01:01:01 p1235 internal_search_find: file="NULL" +01:01:01 p1235 type=mysql key="servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'" opts=NULL +01:01:01 p1235 database lookup required for servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c' +01:01:01 p1235 (tainted, quoted:mysql) +01:01:01 p1235 MySQL query: "servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'" opts 'NULL' +01:01:01 p1235 LOG: MAIN +01:01:01 p1235 Exim configuration error in line 89 of TESTSUITE/test-config: +01:01:01 p1235 WARNING: obsolete syntax used for lookup +01:01:01 p1235 lookup deferred: MySQL server "127.0.0.1:PORT_N/test" is tainted +01:01:01 p1235 host in "<& net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'"? list match deferred for net-mysql;servers=127.0.0.1::1223/test/root/pass; select * from them where id='c' +01:01:01 p1235 warn: condition test deferred in ACL "check_recipient" +01:01:01 p1235 LOG: MAIN +01:01:01 p1235 H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: MySQL server "127.0.0.1:PORT_N/test" is tainted +01:01:01 p1235 processing "warn" (TESTSUITE/test-config 50) +01:01:01 p1235 check set acl_m0 = FAIL5: hostlist +01:01:01 p1235 check hosts = <& net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='${quote_mysql:$local_part}' +01:01:01 p1235 ╭considering: <&░net-mysql,servers=127.0.0.1::PORT_N/test/root/pass;░select░*░from░them░where░id='${quote_mysql:$local_part}' +01:01:01 p1235 ├───────text: <&░net-mysql,servers=127.0.0.1::PORT_N/test/root/pass;░select░*░from░them░where░id=' +01:01:01 p1235 ├considering: ${quote_mysql:$local_part}' +01:01:01 p1235 ╭considering: $local_part}' +01:01:01 p1235 ├──────value: c +01:01:01 p1235 ╰──(tainted) +01:01:01 p1235 ├considering: }' +01:01:01 p1235 ├───expanded: $local_part +01:01:01 p1235 ╰─────result: c +01:01:01 p1235 ╰──(tainted) +01:01:01 p1235 ├─────op-res: c +01:01:01 p1235 ╰──(tainted, quoted:mysql) +01:01:01 p1235 ├considering: ' +01:01:01 p1235 ├───────text: ' +01:01:01 p1235 ├───expanded: <&░net-mysql,servers=127.0.0.1::PORT_N/test/root/pass;░select░*░from░them░where░id='${quote_mysql:$local_part}' +01:01:01 p1235 ╰─────result: <&░net-mysql,servers=127.0.0.1::PORT_N/test/root/pass;░select░*░from░them░where░id='c' +01:01:01 p1235 ╰──(tainted, quoted:mysql) +01:01:01 p1235 host in "<& net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'"? +01:01:01 p1235 list element: net-mysql,servers=127.0.0.1::PORT_N/test/root/pass;░select░*░from░them░where░id='c' +01:01:01 p1235 search_open: mysql "NULL" +01:01:01 p1235 cached open +01:01:01 p1235 search_find: file="NULL" +01:01:01 p1235 key=" select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts="servers=127.0.0.1::PORT_N/test/root/pass" +01:01:01 p1235 LRU list: +01:01:01 p1235 internal_search_find: file="NULL" +01:01:01 p1235 type=mysql key=" select * from them where id='c'" opts="servers=127.0.0.1::PORT_N/test/root/pass" +01:01:01 p1235 database lookup required for select * from them where id='c' +01:01:01 p1235 (tainted, quoted:mysql) +01:01:01 p1235 MySQL query: " select * from them where id='c'" opts 'servers=127.0.0.1::PORT_N/test/root/pass' +01:01:01 p1235 lookup deferred: MySQL server "127.0.0.1:PORT_N/test" is tainted +01:01:01 p1235 host in "<& net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'"? list match deferred for net-mysql,servers=127.0.0.1::1223/test/root/pass; select * from them where id='c' +01:01:01 p1235 warn: condition test deferred in ACL "check_recipient" +01:01:01 p1235 LOG: MAIN +01:01:01 p1235 H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: MySQL server "127.0.0.1:PORT_N/test" is tainted +01:01:01 p1235 processing "accept" (TESTSUITE/test-config 53) +01:01:01 p1235 check domains = +local_domains +01:01:01 p1235 d in "+local_domains"? +01:01:01 p1235 list element: +local_domains +01:01:01 p1235 start sublist local_domains +01:01:01 p1235 d in "@"? +01:01:01 p1235 ╎list element: @ +01:01:01 p1235 d in "@"? no (end of list) +01:01:01 p1235 end sublist local_domains +01:01:01 p1235 d in "+local_domains"? no (end of list) +01:01:01 p1235 accept: condition test failed in ACL "check_recipient" +01:01:01 p1235 processing "accept" (TESTSUITE/test-config 56) +01:01:01 p1235 check hosts = +relay_hosts +01:01:01 p1235 host in "+relay_hosts"? +01:01:01 p1235 list element: +relay_hosts +01:01:01 p1235 start sublist relay_hosts +01:01:01 p1235 ╎╭considering: net-mysql;select░*░from░them░where░id='$sender_host_address' +01:01:01 p1235 ╎├───────text: net-mysql;select░*░from░them░where░id=' +01:01:01 p1235 ╎├considering: $sender_host_address' +01:01:01 p1235 ╎├──────value: 10.0.0.0 +01:01:01 p1235 ╎├considering: ' +01:01:01 p1235 ╎├───────text: ' +01:01:01 p1235 ╎├───expanded: net-mysql;select░*░from░them░where░id='$sender_host_address' +01:01:01 p1235 ╎╰─────result: net-mysql;select░*░from░them░where░id='10.0.0.0' +01:01:01 p1235 host in "net-mysql;select * from them where id='10.0.0.0'"? +01:01:01 p1235 ╎list element: net-mysql;select░*░from░them░where░id='10.0.0.0' +01:01:01 p1235 ╎search_open: mysql "NULL" +01:01:01 p1235 ╎ cached open +01:01:01 p1235 ╎search_find: file="NULL" +01:01:01 p1235 ╎ key="select * from them where id='10.0.0.0'" partial=-1 affix=NULL starflags=0 opts=NULL +01:01:01 p1235 ╎LRU list: +01:01:01 p1235 ╎internal_search_find: file="NULL" +01:01:01 p1235 ╎ type=mysql key="select * from them where id='10.0.0.0'" opts=NULL +01:01:01 p1235 ╎database lookup required for select * from them where id='10.0.0.0' +01:01:01 p1235 ╎MySQL query: "select * from them where id='10.0.0.0'" opts 'NULL' +01:01:01 p1235 ╎MYSQL using cached connection for 127.0.0.1:PORT_N/test/root +01:01:01 p1235 ╎MYSQL: no data found +01:01:01 p1235 ╎creating new cache entry +01:01:01 p1235 ╎lookup failed +01:01:01 p1235 host in "net-mysql;select * from them where id='10.0.0.0'"? no (end of list) +01:01:01 p1235 end sublist relay_hosts +01:01:01 p1235 host in "+relay_hosts"? no (end of list) +01:01:01 p1235 accept: condition test failed in ACL "check_recipient" +01:01:01 p1235 processing "deny" (TESTSUITE/test-config 57) +01:01:01 p1235 message: relay not permitted +01:01:01 p1235 deny: condition test succeeded in ACL "check_recipient" +01:01:01 p1235 end of ACL "check_recipient": DENY +01:01:01 p1235 SMTP>> 550 relay not permitted +01:01:01 p1235 LOG: MAIN REJECT +01:01:01 p1235 H=(test) [10.0.0.0] F= rejected RCPT : relay not permitted +01:01:01 p1235 SMTP<< quit +01:01:01 p1235 try option acl_smtp_quit +01:01:01 p1235 SMTP>> 221 myhost.test.ex closing connection +01:01:01 p1235 LOG: smtp_connection MAIN +01:01:01 p1235 SMTP connection from (test) [10.0.0.0] D=qqs closed by QUIT +01:01:01 p1235 search_tidyup called +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 .... -changed uid/gid: forcing real = effective - uid=uuuu gid=CALLER_GID pid=p1235 -configuration file is TESTSUITE/test-config -admin user -changed uid/gid: privilege not needed - uid=EXIM_UID gid=EXIM_GID pid=p1235 -seeking password data for user "CALLER": cache not available -getpwnam() succeeded uid=CALLER_UID gid=CALLER_GID -originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME -sender address = CALLER@myhost.test.ex -sender_fullhost = [10.0.0.0] -sender_rcvhost = [10.0.0.0] -host in hosts_connection_nolog? no (option unset) -LOG: smtp_connection MAIN - SMTP connection from [10.0.0.0] -host in host_lookup? no (option unset) -set_process_info: pppp handling incoming connection from [10.0.0.0] -host in host_reject_connection? no (option unset) -host in sender_unqualified_hosts? no (option unset) -host in recipient_unqualified_hosts? no (option unset) -host in helo_verify_hosts? no (option unset) -host in helo_try_verify_hosts? no (option unset) -host in helo_accept_junk_hosts? no (option unset) -SMTP>> 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 -smtp_setup_msg entered -SMTP<< helo test -test in helo_lookup_domains? - list element: @ - list element: @[] -test in helo_lookup_domains? no (end of list) -sender_fullhost = (test) [10.0.0.0] -sender_rcvhost = [10.0.0.0] (helo=test) -set_process_info: pppp handling incoming connection from (test) [10.0.0.0] -SMTP>> 250 myhost.test.ex Hello test [10.0.0.0] -SMTP<< mail from: -spool directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 msg_size = 0 -log directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 -SMTP>> 250 OK -SMTP<< rcpt to: -using ACL "check_recipient" -processing "warn" (TESTSUITE/test-config 26) - search_open: mysql "NULL" - search_find: file="NULL" - key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts=NULL - LRU list: - internal_search_find: file="NULL" - type=mysql key="select name from them where id = 'c'" opts=NULL - database lookup required for select name from them where id = 'c' - (tainted, quoted:mysql) - MySQL query: "select name from them where id = 'c'" opts 'NULL' - MYSQL new connection: host=127.0.0.1 port=PORT_N socket=NULL database=test user=root - MYSQL: no data found - creating new cache entry - lookup failed -check set acl_m0 = ok: ${lookup mysql {select name from them where id = '${quote_mysql:$local_part}'}} - = ok: - search_open: mysql "NULL" - cached open - search_find: file="NULL" - key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts="no_rd" - LRU list: - internal_search_find: file="NULL" - type=mysql key="select name from them where id = 'c'" opts="no_rd" - cached data found but wrong opts; database lookup required for select name from them where id = 'c' - (tainted) -LOG: MAIN PANIC - tainted search query is not properly quoted (ACL warn, TESTSUITE/test-config 26): select name from them where id = 'c' - search_type NN (mysql) quoting -1 (none) - MySQL query: "select name from them where id = 'c'" opts 'no_rd' - MYSQL using cached connection for 127.0.0.1:PORT_N/test/root - MYSQL: no data found - replacing old cache entry - lookup failed -check set acl_m0 = FAIL: ${lookup mysql,no_rd {select name from them where id = '$local_part'}} - = FAIL: -warn: condition test succeeded in ACL "check_recipient" -processing "warn" (TESTSUITE/test-config 31) - search_open: mysql "NULL" - cached open - search_find: file="NULL" - key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts="servers=127.0.0.1::PORT_N/test/root/pass" - LRU list: - internal_search_find: file="NULL" - type=mysql key="select name from them where id = 'c'" opts="servers=127.0.0.1::PORT_N/test/root/pass" - cached data found but wrong opts; database lookup required for select name from them where id = 'c' - (tainted, quoted:mysql) - MySQL query: "select name from them where id = 'c'" opts 'servers=127.0.0.1::PORT_N/test/root/pass' - MYSQL using cached connection for 127.0.0.1:PORT_N/test/root - MYSQL: no data found - replacing old cache entry - lookup failed -check set acl_m0 = ok: ${lookup mysql,servers=127.0.0.1::PORT_N/test/root/pass {select name from them where id = '${quote_mysql:$local_part}'}} - = ok: - search_open: mysql "NULL" - cached open - search_find: file="NULL" - key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts="servers=127.0.0.1::PORT_N" - LRU list: - internal_search_find: file="NULL" - type=mysql key="select name from them where id = 'c'" opts="servers=127.0.0.1::PORT_N" - cached data found but wrong opts; database lookup required for select name from them where id = 'c' - (tainted, quoted:mysql) - MySQL query: "select name from them where id = 'c'" opts 'servers=127.0.0.1::PORT_N' - MYSQL using cached connection for 127.0.0.1:PORT_N/test/root - MYSQL: no data found - replacing old cache entry - lookup failed -check set acl_m0 = ok: ${lookup mysql,servers=127.0.0.1::PORT_N {select name from them where id = '${quote_mysql:$local_part}'}} - = ok: - search_open: mysql "NULL" - cached open - search_find: file="NULL" - key="servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts=NULL - LRU list: - internal_search_find: file="NULL" - type=mysql key="servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c'" opts=NULL - database lookup required for servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c' - (tainted, quoted:mysql) - MySQL query: "servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c'" opts 'NULL' - lookup deferred: MySQL server "127.0.0.1:PORT_N/test/root/pass" is tainted -warn: condition test deferred in ACL "check_recipient" -LOG: MAIN - H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: MySQL server "127.0.0.1:PORT_N/test/root/pass" is tainted -processing "warn" (TESTSUITE/test-config 40) -check set acl_m0 = ok: hostlist -check hosts = net-mysql;select * from them where id='${quote_mysql:$local_part}' -host in "net-mysql;select * from them where id='c'"? - list element: net-mysql;select * from them where id='c' - search_open: mysql "NULL" - cached open - search_find: file="NULL" - key="select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts=NULL - LRU list: - internal_search_find: file="NULL" - type=mysql key="select * from them where id='c'" opts=NULL - database lookup required for select * from them where id='c' - (tainted, quoted:mysql) - MySQL query: "select * from them where id='c'" opts 'NULL' - MYSQL using cached connection for 127.0.0.1:PORT_N/test/root - MYSQL: no data found - creating new cache entry - lookup failed -host in "net-mysql;select * from them where id='c'"? no (end of list) -warn: condition test failed in ACL "check_recipient" -processing "warn" (TESTSUITE/test-config 43) -check set acl_m0 = FAIL: hostlist -check hosts = <& net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='${quote_mysql:$local_part}' -host in "<& net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'"? - list element: net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c' - search_open: mysql "NULL" - cached open - search_find: file="NULL" - key="servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts=NULL - LRU list: - internal_search_find: file="NULL" - type=mysql key="servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'" opts=NULL - database lookup required for servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c' - (tainted, quoted:mysql) - MySQL query: "servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'" opts 'NULL' - lookup deferred: MySQL server "127.0.0.1:PORT_N/test/root/pass" is tainted -host in "<& net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'"? list match deferred for net-mysql;servers=127.0.0.1::1223/test/root/pass; select * from them where id='c' -warn: condition test deferred in ACL "check_recipient" -LOG: MAIN - H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: MySQL server "127.0.0.1:PORT_N/test/root/pass" is tainted -processing "warn" (TESTSUITE/test-config 48) -check set acl_m0 = FAIL: hostlist -check hosts = <& net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='${quote_mysql:$local_part}' -host in "<& net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'"? - list element: net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c' - search_open: mysql "NULL" - cached open - search_find: file="NULL" - key=" select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts="servers=127.0.0.1::PORT_N/test/root/pass" - LRU list: - internal_search_find: file="NULL" - type=mysql key=" select * from them where id='c'" opts="servers=127.0.0.1::PORT_N/test/root/pass" - database lookup required for select * from them where id='c' - (tainted, quoted:mysql) - MySQL query: " select * from them where id='c'" opts 'servers=127.0.0.1::PORT_N/test/root/pass' - lookup deferred: MySQL server "127.0.0.1:PORT_N/test/root/pass" is tainted -host in "<& net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'"? list match deferred for net-mysql,servers=127.0.0.1::1223/test/root/pass; select * from them where id='c' -warn: condition test deferred in ACL "check_recipient" -LOG: MAIN - H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: MySQL server "127.0.0.1:PORT_N/test/root/pass" is tainted -processing "accept" (TESTSUITE/test-config 51) -check domains = +local_domains -d in "+local_domains"? - list element: +local_domains - start sublist local_domains - d in "@"? - ╎list element: @ - d in "@"? no (end of list) - end sublist local_domains -d in "+local_domains"? no (end of list) -accept: condition test failed in ACL "check_recipient" -processing "accept" (TESTSUITE/test-config 54) -check hosts = +relay_hosts -host in "+relay_hosts"? - list element: +relay_hosts - start sublist relay_hosts - host in "net-mysql;select * from them where id='10.0.0.0'"? - ╎list element: net-mysql;select * from them where id='10.0.0.0' - ╎search_open: mysql "NULL" - ╎ cached open - ╎search_find: file="NULL" - ╎ key="select * from them where id='10.0.0.0'" partial=-1 affix=NULL starflags=0 opts=NULL - ╎LRU list: - ╎internal_search_find: file="NULL" - ╎ type=mysql key="select * from them where id='10.0.0.0'" opts=NULL - ╎database lookup required for select * from them where id='10.0.0.0' - ╎MySQL query: "select * from them where id='10.0.0.0'" opts 'NULL' - ╎MYSQL using cached connection for 127.0.0.1:PORT_N/test/root - ╎MYSQL: no data found - ╎creating new cache entry - ╎lookup failed - host in "net-mysql;select * from them where id='10.0.0.0'"? no (end of list) - end sublist relay_hosts -host in "+relay_hosts"? no (end of list) -accept: condition test failed in ACL "check_recipient" -processing "deny" (TESTSUITE/test-config 55) - message: relay not permitted -deny: condition test succeeded in ACL "check_recipient" -end of ACL "check_recipient": DENY -SMTP>> 550 relay not permitted -LOG: MAIN REJECT - H=(test) [10.0.0.0] F= rejected RCPT : relay not permitted -SMTP<< quit -SMTP>> 221 myhost.test.ex closing connection -LOG: smtp_connection MAIN - SMTP connection from (test) [10.0.0.0] D=qqs closed by QUIT -search_tidyup called -close MYSQL connection: 127.0.0.1:PORT_N/test/root ->>>>>>>>>>>>>>>> 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 @@ -483,15 +750,15 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=F: From: CALLER_NAME search_tidyup called >>Headers after rewriting and local additions: -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaX-000000005vi-0000-D Data file written for message 10HmaX-000000005vi-0000 @@ -502,7 +769,7 @@ P Received: from CALLER by myhost.test.ex with local (Exim x.yz) for ph10@myhost.test.ex; Tue, 2 Mar 1999 09:44:33 +0000 using ACL "check_notsmtp" -processing "accept" (TESTSUITE/test-config 58) +processing "accept" (TESTSUITE/test-config 60) check set acl_m_qtest = ${quote_mysql:$recipients} = ph10@myhost.test.ex accept: condition test succeeded in ACL "check_notsmtp" @@ -517,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 @@ -540,8 +808,6 @@ body_linecount=1 message_linecount=8 DSN: set orcpt: flags: 0x0 Delivery address list: ph10@myhost.test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -581,12 +847,12 @@ processing address_data database lookup required for select name from them where id='ph10' limit 1 (tainted) LOG: MAIN PANIC - tainted search query is not properly quoted (router r1, TESTSUITE/test-config 66): select name from them where id='ph10' limit 1 + tainted search query is not properly quoted (router r1, TESTSUITE/test-config 68): select name from them where id='ph10' limit 1 search_type NN (mysql) quoting -1 (none) MySQL query: "select name from them where id='ph10' limit 1" opts 'NULL' MYSQL using cached connection for 127.0.0.1:PORT_N/test/root creating new cache entry - lookup yielded: Philip Hazel + lookup yielded: Philip░Hazel calling r1 router r1 router called for ph10@myhost.test.ex domain = myhost.test.ex @@ -609,8 +875,6 @@ search_tidyup called close MYSQL connection: 127.0.0.1:PORT_N/test/root >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> ph10@myhost.test.ex <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -630,7 +894,7 @@ appendfile transport entered database lookup required for select id from them where id='ph10' (tainted) LOG: MAIN - tainted search query is not properly quoted (transport t1, TESTSUITE/test-config 80): select id from them where id='ph10' + tainted search query is not properly quoted (transport t1, TESTSUITE/test-config 82): select id from them where id='ph10' search_type NN (mysql) quoting -1 (none) MySQL query: "select id from them where id='ph10'" opts 'NULL' MYSQL new connection: host=127.0.0.1 port=PORT_N socket=NULL database=test user=root @@ -654,6 +918,7 @@ writing data block fd=dddd size=sss timeout=0 appendfile yields 0 with errno=dd more_errno=dd search_tidyup called close MYSQL connection: 127.0.0.1:PORT_N/test/root +>>>>>>>>>>>>>>>> Exim pid=p1238 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling ph10@myhost.test.ex t1 transport returned OK for ph10@myhost.test.ex post-process ph10@myhost.test.ex (0) @@ -665,10 +930,10 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1237 set_process_info: pppp tidying up after delivering 10HmaX-000000005vi-0000 Processing retry items -Succeeded addresses: - ph10@myhost.test.ex: no retry items -Failed addresses: -Deferred addresses: + Succeeded addresses: + ph10@myhost.test.ex: no retry items + Failed addresses: + Deferred addresses: end of retry processing DSN: processing router : r1 DSN: processing successful delivery address: ph10@myhost.test.ex diff --git a/test/stderr/2620 b/test/stderr/2620 index f1e7438cf..44aca59eb 100644 --- a/test/stderr/2620 +++ b/test/stderr/2620 @@ -1,8 +1,8 @@ WARNING: enabling "trust" authentication for local connections -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. +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 @@ -16,7 +16,7 @@ dropping to exim gid; retaining priv uid PostgreSQL query: "select name from them where id='ph10';" opts 'NULL' PGSQL new connection: host=localhost port=PORT_N database=test user=CALLER creating new cache entry - lookup yielded: Philip Hazel + lookup yielded: Philip░Hazel search_open: pgsql "NULL" cached open search_find: file="NULL" @@ -25,7 +25,7 @@ dropping to exim gid; retaining priv uid internal_search_find: file="NULL" type=pgsql key="select name from them where id='ph10';" opts=NULL cached data used for lookup of select name from them where id='ph10'; - lookup yielded: Philip Hazel + lookup yielded: Philip░Hazel search_open: pgsql "NULL" cached open search_find: file="NULL" @@ -62,7 +62,7 @@ dropping to exim gid; retaining priv uid PostgreSQL query: "select id,name from them where id='nothing';" opts 'NULL' PGSQL using cached connection for localhost:PORT_N/test/CALLER creating new cache entry - lookup yielded: id=nothing name="" + lookup yielded: id=nothing░name=""░ search_open: pgsql "NULL" cached open search_find: file="NULL" @@ -87,7 +87,7 @@ dropping to exim gid; retaining priv uid PostgreSQL query: "select * from them where id='quote2';" opts 'NULL' PGSQL using cached connection for localhost:PORT_N/test/CALLER creating new cache entry - lookup yielded: name="\"stquot" id=quote2 + lookup yielded: name="\"stquot"░id=quote2░ search_open: pgsql "NULL" cached open search_find: file="NULL" @@ -99,8 +99,8 @@ dropping to exim gid; retaining priv uid PostgreSQL query: "select * from them where id='newline';" opts 'NULL' PGSQL using cached connection for localhost:PORT_N/test/CALLER creating new cache entry - lookup yielded: name="before - after" id=newline + lookup yielded: name="before␍↩ + after"░id=newline░ search_open: pgsql "NULL" cached open search_find: file="NULL" @@ -112,7 +112,7 @@ dropping to exim gid; retaining priv uid PostgreSQL query: "select * from them where id='tab';" opts 'NULL' PGSQL using cached connection for localhost:PORT_N/test/CALLER creating new cache entry - lookup yielded: name="x x" id=tab + lookup yielded: name="x␉x"░id=tab░ search_open: pgsql "NULL" cached open search_find: file="NULL" @@ -124,7 +124,7 @@ dropping to exim gid; retaining priv uid PostgreSQL query: "select * from them where name='''stquot';" opts 'NULL' PGSQL using cached connection for localhost:PORT_N/test/CALLER creating new cache entry - lookup yielded: name='stquot id=quote1 + lookup yielded: name='stquot░id=quote1░ search_open: pgsql "NULL" cached open search_find: file="NULL" @@ -134,6 +134,9 @@ dropping to exim gid; retaining priv uid type=pgsql key="servers=x:localhost; select name from them where id='ph10';" opts=NULL database lookup required for servers=x:localhost; select name from them where id='ph10'; PostgreSQL query: "servers=x:localhost; select name from them where id='ph10';" opts 'NULL' +LOG: MAIN + Exim configuration error in line 78 of TESTSUITE/test-config: + WARNING: obsolete syntax used for lookup lookup deferred: PostgreSQL server "x" not found in pgsql_servers search_open: pgsql "NULL" cached open @@ -144,9 +147,12 @@ dropping to exim gid; retaining priv uid type=pgsql key="servers=localhost::PORT_N:x; select name from them where id='ph10';" opts=NULL database lookup required for servers=localhost::PORT_N:x; select name from them where id='ph10'; PostgreSQL query: "servers=localhost::PORT_N:x; select name from them where id='ph10';" opts 'NULL' +LOG: MAIN + Exim configuration error in line 78 of TESTSUITE/test-config: + WARNING: obsolete syntax used for lookup PGSQL using cached connection for localhost:PORT_N/test/CALLER creating new cache entry - lookup yielded: Philip Hazel + lookup yielded: Philip░Hazel search_open: pgsql "NULL" cached open search_find: file="NULL" @@ -156,9 +162,12 @@ dropping to exim gid; retaining priv uid type=pgsql key="servers=localhost::PORT_N/test/CALLER/:x; select name from them where id='ph10';" opts=NULL database lookup required for servers=localhost::PORT_N/test/CALLER/:x; select name from them where id='ph10'; PostgreSQL query: "servers=localhost::PORT_N/test/CALLER/:x; select name from them where id='ph10';" opts 'NULL' +LOG: MAIN + Exim configuration error in line 78 of TESTSUITE/test-config: + WARNING: obsolete syntax used for lookup PGSQL using cached connection for localhost:PORT_N/test/CALLER creating new cache entry - lookup yielded: Philip Hazel + lookup yielded: Philip░Hazel search_open: pgsql "NULL" cached open search_find: file="NULL" @@ -168,9 +177,12 @@ dropping to exim gid; retaining priv uid type=pgsql key="servers=(TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER/:x; select name from them where id='ph10';" opts=NULL database lookup required for servers=(TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER/:x; select name from them where id='ph10'; PostgreSQL query: "servers=(TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER/:x; select name from them where id='ph10';" opts 'NULL' +LOG: MAIN + Exim configuration error in line 78 of TESTSUITE/test-config: + WARNING: obsolete syntax used for lookup PGSQL new connection: socket=TESTSUITE/pgsql/.s.PGSQL.1223 database=test user=CALLER creating new cache entry - lookup yielded: Philip Hazel + lookup yielded: Philip░Hazel search_open: pgsql "NULL" cached open search_find: file="NULL" @@ -182,7 +194,7 @@ dropping to exim gid; retaining priv uid PostgreSQL query: "SELECT name FROM them WHERE id IN ('ph10', 'aaaa');" opts 'NULL' PGSQL using cached connection for localhost:PORT_N/test/CALLER creating new cache entry - lookup yielded: Philip Hazel + lookup yielded: Philip░Hazel↩ Aristotle search_open: pgsql "NULL" cached open @@ -195,8 +207,8 @@ dropping to exim gid; retaining priv uid PostgreSQL query: "SELECT * FROM them WHERE id IN ('ph10', 'aaaa');" opts 'NULL' PGSQL using cached connection for localhost:PORT_N/test/CALLER creating new cache entry - lookup yielded: name="Philip Hazel" id=ph10 - name=Aristotle id=aaaa + lookup yielded: name="Philip░Hazel"░id=ph10░↩ + name=Aristotle░id=aaaa░ search_open: pgsql "NULL" cached open search_find: file="NULL" @@ -215,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 @@ -334,15 +347,18 @@ check set acl_m0 = ok: ${lookup pgsql,servers=localhost::PORT_N {select nam database lookup required for servers=localhost::PORT_N/test/CALLER/; select name from them where id = 'c' (tainted, quoted:pgsql) PostgreSQL query: "servers=localhost::PORT_N/test/CALLER/; select name from them where id = 'c'" opts 'NULL' - lookup deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted +LOG: MAIN + Exim configuration error in line 78 of TESTSUITE/test-config: + WARNING: obsolete syntax used for lookup + lookup deferred: PostgreSQL server "localhost:PORT_N/test" is tainted warn: condition test deferred in ACL "check_recipient" LOG: MAIN - H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted + H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test" is tainted processing "warn" (TESTSUITE/test-config 41) check set acl_m0 = ok: hostlist check hosts = net-pgsql;select * from them where id='${quote_pgsql:$local_part}' host in "net-pgsql;select * from them where id='c'"? - list element: net-pgsql;select * from them where id='c' + list element: net-pgsql;select░*░from░them░where░id='c' search_open: pgsql "NULL" cached open search_find: file="NULL" @@ -363,7 +379,7 @@ processing "warn" (TESTSUITE/test-config 44) check set acl_m0 = FAIL: hostlist check hosts = <& net-pgsql;servers=localhost::PORT_N/test/CALLER/; select * from them where id='${quote_pgsql:$local_part}' host in "<& net-pgsql;servers=localhost::PORT_N/test/CALLER/; select * from them where id='c'"? - list element: net-pgsql;servers=localhost::PORT_N/test/CALLER/; select * from them where id='c' + list element: net-pgsql;servers=localhost::PORT_N/test/CALLER/;░select░*░from░them░where░id='c' search_open: pgsql "NULL" cached open search_find: file="NULL" @@ -374,16 +390,19 @@ host in "<& net-pgsql;servers=localhost::PORT_N/test/CALLER/; select * from them database lookup required for servers=localhost::PORT_N/test/CALLER/; select * from them where id='c' (tainted, quoted:pgsql) PostgreSQL query: "servers=localhost::PORT_N/test/CALLER/; select * from them where id='c'" opts 'NULL' - lookup deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted +LOG: MAIN + Exim configuration error in line 78 of TESTSUITE/test-config: + WARNING: obsolete syntax used for lookup + lookup deferred: PostgreSQL server "localhost:PORT_N/test" is tainted host in "<& net-pgsql;servers=localhost::PORT_N/test/CALLER/; select * from them where id='c'"? list match deferred for net-pgsql;servers=localhost::1223/test/CALLER/; select * from them where id='c' warn: condition test deferred in ACL "check_recipient" LOG: MAIN - H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted + H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test" is tainted processing "warn" (TESTSUITE/test-config 49) check set acl_m0 = FAIL: hostlist check hosts = <& net-pgsql,servers=localhost::PORT_N/test/CALLER/; select * from them where id='${quote_pgsql:$local_part}' host in "<& net-pgsql,servers=localhost::PORT_N/test/CALLER/; select * from them where id='c'"? - list element: net-pgsql,servers=localhost::PORT_N/test/CALLER/; select * from them where id='c' + list element: net-pgsql,servers=localhost::PORT_N/test/CALLER/;░select░*░from░them░where░id='c' search_open: pgsql "NULL" cached open search_find: file="NULL" @@ -394,11 +413,11 @@ host in "<& net-pgsql,servers=localhost::PORT_N/test/CALLER/; select * from them database lookup required for select * from them where id='c' (tainted, quoted:pgsql) PostgreSQL query: " select * from them where id='c'" opts 'servers=localhost::PORT_N/test/CALLER/' - lookup deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted + lookup deferred: PostgreSQL server "localhost:PORT_N/test" is tainted host in "<& net-pgsql,servers=localhost::PORT_N/test/CALLER/; select * from them where id='c'"? list match deferred for net-pgsql,servers=localhost::1223/test/CALLER/; select * from them where id='c' warn: condition test deferred in ACL "check_recipient" LOG: MAIN - H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted + H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test" is tainted processing "accept" (TESTSUITE/test-config 52) check domains = +local_domains d in "+local_domains"? @@ -416,7 +435,7 @@ host in "+relay_hosts"? list element: +relay_hosts start sublist relay_hosts host in "net-pgsql;select * from them where id='10.0.0.0'"? - ╎list element: net-pgsql;select * from them where id='10.0.0.0' + ╎list element: net-pgsql;select░*░from░them░where░id='10.0.0.0' ╎search_open: pgsql "NULL" ╎ cached open ╎search_find: file="NULL" @@ -523,15 +542,18 @@ check set acl_m0 = ok: ${lookup pgsql,servers=localhost::PORT_N {select nam database lookup required for servers=localhost::PORT_N/test/CALLER/; select name from them where id = 'c' (tainted, quoted:pgsql) PostgreSQL query: "servers=localhost::PORT_N/test/CALLER/; select name from them where id = 'c'" opts 'NULL' - lookup deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted +LOG: MAIN + Exim configuration error in line 78 of TESTSUITE/test-config: + WARNING: obsolete syntax used for lookup + lookup deferred: PostgreSQL server "localhost:PORT_N/test" is tainted warn: condition test deferred in ACL "check_recipient" LOG: MAIN - H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted + H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test" is tainted processing "warn" (TESTSUITE/test-config 41) check set acl_m0 = ok: hostlist check hosts = net-pgsql;select * from them where id='${quote_pgsql:$local_part}' host in "net-pgsql;select * from them where id='c'"? - list element: net-pgsql;select * from them where id='c' + list element: net-pgsql;select░*░from░them░where░id='c' search_open: pgsql "NULL" cached open search_find: file="NULL" @@ -547,7 +569,7 @@ processing "warn" (TESTSUITE/test-config 44) check set acl_m0 = FAIL: hostlist check hosts = <& net-pgsql;servers=localhost::PORT_N/test/CALLER/; select * from them where id='${quote_pgsql:$local_part}' host in "<& net-pgsql;servers=localhost::PORT_N/test/CALLER/; select * from them where id='c'"? - list element: net-pgsql;servers=localhost::PORT_N/test/CALLER/; select * from them where id='c' + list element: net-pgsql;servers=localhost::PORT_N/test/CALLER/;░select░*░from░them░where░id='c' search_open: pgsql "NULL" cached open search_find: file="NULL" @@ -558,16 +580,19 @@ host in "<& net-pgsql;servers=localhost::PORT_N/test/CALLER/; select * from them database lookup required for servers=localhost::PORT_N/test/CALLER/; select * from them where id='c' (tainted, quoted:pgsql) PostgreSQL query: "servers=localhost::PORT_N/test/CALLER/; select * from them where id='c'" opts 'NULL' - lookup deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted +LOG: MAIN + Exim configuration error in line 78 of TESTSUITE/test-config: + WARNING: obsolete syntax used for lookup + lookup deferred: PostgreSQL server "localhost:PORT_N/test" is tainted host in "<& net-pgsql;servers=localhost::PORT_N/test/CALLER/; select * from them where id='c'"? list match deferred for net-pgsql;servers=localhost::1223/test/CALLER/; select * from them where id='c' warn: condition test deferred in ACL "check_recipient" LOG: MAIN - H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted + H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test" is tainted processing "warn" (TESTSUITE/test-config 49) check set acl_m0 = FAIL: hostlist check hosts = <& net-pgsql,servers=localhost::PORT_N/test/CALLER/; select * from them where id='${quote_pgsql:$local_part}' host in "<& net-pgsql,servers=localhost::PORT_N/test/CALLER/; select * from them where id='c'"? - list element: net-pgsql,servers=localhost::PORT_N/test/CALLER/; select * from them where id='c' + list element: net-pgsql,servers=localhost::PORT_N/test/CALLER/;░select░*░from░them░where░id='c' search_open: pgsql "NULL" cached open search_find: file="NULL" @@ -578,11 +603,11 @@ host in "<& net-pgsql,servers=localhost::PORT_N/test/CALLER/; select * from them database lookup required for select * from them where id='c' (tainted, quoted:pgsql) PostgreSQL query: " select * from them where id='c'" opts 'servers=localhost::PORT_N/test/CALLER/' - lookup deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted + lookup deferred: PostgreSQL server "localhost:PORT_N/test" is tainted host in "<& net-pgsql,servers=localhost::PORT_N/test/CALLER/; select * from them where id='c'"? list match deferred for net-pgsql,servers=localhost::1223/test/CALLER/; select * from them where id='c' warn: condition test deferred in ACL "check_recipient" LOG: MAIN - H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted + H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test" is tainted processing "accept" (TESTSUITE/test-config 52) check domains = +local_domains d in "+local_domains"? @@ -600,7 +625,7 @@ host in "+relay_hosts"? list element: +relay_hosts start sublist relay_hosts host in "net-pgsql;select * from them where id='10.0.0.0'"? - ╎list element: net-pgsql;select * from them where id='10.0.0.0' + ╎list element: net-pgsql;select░*░from░them░where░id='10.0.0.0' ╎search_open: pgsql "NULL" ╎ cached open ╎search_find: file="NULL" @@ -629,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 @@ -649,15 +675,15 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=F: From: CALLER_NAME search_tidyup called >>Headers after rewriting and local additions: -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaX-000000005vi-0000-D Data file written for message 10HmaX-000000005vi-0000 @@ -677,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 @@ -700,8 +727,6 @@ body_linecount=1 message_linecount=8 DSN: set orcpt: flags: 0x0 Delivery address list: CALLER@myhost.test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -727,7 +752,7 @@ processing address_data PostgreSQL query: "select name from them where id='ph10'" opts 'NULL' PGSQL new connection: host=localhost port=PORT_N database=test user=CALLER creating new cache entry - lookup yielded: Philip Hazel + lookup yielded: Philip░Hazel calling r1 router r1 router called for CALLER@myhost.test.ex domain = myhost.test.ex @@ -750,8 +775,6 @@ search_tidyup called close PGSQL connection: localhost:PORT_N/test/CALLER >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> CALLER@myhost.test.ex <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -791,6 +814,7 @@ writing data block fd=dddd size=sss timeout=0 appendfile yields 0 with errno=dd more_errno=dd search_tidyup called close PGSQL connection: localhost:PORT_N/test/CALLER +>>>>>>>>>>>>>>>> Exim pid=p1239 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling CALLER@myhost.test.ex t1 transport returned OK for CALLER@myhost.test.ex post-process CALLER@myhost.test.ex (0) @@ -802,10 +826,10 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1238 set_process_info: pppp tidying up after delivering 10HmaX-000000005vi-0000 Processing retry items -Succeeded addresses: - CALLER@myhost.test.ex: no retry items -Failed addresses: -Deferred addresses: + Succeeded addresses: + CALLER@myhost.test.ex: no retry items + Failed addresses: + Deferred addresses: end of retry processing DSN: processing router : r1 DSN: processing successful delivery address: CALLER@myhost.test.ex @@ -824,6 +848,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 @@ -837,7 +862,7 @@ dropping to exim gid; retaining priv uid PostgreSQL query: "select name from them where id='ph10';" opts 'NULL' PGSQL new connection: socket=TESTSUITE/pgsql/.s.PGSQL.1223 database=test user=CALLER creating new cache entry - lookup yielded: Philip Hazel + lookup yielded: Philip░Hazel search_tidyup called close PGSQL connection: (TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER >>>>>>>>>>>>>>>> Exim pid=p1240 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/3000 b/test/stderr/3000 index 137ca11ef..b04a15086 100644 --- a/test/stderr/3000 +++ b/test/stderr/3000 @@ -1,66 +1,70 @@ 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= adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys configuration file is TESTSUITE/test-config admin user dropping to exim gid; retaining priv uid +try option gecos_pattern +try option gecos_name +try option unknown_login ╭considering: ${perl{foo}{arg1}} ╭considering: foo}{arg1}} ├───────text: foo ├considering: }{arg1}} - ├──expanding: foo + ├───expanded: foo ╰─────result: foo ╭considering: arg1}} ├───────text: arg1 ├considering: }} - ├──expanding: arg1 + ├───expanded: arg1 ╰─────result: arg1 Starting Perl interpreter - ├──expanding: ${perl{foo}{arg1}} - ╰─────result: Subroutine foo called with args: arg1 + ├───expanded: ${perl{foo}{arg1}} + ╰─────result: Subroutine░foo░called░with░args:░arg1 ╭considering: ${perl{foo_undef}} ╭considering: foo_undef}} ├───────text: foo_undef ├considering: }} - ├──expanding: foo_undef + ├───expanded: foo_undef ╰─────result: foo_undef ├failed to expand: ${perl{foo_undef}} ├───error message: Perl subroutine "foo_undef" returned undef to force failure ╰failure was forced - ╭considering: ${perl{debug_write}{debug from Perl\n}} - ╭considering: debug_write}{debug from Perl\n}} + ╭considering: ${perl{debug_write}{debug░from░Perl\n}} + ╭considering: debug_write}{debug░from░Perl\n}} ├───────text: debug_write - ├considering: }{debug from Perl\n}} - ├──expanding: debug_write + ├considering: }{debug░from░Perl\n}} + ├───expanded: debug_write ╰─────result: debug_write - ╭considering: debug from Perl\n}} - ├───────text: debug from Perl + ╭considering: debug░from░Perl\n}} + ├───────text: debug░from░Perl ├considering: \n}} ├backslashed: '\n' ├considering: }} - ├──expanding: debug from Perl\n - ╰─────result: debug from Perl + ├───expanded: debug░from░Perl\n + ╰─────result: debug░from░Perl↩ debug from Perl - ├──expanding: ${perl{debug_write}{debug from Perl\n}} - ╰─────result: Wrote debug - ╭considering: ${perl{log_write}{log from Perl}} - ╭considering: log_write}{log from Perl}} + ├───expanded: ${perl{debug_write}{debug░from░Perl\n}} + ╰─────result: Wrote░debug + ╭considering: ${perl{log_write}{log░from░Perl}} + ╭considering: log_write}{log░from░Perl}} ├───────text: log_write - ├considering: }{log from Perl}} - ├──expanding: log_write + ├considering: }{log░from░Perl}} + ├───expanded: log_write ╰─────result: log_write - ╭considering: log from Perl}} - ├───────text: log from Perl + ╭considering: log░from░Perl}} + ├───────text: log░from░Perl ├considering: }} - ├──expanding: log from Perl - ╰─────result: log from Perl + ├───expanded: log░from░Perl + ╰─────result: log░from░Perl LOG: MAIN log from Perl - ├──expanding: ${perl{log_write}{log from Perl}} - ╰─────result: Wrote log + ├───expanded: ${perl{log_write}{log░from░Perl}} + ╰─────result: Wrote░log >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: smtp_connection MAIN SMTP connection from CALLER @@ -80,6 +84,8 @@ LOG: smtp_connection MAIN >>> list element: @ >>> list element: @[] >>> x.y.z in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * diff --git a/test/stderr/3201 b/test/stderr/3201 index 0098e6e4f..70d48576b 100644 --- a/test/stderr/3201 +++ b/test/stderr/3201 @@ -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 diff --git a/test/stderr/3208 b/test/stderr/3208 index 65f28b8fc..7e9e4c3a6 100644 --- a/test/stderr/3208 +++ b/test/stderr/3208 @@ -10,6 +10,8 @@ >>> list element: @ >>> list element: @[] >>> remote.host in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -31,10 +33,13 @@ >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? ->>> list element: !*relay.ex ->>> list element: test.ex ->>> test.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? +>>> ╎list element: !*relay.ex +>>> ╎list element: test.ex +>>> ╎test.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -72,10 +77,13 @@ LOG: H=(remote.host) [V4NET.0.0.1] F= temporarily rejected RCP >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? ->>> list element: !*relay.ex ->>> list element: test.ex ->>> test.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? +>>> ╎list element: !*relay.ex +>>> ╎list element: test.ex +>>> ╎test.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -100,21 +108,27 @@ LOG: H=(remote.host) [V4NET.0.0.1] F= temporarily rejected RCP >>> check domains = +local_domains >>> yesrelay.ex in "+local_domains"? >>> list element: +local_domains ->>> yesrelay.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? ->>> list element: !*relay.ex ->>> yesrelay.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? no (matched "!*relay.ex") +>>> start sublist local_domains +>>> yesrelay.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? +>>> ╎list element: !*relay.ex +>>> ╎yesrelay.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? no (matched "!*relay.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'yesrelay.ex' value '*relay.ex' >>> yesrelay.ex in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 29) >>> check domains = +relay_domains >>> yesrelay.ex in "+relay_domains"? >>> list element: +relay_domains ->>> yesrelay.ex in "test.ex : testhack.ex : testhack2.ex : yesrelay.ex : testdb;defer"? ->>> list element: test.ex ->>> list element: testhack.ex ->>> list element: testhack2.ex ->>> list element: yesrelay.ex ->>> yesrelay.ex in "test.ex : testhack.ex : testhack2.ex : yesrelay.ex : testdb;defer"? yes (matched "yesrelay.ex") +>>> start sublist relay_domains +>>> yesrelay.ex in "test.ex : testhack.ex : testhack2.ex : yesrelay.ex : testdb;defer"? +>>> ╎list element: test.ex +>>> ╎list element: testhack.ex +>>> ╎list element: testhack2.ex +>>> ╎list element: yesrelay.ex +>>> ╎yesrelay.ex in "test.ex : testhack.ex : testhack2.ex : yesrelay.ex : testdb;defer"? yes (matched "yesrelay.ex") +>>> end sublist relay_domains +>>> data from lookup saved for cache for +relay_domains: key 'yesrelay.ex' value 'yesrelay.ex' >>> yesrelay.ex in "+relay_domains"? yes (matched "+relay_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -132,22 +146,27 @@ LOG: H=(remote.host) [V4NET.0.0.1] F= temporarily rejected RCP >>> check domains = +local_domains >>> norelay.ex in "+local_domains"? >>> list element: +local_domains ->>> norelay.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? ->>> list element: !*relay.ex ->>> norelay.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? no (matched "!*relay.ex") +>>> start sublist local_domains +>>> norelay.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? +>>> ╎list element: !*relay.ex +>>> ╎norelay.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? no (matched "!*relay.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'norelay.ex' value '*relay.ex' >>> norelay.ex in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 29) >>> check domains = +relay_domains >>> norelay.ex in "+relay_domains"? >>> list element: +relay_domains ->>> norelay.ex in "test.ex : testhack.ex : testhack2.ex : yesrelay.ex : testdb;defer"? ->>> list element: test.ex ->>> list element: testhack.ex ->>> list element: testhack2.ex ->>> list element: yesrelay.ex ->>> list element: testdb;defer ->>> norelay.ex in "test.ex : testhack.ex : testhack2.ex : yesrelay.ex : testdb;defer"? list match deferred for testdb;defer +>>> start sublist relay_domains +>>> norelay.ex in "test.ex : testhack.ex : testhack2.ex : yesrelay.ex : testdb;defer"? +>>> ╎list element: test.ex +>>> ╎list element: testhack.ex +>>> ╎list element: testhack2.ex +>>> ╎list element: yesrelay.ex +>>> ╎list element: testdb;defer +>>> norelay.ex in "test.ex : testhack.ex : testhack2.ex : yesrelay.ex : testdb;defer"? list match deferred for testdb;defer +>>> end sublist relay_domains >>> norelay.ex in "+relay_domains"? list match deferred for +relay_domains >>> accept: condition test deferred in ACL "check_recipient" LOG: H=(remote.host) [V4NET.0.0.1] F= temporarily rejected RCPT : testdb lookup forced DEFER @@ -170,21 +189,27 @@ LOG: H=(remote.host) [V4NET.0.0.1] F= temporarily rejected RCP >>> check domains = +local_domains >>> yesrelay.ex in "+local_domains"? >>> list element: +local_domains ->>> yesrelay.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? ->>> list element: !*relay.ex ->>> yesrelay.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? no (matched "!*relay.ex") +>>> start sublist local_domains +>>> yesrelay.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? +>>> ╎list element: !*relay.ex +>>> ╎yesrelay.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? no (matched "!*relay.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'yesrelay.ex' value '*relay.ex' >>> yesrelay.ex in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 29) >>> check domains = +relay_domains >>> yesrelay.ex in "+relay_domains"? >>> list element: +relay_domains ->>> yesrelay.ex in "test.ex : testhack.ex : testhack2.ex : yesrelay.ex : testdb;defer"? ->>> list element: test.ex ->>> list element: testhack.ex ->>> list element: testhack2.ex ->>> list element: yesrelay.ex ->>> yesrelay.ex in "test.ex : testhack.ex : testhack2.ex : yesrelay.ex : testdb;defer"? yes (matched "yesrelay.ex") +>>> start sublist relay_domains +>>> yesrelay.ex in "test.ex : testhack.ex : testhack2.ex : yesrelay.ex : testdb;defer"? +>>> ╎list element: test.ex +>>> ╎list element: testhack.ex +>>> ╎list element: testhack2.ex +>>> ╎list element: yesrelay.ex +>>> ╎yesrelay.ex in "test.ex : testhack.ex : testhack2.ex : yesrelay.ex : testdb;defer"? yes (matched "yesrelay.ex") +>>> end sublist relay_domains +>>> data from lookup saved for cache for +relay_domains: key 'yesrelay.ex' value 'yesrelay.ex' >>> yesrelay.ex in "+relay_domains"? yes (matched "+relay_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -207,22 +232,27 @@ LOG: H=(remote.host) [V4NET.0.0.1] F= temporarily rejected RCP >>> check domains = +local_domains >>> norelay.ex in "+local_domains"? >>> list element: +local_domains ->>> norelay.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? ->>> list element: !*relay.ex ->>> norelay.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? no (matched "!*relay.ex") +>>> start sublist local_domains +>>> norelay.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? +>>> ╎list element: !*relay.ex +>>> ╎norelay.ex in "!*relay.ex : test.ex : testhack.ex : testhack2.ex : testdb;defer"? no (matched "!*relay.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'norelay.ex' value '*relay.ex' >>> norelay.ex in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 29) >>> check domains = +relay_domains >>> norelay.ex in "+relay_domains"? >>> list element: +relay_domains ->>> norelay.ex in "test.ex : testhack.ex : testhack2.ex : yesrelay.ex : testdb;defer"? ->>> list element: test.ex ->>> list element: testhack.ex ->>> list element: testhack2.ex ->>> list element: yesrelay.ex ->>> list element: testdb;defer ->>> norelay.ex in "test.ex : testhack.ex : testhack2.ex : yesrelay.ex : testdb;defer"? list match deferred for testdb;defer +>>> start sublist relay_domains +>>> norelay.ex in "test.ex : testhack.ex : testhack2.ex : yesrelay.ex : testdb;defer"? +>>> ╎list element: test.ex +>>> ╎list element: testhack.ex +>>> ╎list element: testhack2.ex +>>> ╎list element: yesrelay.ex +>>> ╎list element: testdb;defer +>>> norelay.ex in "test.ex : testhack.ex : testhack2.ex : yesrelay.ex : testdb;defer"? list match deferred for testdb;defer +>>> end sublist relay_domains >>> norelay.ex in "+relay_domains"? list match deferred for +relay_domains >>> accept: condition test deferred in ACL "check_recipient" LOG: H=(remote.host) [V4NET.0.0.1] F= temporarily rejected RCPT : testdb lookup forced DEFER diff --git a/test/stderr/3210 b/test/stderr/3210 index 48dfeaaa3..1dfb873e8 100644 --- a/test/stderr/3210 +++ b/test/stderr/3210 @@ -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 @@ -18,8 +19,8 @@ routing userx@test.ex --------> r1 router <-------- local_part=userx domain=test.ex checking domains -test.ex in "! +local_domains"? - list element: ! +local_domains +test.ex in domains? + list element: !░+local_domains start sublist local_domains test.ex in "+defer_lookup : test.ex"? ╎list element: +defer_lookup @@ -39,7 +40,7 @@ test.ex in "! +local_domains"? ╎ end sublist defer_lookup test.ex in "+defer_lookup : test.ex"? list match deferred for +defer_lookup end sublist local_domains -test.ex in "! +local_domains"? list match deferred for ! +local_domains +test.ex in domains? list match deferred for ! +local_domains domains check lookup or other defer search_tidyup called >>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=1 >>>>>>>>>>>>>>>> diff --git a/test/stderr/3211 b/test/stderr/3211 index 54f791dc4..d6d923d6b 100644 --- a/test/stderr/3211 +++ b/test/stderr/3211 @@ -19,10 +19,14 @@ >>> calling skipped router >>> skipped router declined for userx@test.again.dns >>> calling temp router ->>> test.again.dns in "*"? ->>> list element: * ->>> test.again.dns in "*"? yes (matched "*") ->>> test.again.dns in dns_again_means_nonexist? no (option unset) +>>> check dnssec require list +>>> test.again.dns in dnssec_require_domains? no (option unset) +>>> check dnssec request list +>>> test.again.dns in dnssec_request_domains? +>>> list element: * +>>> test.again.dns in dnssec_request_domains? yes (matched "*") +>>> test.again.dns in dns_again_means_nonexist? no (option unset) +>>> test.again.dns not in empty list (option unset? cannot trace name) >>> temp router: defer for userx@test.again.dns >>> message: host lookup did not complete >>> ----------- end verify ------------ @@ -45,14 +49,18 @@ LOG: H=(test) [1.2.3.4] F= temporarily rejected RCPT >> check verify = recipient >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing r1-userx@test.again.dns ->>> test.again.dns in "!testdb;fail"? +>>> test.again.dns in domains? >>> list element: !testdb;fail ->>> test.again.dns in "!testdb;fail"? yes (end of list) +>>> test.again.dns in domains? yes (end of list) >>> calling r1 router ->>> test.again.dns in "*"? ->>> list element: * ->>> test.again.dns in "*"? yes (matched "*") ->>> test.again.dns in dns_again_means_nonexist? no (option unset) +>>> check dnssec require list +>>> test.again.dns in dnssec_require_domains? no (option unset) +>>> check dnssec request list +>>> test.again.dns in dnssec_request_domains? +>>> list element: * +>>> test.again.dns in dnssec_request_domains? yes (matched "*") +>>> test.again.dns in dns_again_means_nonexist? no (option unset) +>>> test.again.dns not in empty list (option unset? cannot trace name) >>> r1 router: defer for r1-userx@test.again.dns >>> message: host lookup did not complete >>> ----------- end verify ------------ diff --git a/test/stderr/3212 b/test/stderr/3212 index a0cc58945..a7f4de90e 100644 --- a/test/stderr/3212 +++ b/test/stderr/3212 @@ -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 @@ -17,7 +18,7 @@ sender address = CALLER@myhost.test.ex file lookup required for list in TESTSUITE/aux-fixed/3212.aliases creating new cache entry - lookup yielded: userx, usery + lookup yielded: userx,░usery search_open: lsearch "TESTSUITE/aux-fixed/3212.aliases" cached open search_find: file="TESTSUITE/aux-fixed/3212.aliases" @@ -29,7 +30,7 @@ sender address = CALLER@myhost.test.ex type=lsearch key="list" opts=NULL cached data used for lookup of list in TESTSUITE/aux-fixed/3212.aliases - lookup yielded: userx, usery + lookup yielded: userx,░usery search_open: lsearch "TESTSUITE/aux-fixed/3212.aliases" cached open search_find: file="TESTSUITE/aux-fixed/3212.aliases" @@ -66,7 +67,7 @@ sender address = CALLER@myhost.test.ex type=lsearch key="list" opts=NULL cached data used for lookup of list in TESTSUITE/aux-fixed/3212.aliases - lookup yielded: userx, usery + lookup yielded: userx,░usery search_open: testdb "NULL" search_find: file="NULL" key="something" partial=-1 affix=NULL starflags=0 opts=NULL @@ -124,7 +125,7 @@ sender address = CALLER@myhost.test.ex type=lsearch key="list" opts=NULL cached data used for lookup of list in TESTSUITE/aux-fixed/3212.aliases - lookup yielded: userx, usery + lookup yielded: userx,░usery search_open: lsearch "TESTSUITE/aux-fixed/3212.aliases" cached open search_find: file="TESTSUITE/aux-fixed/3212.aliases" diff --git a/test/stderr/3400 b/test/stderr/3400 index 9d7bfaabd..915c6e8f1 100644 --- a/test/stderr/3400 +++ b/test/stderr/3400 @@ -28,9 +28,11 @@ >>> check hosts = +auth_hosts >>> host in "+auth_hosts"? >>> list element: +auth_hosts ->>> host in "10.0.0.1"? ->>> list element: 10.0.0.1 ->>> host in "10.0.0.1"? no (end of list) +>>> start sublist auth_hosts +>>> host in "10.0.0.1"? +>>> ╎list element: 10.0.0.1 +>>> host in "10.0.0.1"? no (end of list) +>>> end sublist auth_hosts >>> host in "+auth_hosts"? no (end of list) >>> deny: condition test failed in ACL "check_vrfy" >>> processing "accept" (TESTSUITE/test-config 70) @@ -38,15 +40,18 @@ >>> end of ACL "check_vrfy": ACCEPT >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@test.ex ->>> test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> test.ex in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") ->>> test.ex in "! +local_domains"? no (matched "! +local_domains") ->>> userx in "userx"? +>>> test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> test.ex in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' +>>> test.ex in domains? no (matched "! +local_domains") +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling localuser router >>> routed by localuser router >>> using ACL "check_expn" @@ -54,6 +59,9 @@ >>> check hosts = +auth_hosts >>> host in "+auth_hosts"? >>> list element: +auth_hosts +>>> start sublist auth_hosts +>>> cached no match for +auth_hosts +>>> cached lookup data = NULL >>> host in "+auth_hosts"? no (end of list) >>> deny: condition test failed in ACL "check_expn" >>> processing "accept" (TESTSUITE/test-config 64) @@ -65,15 +73,18 @@ >>> end of ACL "check_expn": ACCEPT >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing list@test.ex ->>> test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> test.ex in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") ->>> test.ex in "! +local_domains"? no (matched "! +local_domains") ->>> list in "userx"? +>>> test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> test.ex in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' +>>> test.ex in domains? no (matched "! +local_domains") +>>> list in local_parts? >>> list element: userx ->>> list in "userx"? no (end of list) +>>> list in local_parts? no (end of list) >>> no more routers LOG: ETRN #abcd received from (test) [10.0.0.2] >>> using ACL "check_etrn" @@ -81,6 +92,9 @@ LOG: ETRN #abcd received from (test) [10.0.0.2] >>> check hosts = +auth_hosts >>> host in "+auth_hosts"? >>> list element: +auth_hosts +>>> start sublist auth_hosts +>>> cached no match for +auth_hosts +>>> cached lookup data = NULL >>> host in "+auth_hosts"? no (end of list) >>> deny: condition test failed in ACL "check_etrn" >>> processing "require" (TESTSUITE/test-config 56) @@ -120,15 +134,19 @@ LOG: H=(test) [10.0.0.2] Warning: accepted ETRN #abcd >>> list element: @ >>> list element: @[] >>> test.host in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * >>> host in pipelining_advertise_hosts? yes (matched "*") >>> host in auth_advertise_hosts? >>> list element: +auth_hosts ->>> host in "10.0.0.1"? ->>> list element: 10.0.0.1 ->>> host in "10.0.0.1"? yes (matched "10.0.0.1") +>>> start sublist auth_hosts +>>> host in "10.0.0.1"? +>>> ╎list element: 10.0.0.1 +>>> ╎host in "10.0.0.1"? yes (matched "10.0.0.1") +>>> end sublist auth_hosts >>> host in auth_advertise_hosts? yes (matched "+auth_hosts") >>> host in chunking_advertise_hosts? >>> host in chunking_advertise_hosts? no (end of list) @@ -140,6 +158,9 @@ LOG: H=(test) [10.0.0.2] Warning: accepted ETRN #abcd >>> check hosts = +auth_hosts >>> host in "+auth_hosts"? >>> list element: +auth_hosts +>>> start sublist auth_hosts +>>> cached yes match for +auth_hosts +>>> cached lookup data = NULL >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) >>> message: authentication required >>> check !authenticated = * @@ -151,6 +172,9 @@ LOG: H=(test.host) [10.0.0.1] rejected VRFY userx@test.ex: authentication requir >>> check hosts = +auth_hosts >>> host in "+auth_hosts"? >>> list element: +auth_hosts +>>> start sublist auth_hosts +>>> cached yes match for +auth_hosts +>>> cached lookup data = NULL >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) >>> message: authentication required >>> check !authenticated = * @@ -163,6 +187,9 @@ LOG: ETRN abcd received from (test.host) [10.0.0.1] >>> check hosts = +auth_hosts >>> host in "+auth_hosts"? >>> list element: +auth_hosts +>>> start sublist auth_hosts +>>> cached yes match for +auth_hosts +>>> cached lookup data = NULL >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) >>> message: authentication required >>> check !authenticated = * @@ -192,6 +219,9 @@ LOG: H=(test.host) [10.0.0.1] rejected ETRN abcd: authentication required >>> check hosts = +auth_hosts >>> host in "+auth_hosts"? >>> list element: +auth_hosts +>>> start sublist auth_hosts +>>> cached yes match for +auth_hosts +>>> cached lookup data = NULL >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) >>> message: authentication required >>> check !authenticated = * @@ -226,6 +256,9 @@ LOG: H=(test.host) [10.0.0.1] F= rejected RCPT >> check hosts = +auth_hosts >>> host in "+auth_hosts"? >>> list element: +auth_hosts +>>> start sublist auth_hosts +>>> cached yes match for +auth_hosts +>>> cached lookup data = NULL >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) >>> message: authentication required >>> check !authenticated = * @@ -237,9 +270,12 @@ LOG: H=(test.host) [10.0.0.1] F= rejected RCPT >> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -266,6 +302,9 @@ LOG: H=(test.host) [10.0.0.1] F= rejected RCPT >> check hosts = +auth_hosts >>> host in "+auth_hosts"? >>> list element: +auth_hosts +>>> start sublist auth_hosts +>>> cached yes match for +auth_hosts +>>> cached lookup data = NULL >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) >>> message: authentication required >>> check !authenticated = * @@ -277,29 +316,35 @@ LOG: H=(test.host) [10.0.0.1] F= rejected RCPT >> check domains = +local_domains >>> cus.cam.ac.uk in "+local_domains"? >>> list element: +local_domains ->>> cus.cam.ac.uk in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> list element: *.test.ex ->>> cus.cam.ac.uk in "test.ex : *.test.ex"? no (end of list) +>>> start sublist local_domains +>>> cus.cam.ac.uk in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎list element: *.test.ex +>>> cus.cam.ac.uk in "test.ex : *.test.ex"? no (end of list) +>>> end sublist local_domains >>> cus.cam.ac.uk in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 45) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts ->>> host in "10.0.0.4"? ->>> list element: 10.0.0.4 ->>> host in "10.0.0.4"? no (end of list) +>>> start sublist relay_hosts +>>> host in "10.0.0.4"? +>>> ╎list element: 10.0.0.4 +>>> host in "10.0.0.4"? no (end of list) +>>> end sublist relay_hosts >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 46) >>> check hosts = +auth_relay_hosts >>> host in "+auth_relay_hosts"? >>> list element: +auth_relay_hosts ->>> host in "10.0.0.3 : 10.0.0.4"? ->>> list element: 10.0.0.3 ->>> list element: 10.0.0.4 ->>> host in "10.0.0.3 : 10.0.0.4"? no (end of list) +>>> start sublist auth_relay_hosts +>>> host in "10.0.0.3 : 10.0.0.4"? +>>> ╎list element: 10.0.0.3 +>>> ╎list element: 10.0.0.4 +>>> host in "10.0.0.3 : 10.0.0.4"? no (end of list) +>>> end sublist auth_relay_hosts >>> host in "+auth_relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "deny" (TESTSUITE/test-config 50) @@ -312,6 +357,9 @@ LOG: H=(test.host) [10.0.0.1] F= A=mylogin rejected RCPT >>> check hosts = +auth_hosts >>> host in "+auth_hosts"? >>> list element: +auth_hosts +>>> start sublist auth_hosts +>>> cached yes match for +auth_hosts +>>> cached lookup data = NULL >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) >>> message: authentication required >>> check !authenticated = * @@ -324,15 +372,18 @@ LOG: H=(test.host) [10.0.0.1] F= A=mylogin rejected RCPT >>> end of ACL "check_vrfy": ACCEPT >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing userx@test.ex ->>> test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> test.ex in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") ->>> test.ex in "! +local_domains"? no (matched "! +local_domains") ->>> userx in "userx"? +>>> test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> test.ex in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' +>>> test.ex in domains? no (matched "! +local_domains") +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling localuser router >>> routed by localuser router >>> using ACL "check_expn" @@ -340,6 +391,9 @@ LOG: H=(test.host) [10.0.0.1] F= A=mylogin rejected RCPT >>> check hosts = +auth_hosts >>> host in "+auth_hosts"? >>> list element: +auth_hosts +>>> start sublist auth_hosts +>>> cached yes match for +auth_hosts +>>> cached lookup data = NULL >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) >>> message: authentication required >>> check !authenticated = * @@ -356,15 +410,18 @@ LOG: H=(test.host) [10.0.0.1] F= A=mylogin rejected RCPT >>> end of ACL "check_expn": ACCEPT >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing list@test.ex ->>> test.ex in "! +local_domains"? ->>> list element: ! +local_domains ->>> test.ex in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") ->>> test.ex in "! +local_domains"? no (matched "! +local_domains") ->>> list in "userx"? +>>> test.ex in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> test.ex in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' +>>> test.ex in domains? no (matched "! +local_domains") +>>> list in local_parts? >>> list element: userx ->>> list in "userx"? no (end of list) +>>> list in local_parts? no (end of list) >>> no more routers LOG: ETRN #abcd received from (test.host) [10.0.0.1] >>> using ACL "check_etrn" @@ -372,6 +429,9 @@ LOG: ETRN #abcd received from (test.host) [10.0.0.1] >>> check hosts = +auth_hosts >>> host in "+auth_hosts"? >>> list element: +auth_hosts +>>> start sublist auth_hosts +>>> cached yes match for +auth_hosts +>>> cached lookup data = NULL >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) >>> message: authentication required >>> check !authenticated = * @@ -416,23 +476,31 @@ LOG: H=(test.host) [10.0.0.1] Warning: accepted ETRN #abcd >>> list element: @ >>> list element: @[] >>> test.host in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * >>> host in pipelining_advertise_hosts? yes (matched "*") >>> host in auth_advertise_hosts? >>> list element: +auth_hosts ->>> host in "10.0.0.1"? ->>> list element: 10.0.0.1 ->>> host in "10.0.0.1"? no (end of list) +>>> start sublist auth_hosts +>>> host in "10.0.0.1"? +>>> ╎list element: 10.0.0.1 +>>> host in "10.0.0.1"? no (end of list) +>>> end sublist auth_hosts >>> list element: !+relay_hosts ->>> host in "10.0.0.4"? ->>> list element: 10.0.0.4 ->>> host in "10.0.0.4"? no (end of list) +>>> start sublist relay_hosts +>>> host in "10.0.0.4"? +>>> ╎list element: 10.0.0.4 +>>> host in "10.0.0.4"? no (end of list) +>>> end sublist relay_hosts >>> list element: +auth_relay_hosts ->>> host in "10.0.0.3 : 10.0.0.4"? ->>> list element: 10.0.0.3 ->>> host in "10.0.0.3 : 10.0.0.4"? yes (matched "10.0.0.3") +>>> start sublist auth_relay_hosts +>>> host in "10.0.0.3 : 10.0.0.4"? +>>> ╎list element: 10.0.0.3 +>>> ╎host in "10.0.0.3 : 10.0.0.4"? yes (matched "10.0.0.3") +>>> end sublist auth_relay_hosts >>> host in auth_advertise_hosts? yes (matched "+auth_relay_hosts") >>> host in chunking_advertise_hosts? >>> host in chunking_advertise_hosts? no (end of list) @@ -459,28 +527,39 @@ LOG: H=(test.host) [10.0.0.1] Warning: accepted ETRN #abcd >>> check hosts = +auth_hosts >>> host in "+auth_hosts"? >>> list element: +auth_hosts +>>> start sublist auth_hosts +>>> cached no match for +auth_hosts +>>> cached lookup data = NULL >>> host in "+auth_hosts"? no (end of list) >>> deny: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 44) >>> check domains = +local_domains >>> cus.cam.ac.uk in "+local_domains"? >>> list element: +local_domains ->>> cus.cam.ac.uk in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> list element: *.test.ex ->>> cus.cam.ac.uk in "test.ex : *.test.ex"? no (end of list) +>>> start sublist local_domains +>>> cus.cam.ac.uk in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎list element: *.test.ex +>>> cus.cam.ac.uk in "test.ex : *.test.ex"? no (end of list) +>>> end sublist local_domains >>> cus.cam.ac.uk in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 45) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts +>>> start sublist relay_hosts +>>> cached no match for +relay_hosts +>>> cached lookup data = NULL >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 46) >>> check hosts = +auth_relay_hosts >>> host in "+auth_relay_hosts"? >>> list element: +auth_relay_hosts +>>> start sublist auth_relay_hosts +>>> cached yes match for +auth_relay_hosts +>>> cached lookup data = NULL >>> host in "+auth_relay_hosts"? yes (matched "+auth_relay_hosts" - cached) >>> message: authentication required >>> check authenticated = * @@ -515,28 +594,39 @@ LOG: H=(test.host) [10.0.0.3] F= rejected RCPT >> check hosts = +auth_hosts >>> host in "+auth_hosts"? >>> list element: +auth_hosts +>>> start sublist auth_hosts +>>> cached no match for +auth_hosts +>>> cached lookup data = NULL >>> host in "+auth_hosts"? no (end of list) >>> deny: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 44) >>> check domains = +local_domains >>> cus.cam.ac.uk in "+local_domains"? >>> list element: +local_domains ->>> cus.cam.ac.uk in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> list element: *.test.ex ->>> cus.cam.ac.uk in "test.ex : *.test.ex"? no (end of list) +>>> start sublist local_domains +>>> cus.cam.ac.uk in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎list element: *.test.ex +>>> cus.cam.ac.uk in "test.ex : *.test.ex"? no (end of list) +>>> end sublist local_domains >>> cus.cam.ac.uk in "+local_domains"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 45) >>> check hosts = +relay_hosts >>> host in "+relay_hosts"? >>> list element: +relay_hosts +>>> start sublist relay_hosts +>>> cached no match for +relay_hosts +>>> cached lookup data = NULL >>> host in "+relay_hosts"? no (end of list) >>> accept: condition test failed in ACL "check_recipient" >>> processing "accept" (TESTSUITE/test-config 46) >>> check hosts = +auth_relay_hosts >>> host in "+auth_relay_hosts"? >>> list element: +auth_relay_hosts +>>> start sublist auth_relay_hosts +>>> cached yes match for +auth_relay_hosts +>>> cached lookup data = NULL >>> host in "+auth_relay_hosts"? yes (matched "+auth_relay_hosts" - cached) >>> message: authentication required >>> check authenticated = * @@ -567,23 +657,30 @@ LOG: H=(test.host) [10.0.0.3] F= rejected RCPT >> list element: @ >>> list element: @[] >>> test.host in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * >>> host in pipelining_advertise_hosts? yes (matched "*") >>> host in auth_advertise_hosts? >>> list element: +auth_hosts ->>> host in "10.0.0.1"? ->>> list element: 10.0.0.1 ->>> host in "10.0.0.1"? no (end of list) +>>> start sublist auth_hosts +>>> host in "10.0.0.1"? +>>> ╎list element: 10.0.0.1 +>>> host in "10.0.0.1"? no (end of list) +>>> end sublist auth_hosts >>> list element: !+relay_hosts ->>> host in "10.0.0.4"? ->>> list element: 10.0.0.4 ->>> host in "10.0.0.4"? yes (matched "10.0.0.4") +>>> start sublist relay_hosts +>>> host in "10.0.0.4"? +>>> ╎list element: 10.0.0.4 +>>> ╎host in "10.0.0.4"? yes (matched "10.0.0.4") +>>> end sublist relay_hosts >>> host in auth_advertise_hosts? no (matched "!+relay_hosts") >>> 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 @@ -632,6 +729,8 @@ testing.testing in helo_lookup_domains? no (end of list) sender_fullhost = (testing.testing) [10.0.0.5] sender_rcvhost = [10.0.0.5] (helo=testing.testing ident=CALLER) set_process_info: pppp handling incoming connection from (testing.testing) [10.0.0.5] U=CALLER + list element: * + host in limits_advertise_hosts? yes (matched "*") host in dsn_advertise_hosts? no (option unset) host in pipelining_advertise_hosts? list element: * @@ -669,6 +768,7 @@ host in chunking_advertise_hosts? host in chunking_advertise_hosts? no (end of list) SMTP>> 250-myhost.test.ex Hello CALLER at testing.testing [10.0.0.5] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY diff --git a/test/stderr/3404 b/test/stderr/3404 index 51e88fac3..d2fb903ad 100644 --- a/test/stderr/3404 +++ b/test/stderr/3404 @@ -1,7 +1,8 @@ LOG: MAIN <= CALLER@myhost.test.ex U=CALLER P=local S=sss delivering 10HmaX-000000005vi-0000 -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 ESMTP SMTP>> EHLO myhost.test.ex SMTP<< 250-OK @@ -22,7 +23,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected SMTP(shutdown)>> SMTP<< 250 OK SMTP(close)>> -cmdlog: '220:EHLO:250-:AUTH:235:MAIL:250:RCPT:250:DATA:354:.:250:QUIT:250' +cmdlog: '220:EHLO:250-:AUTH:235:MAIL:250:RCPT:250:DATA:354:.:250:QUIT+:250' LOG: MAIN => userx@domain.com R=all T=smtp H=127.0.0.1 [127.0.0.1] A=plain C="250 OK" LOG: MAIN @@ -30,7 +31,8 @@ LOG: MAIN LOG: MAIN <= CALLER@myhost.test.ex U=CALLER P=local S=sss delivering 10HmaY-000000005vi-0000 -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 ESMTP SMTP>> EHLO myhost.test.ex SMTP<< 250-OK @@ -51,7 +53,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected SMTP(shutdown)>> SMTP<< 250 OK SMTP(close)>> -cmdlog: '220:EHLO:250-:AUTH:235:MAIL:250:RCPT:250:DATA:354:.:250:QUIT:250' +cmdlog: '220:EHLO:250-:AUTH:235:MAIL:250:RCPT:250:DATA:354:.:250:QUIT+:250' LOG: MAIN => userx@domain.com R=all T=smtp H=127.0.0.1 [127.0.0.1] A=plain C="250 OK" LOG: MAIN @@ -59,7 +61,8 @@ LOG: MAIN LOG: MAIN <= CALLER@myhost.test.ex U=CALLER P=local S=sss delivering 10HmaZ-000000005vi-0000 -Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... +connected SMTP<< 220 ESMTP SMTP>> EHLO myhost.test.ex SMTP<< 250-OK @@ -84,7 +87,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... connected SMTP(shutdown)>> SMTP<< 250 OK SMTP(close)>> -cmdlog: '220:EHLO:250-:AUTH:300:********:300:********:235:MAIL:250:RCPT:250:DATA:354:.:250:QUIT:250' +cmdlog: '220:EHLO:250-:AUTH:300:********:300:********:235:MAIL:250:RCPT:250:DATA:354:.:250:QUIT+:250' LOG: MAIN => userx@domain.com R=all T=smtp H=127.0.0.1 [127.0.0.1] A=login C="250 OK" LOG: MAIN diff --git a/test/stderr/3408 b/test/stderr/3408 index 0dce33e58..9ba9b2e1f 100644 --- a/test/stderr/3408 +++ b/test/stderr/3408 @@ -10,6 +10,8 @@ >>> list element: @ >>> list element: @[] >>> exim.test.ex in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -75,6 +77,8 @@ LOG: 10HmaX-000000005vi-0000 <= postmaster@exim.test.ex H=(exim.test.ex) [V4NET. >>> list element: @ >>> list element: @[] >>> exim.test.ex in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -150,9 +154,9 @@ LOG: 10HmaX-000000005vi-0000 <= postmaster@exim.test.ex H=(exim.test.ex) [V4NET. >>> routing userx@exim.test.ex >>> calling system_aliases router >>> system_aliases router declined for userx@exim.test.ex ->>> userx in "userx"? +>>> userx in local_parts? >>> list element: userx ->>> userx in "userx"? yes (matched "userx") +>>> userx in local_parts? yes (matched "userx") >>> calling list router >>> routed by list router >>> ----------- end verify ------------ @@ -161,9 +165,12 @@ LOG: 10HmaX-000000005vi-0000 <= postmaster@exim.test.ex H=(exim.test.ex) [V4NET. >>> check domains = +local_domains >>> exim.test.ex in "+local_domains"? >>> list element: +local_domains ->>> exim.test.ex in "exim.test.ex"? ->>> list element: exim.test.ex ->>> exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") +>>> start sublist local_domains +>>> exim.test.ex in "exim.test.ex"? +>>> ╎list element: exim.test.ex +>>> ╎exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'exim.test.ex' value 'exim.test.ex' >>> exim.test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT diff --git a/test/stderr/3410 b/test/stderr/3410 index 81e1e5b21..926b7dd19 100644 --- a/test/stderr/3410 +++ b/test/stderr/3410 @@ -24,6 +24,8 @@ LOG: H=(test) [5.6.9.1] F= rejected RCPT : You must authenticate >>> list element: @ >>> list element: @[] >>> rhu.barb in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -75,6 +77,8 @@ LOG: H=(test) [5.6.10.1] F= rejected RCPT >>> list element: @ >>> list element: @[] >>> rhu.barb in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -112,6 +116,8 @@ LOG: H=(test) [5.6.10.1] F= rejected RCPT >>> list element: @ >>> list element: @[] >>> rhu.barb in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * diff --git a/test/stderr/3500 b/test/stderr/3500 index 523413d16..997fd6090 100644 --- a/test/stderr/3500 +++ b/test/stderr/3500 @@ -10,20 +10,26 @@ >>> list element: @ >>> list element: @[] >>> test.host in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * >>> host in pipelining_advertise_hosts? yes (matched "*") >>> host in auth_advertise_hosts? >>> list element: +auth_hosts ->>> host in "10.0.0.1 : 10.0.0.5"? ->>> list element: 10.0.0.1 ->>> list element: 10.0.0.5 ->>> host in "10.0.0.1 : 10.0.0.5"? no (end of list) +>>> start sublist auth_hosts +>>> host in "10.0.0.1 : 10.0.0.5"? +>>> ╎list element: 10.0.0.1 +>>> ╎list element: 10.0.0.5 +>>> host in "10.0.0.1 : 10.0.0.5"? no (end of list) +>>> end sublist auth_hosts >>> list element: !+relay_hosts ->>> host in "10.0.0.4"? ->>> list element: 10.0.0.4 ->>> host in "10.0.0.4"? yes (matched "10.0.0.4") +>>> start sublist relay_hosts +>>> host in "10.0.0.4"? +>>> ╎list element: 10.0.0.4 +>>> ╎host in "10.0.0.4"? yes (matched "10.0.0.4") +>>> end sublist relay_hosts >>> host in auth_advertise_hosts? no (matched "!+relay_hosts") >>> host in chunking_advertise_hosts? >>> host in chunking_advertise_hosts? no (end of list) @@ -39,15 +45,19 @@ >>> list element: @ >>> list element: @[] >>> test.host in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * >>> host in pipelining_advertise_hosts? yes (matched "*") >>> host in auth_advertise_hosts? >>> list element: +auth_hosts ->>> host in "10.0.0.1 : 10.0.0.5"? ->>> list element: 10.0.0.1 ->>> host in "10.0.0.1 : 10.0.0.5"? yes (matched "10.0.0.1") +>>> start sublist auth_hosts +>>> host in "10.0.0.1 : 10.0.0.5"? +>>> ╎list element: 10.0.0.1 +>>> ╎host in "10.0.0.1 : 10.0.0.5"? yes (matched "10.0.0.1") +>>> end sublist auth_hosts >>> host in auth_advertise_hosts? yes (matched "+auth_hosts") >>> host in chunking_advertise_hosts? >>> host in chunking_advertise_hosts? no (end of list) @@ -84,6 +94,9 @@ >>> check hosts = +auth_hosts >>> host in "+auth_hosts"? >>> list element: +auth_hosts +>>> start sublist auth_hosts +>>> cached yes match for +auth_hosts +>>> cached lookup data = NULL >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) >>> message: authentication required >>> check !authenticated = * @@ -95,9 +108,12 @@ >>> check domains = +local_domains >>> test.ex in "+local_domains"? >>> list element: +local_domains ->>> test.ex in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> start sublist local_domains +>>> test.ex in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") +>>> end sublist local_domains +>>> data from lookup saved for cache for +local_domains: key 'test.ex' value 'test.ex' >>> test.ex in "+local_domains"? yes (matched "+local_domains") >>> accept: condition test succeeded in ACL "check_recipient" >>> end of ACL "check_recipient": ACCEPT @@ -115,16 +131,20 @@ LOG: 10HmaY-000000005vi-0000 <= userx@some.domain H=(test.host) [10.0.0.1] P=esm >>> list element: @ >>> list element: @[] >>> test.host in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * >>> host in pipelining_advertise_hosts? yes (matched "*") >>> host in auth_advertise_hosts? >>> list element: +auth_hosts ->>> host in "10.0.0.1 : 10.0.0.5"? ->>> list element: 10.0.0.1 ->>> list element: 10.0.0.5 ->>> host in "10.0.0.1 : 10.0.0.5"? yes (matched "10.0.0.5") +>>> start sublist auth_hosts +>>> host in "10.0.0.1 : 10.0.0.5"? +>>> ╎list element: 10.0.0.1 +>>> ╎list element: 10.0.0.5 +>>> ╎host in "10.0.0.1 : 10.0.0.5"? yes (matched "10.0.0.5") +>>> end sublist auth_hosts >>> host in auth_advertise_hosts? yes (matched "+auth_hosts") >>> host in chunking_advertise_hosts? >>> host in chunking_advertise_hosts? no (end of list) diff --git a/test/stderr/4001 b/test/stderr/4001 index 042d6a204..e34bdfde1 100644 --- a/test/stderr/4001 +++ b/test/stderr/4001 @@ -10,6 +10,8 @@ >>> list element: @ >>> list element: @[] >>> mailserver.test in helo_lookup_domains? no (end of list) +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * diff --git a/test/stderr/4052 b/test/stderr/4052 index 83232342c..f90265149 100644 --- a/test/stderr/4052 +++ b/test/stderr/4052 @@ -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 @@ -29,8 +31,9 @@ not using DSN SMTP|> RCPT TO: SMTP>> DATA cmd buf flush ddd bytes -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... sending dd nonTFO early-data - connected +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... +sending dd nonTFO early-data +connected smtp_reap_early_pipe expect banner SMTP<< 220 banner smtp_reap_early_pipe expect ehlo @@ -63,8 +66,9 @@ cmd buf flush ddd bytes (more expected) ok=1 send_quit=0 send_rset=0 continue_more=0 yield=0 first_address is NULL SMTP<< 220 bye SMTP(close)>> -cmdlog: 'EHLO|:MAIL|:RCPT|:DATA:220:250-:250:250:354:.:QUIT:250:220' +cmdlog: 'EHLO|:MAIL|:RCPT|:DATA:220:250-:250:250:354:.:QUIT+:250:220' Leaving smtp transport +>>>>>>>>>>>>>>>> Exim pid=p1243 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN => extchange@test.ex R=client T=smtp H=127.0.0.1 [127.0.0.1] L* C="250 message accepted" LOG: MAIN diff --git a/test/stderr/4510 b/test/stderr/4510 index da20c0d30..3b73b82f0 100644 --- a/test/stderr/4510 +++ b/test/stderr/4510 @@ -1,19 +1,23 @@ 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 dropping to exim gid; retaining priv uid -Connecting to ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4]:PORT_D ... connected +Connecting to ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4]:PORT_D ... +connected SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello the.local.host.name [ip4.ip4.ip4.ip4] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -51,12 +55,13 @@ DKIM [test.ex] Header sha256 computed: 241e16230df5723d899cfae9474c6b376a2ab1f81 SMTP+> QUIT cmd buf flush ddd bytes (more expected) SMTP(shutdown)>> - SMTP<< 250 OK id=10HmbL-000000005vi-0000 + SMTP<< 250 OK id=10HmbN-000000005vi-0000 SMTP<< 221 myhost.test.ex closing connection SMTP(close)>> -cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:354:.:QUIT:250:221' +cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:354:.:QUIT+:250:221' +>>>>>>>>>>>>>>>> Exim pid=p1237 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN - => d@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] C="250 OK id=10HmbL-000000005vi-0000" + => d@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] DKIM=test.ex:sel_bad C="250 OK id=10HmbN-000000005vi-0000" LOG: MAIN Completed >>>>>>>>>>>>>>>> Exim pid=p1236 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/4530 b/test/stderr/4530 index b0126b584..0484105f5 100644 --- a/test/stderr/4530 +++ b/test/stderr/4530 @@ -1,19 +1,23 @@ 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 dropping to exim gid; retaining priv uid -Connecting to ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4]:PORT_D ... connected +Connecting to ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4]:PORT_D ... +connected SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello the.local.host.name [ip4.ip4.ip4.ip4] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -21,10 +25,12 @@ cmd buf flush ddd bytes SMTP>> STARTTLS cmd buf flush ddd bytes SMTP<< 220 TLS go ahead +ip4.ip4.ip4.ip4 in tls_verify_cert_hostnames? no (end of list) SMTP>> EHLO myhost.test.ex cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello the.local.host.name [ip4.ip4.ip4.ip4] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -65,8 +71,9 @@ cmd buf flush ddd bytes SMTP<< 221 myhost.test.ex closing connection SMTP(close)>> cmdlog: '220:EHLO:250-:STARTTLS:220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:354:.:QUIT:250:221' +>>>>>>>>>>>>>>>> Exim pid=p1237 (transport) terminating with rc=0 >>>>>>>>>>>>>>>> LOG: MAIN - => d@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbL-000000005vi-0000" + => d@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes DKIM=test.ex:sel_bad C="250 OK id=10HmbL-000000005vi-0000" LOG: MAIN Completed >>>>>>>>>>>>>>>> Exim pid=p1236 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/4802 b/test/stderr/4802 index 25abeaef6..72a915d0b 100644 --- a/test/stderr/4802 +++ b/test/stderr/4802 @@ -1,20 +1,22 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config admin user dropping to exim gid; retaining priv uid -DNS lookup of mx-sec-a-aa.test.ex (MX) using fakens -DNS lookup of mx-sec-a-aa.test.ex (MX) succeeded -DNS lookup of a-aa.test.ex (A) using fakens -DNS lookup of a-aa.test.ex (A) succeeded + DNS lookup of mx-sec-a-aa.test.ex (MX) using fakens + DNS lookup of mx-sec-a-aa.test.ex (MX) succeeded + DNS lookup of a-aa.test.ex (A) using fakens + DNS lookup of a-aa.test.ex (A) succeeded 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 -DNS lookup of mx-aa-a-sec.test.ex (MX) using fakens -DNS lookup of mx-aa-a-sec.test.ex (MX) succeeded -DNS lookup of mx-aa-a-sec.test.ex (MX) requested AD, but got AA -DNS lookup of a-sec.test.ex (A) using fakens -DNS lookup of a-sec.test.ex (A) succeeded + DNS lookup of mx-aa-a-sec.test.ex (MX) using fakens + DNS lookup of mx-aa-a-sec.test.ex (MX) succeeded + DNS lookup of mx-aa-a-sec.test.ex (MX) requested AD, but got AA + DNS lookup of a-sec.test.ex (A) using fakens + DNS lookup of a-sec.test.ex (A) succeeded >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/4803 b/test/stderr/4803 index 1f55809fa..c22fbdc7f 100644 --- a/test/stderr/4803 +++ b/test/stderr/4803 @@ -1,24 +1,26 @@ Exim version x.yz .... +Hints DB: configuration file is TESTSUITE/test-config admin user dropping to exim gid; retaining priv uid -DNS lookup of mx-sec-a-aa.test.ex (MX) using fakens -DNS lookup of mx-sec-a-aa.test.ex (MX) succeeded -DNS lookup of a-aa.test.ex (A) using fakens -DNS lookup of a-aa.test.ex (A) succeeded -DNS faked the AD bit (got AA and matched with dns_trust_aa (test.ex in *)) -DNS faked the AD bit (got AA and matched with dns_trust_aa (test.ex in *)) -DNS faked the AD bit (got AA and matched with dns_trust_aa (test.ex in *)) + DNS lookup of mx-sec-a-aa.test.ex (MX) using fakens + DNS lookup of mx-sec-a-aa.test.ex (MX) succeeded + DNS lookup of a-aa.test.ex (A) using fakens + DNS lookup of a-aa.test.ex (A) succeeded + DNS faked the AD bit (got AA and matched with dns_trust_aa (test.ex in *)) + DNS faked the AD bit (got AA and matched with dns_trust_aa (test.ex in *)) + 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 -DNS lookup of mx-aa-a-sec.test.ex (MX) using fakens -DNS lookup of mx-aa-a-sec.test.ex (MX) succeeded -DNS faked the AD bit (got AA and matched with dns_trust_aa (test.ex in *)) -DNS faked the AD bit (got AA and matched with dns_trust_aa (test.ex in *)) -DNS faked the AD bit (got AA and matched with dns_trust_aa (test.ex in *)) -DNS lookup of a-sec.test.ex (A) using fakens -DNS lookup of a-sec.test.ex (A) succeeded + DNS lookup of mx-aa-a-sec.test.ex (MX) using fakens + DNS lookup of mx-aa-a-sec.test.ex (MX) succeeded + DNS faked the AD bit (got AA and matched with dns_trust_aa (test.ex in *)) + DNS faked the AD bit (got AA and matched with dns_trust_aa (test.ex in *)) + DNS faked the AD bit (got AA and matched with dns_trust_aa (test.ex in *)) + DNS lookup of a-sec.test.ex (A) using fakens + DNS lookup of a-sec.test.ex (A) succeeded >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/5000 b/test/stderr/5000 index 843b20242..7ff1d8f2d 100644 --- a/test/stderr/5000 +++ b/test/stderr/5000 @@ -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 @@ -43,6 +45,7 @@ mailbox quota exceeded maildir: time since "new" directory modified = 10s Exim quota exceeded for tmp/dddddddddd.HddddddPddddd.myhost.test.ex appendfile yields 1 with errno=-22 more_errno=dd +>>>>>>>>>>>>>>>> Exim pid=p1236 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> maildir_taggedX_appendfile transport returned DEFER for userx@myhost.test.ex added retry item for T:userx@myhost.test.ex: errno=-22 more_errno=dd flags=0 LOG: MAIN diff --git a/test/stderr/5004 b/test/stderr/5004 index d92e7a7d2..dd78e2352 100644 --- a/test/stderr/5004 +++ b/test/stderr/5004 @@ -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 @@ -21,15 +22,15 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=F: From: CALLER_NAME search_tidyup called >>Headers after rewriting and local additions: -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaX-000000005vi-0000-D Data file written for message 10HmaX-000000005vi-0000 @@ -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 @@ -74,8 +76,6 @@ body_linecount=1 message_linecount=8 DSN: set orcpt: flags: 0x0 Delivery address list: userx@test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -112,8 +112,6 @@ r1 router generated TESTSUITE/test-mail routed by r1 router envelope to: userx@test.ex transport: - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -132,8 +130,6 @@ After routing: search_tidyup called >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> TESTSUITE/test-mail <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -161,6 +157,7 @@ renaming temporary file renamed tmp/MAILDIR.mail.test.ex as new/MAILDIR.mail.test.ex appendfile yields 0 with errno=dd more_errno=dd search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1237 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling TESTSUITE/test-mail:userx@test.ex t1 transport returned OK for TESTSUITE/test-mail post-process TESTSUITE/test-mail (0) @@ -173,12 +170,12 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1235 set_process_info: pppp tidying up after delivering 10HmaX-000000005vi-0000 Processing retry items -Succeeded addresses: - TESTSUITE/test-mail: no retry items - userx@test.ex: no retry items - userx@test.ex: no retry items -Failed addresses: -Deferred addresses: + Succeeded addresses: + TESTSUITE/test-mail: no retry items + userx@test.ex: no retry items + userx@test.ex: no retry items + Failed addresses: + Deferred addresses: end of retry processing DSN: processing router : r1 DSN: processing successful delivery address: TESTSUITE/test-mail diff --git a/test/stderr/5005 b/test/stderr/5005 index b9512666c..879ec0ed9 100644 --- a/test/stderr/5005 +++ b/test/stderr/5005 @@ -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 @@ -19,15 +20,15 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=F: From: CALLER_NAME search_tidyup called >>Headers after rewriting and local additions: -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaX-000000005vi-0000-D Data file written for message 10HmaX-000000005vi-0000 @@ -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 @@ -70,8 +72,6 @@ body_linecount=1 message_linecount=8 DSN: set orcpt: flags: 0x0 Delivery address list: nofile@test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -107,8 +107,6 @@ After routing: search_tidyup called >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> nofile@test.ex <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -124,7 +122,7 @@ appendfile: mode=600 notify_comsat=0 quota=500 warning=0 message_prefix=null message_suffix=null maildir_use_size_file=yes -de-tainting path 'TESTSUITE/test-mail/nofile' +below-home: de-tainting path 'TESTSUITE/test-mail/nofile' ensuring maildir directories exist in TESTSUITE/test-mail/nofile created directory TESTSUITE/test-mail/nofile created directory TESTSUITE/test-mail/nofile/tmp @@ -157,6 +155,7 @@ renaming temporary file renamed tmp/MAILDIR.myhost.test.ex as new/MAILDIR.myhost.test.ex appendfile yields 0 with errno=dd more_errno=dd search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1236 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling nofile@test.ex t1 transport returned OK for nofile@test.ex post-process nofile@test.ex (0) @@ -168,10 +167,10 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1235 set_process_info: pppp tidying up after delivering 10HmaX-000000005vi-0000 Processing retry items -Succeeded addresses: - nofile@test.ex: no retry items -Failed addresses: -Deferred addresses: + Succeeded addresses: + nofile@test.ex: no retry items + Failed addresses: + Deferred addresses: end of retry processing DSN: processing router : r1 DSN: processing successful delivery address: nofile@test.ex @@ -190,6 +189,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 @@ -210,15 +210,15 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=F: From: CALLER_NAME search_tidyup called >>Headers after rewriting and local additions: -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaY-000000005vi-0000-D Data file written for message 10HmaY-000000005vi-0000 @@ -237,6 +237,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 @@ -260,8 +261,6 @@ body_linecount=1 message_linecount=8 DSN: set orcpt: flags: 0x0 Delivery address list: userx@test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -297,8 +296,6 @@ After routing: search_tidyup called >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> userx@test.ex <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -314,7 +311,7 @@ appendfile: mode=600 notify_comsat=0 quota=500 warning=0 message_prefix=null message_suffix=null maildir_use_size_file=yes -de-tainting path 'TESTSUITE/test-mail/userx' +below-home: de-tainting path 'TESTSUITE/test-mail/userx' ensuring maildir directories exist in TESTSUITE/test-mail/userx created directory TESTSUITE/test-mail/userx/tmp created directory TESTSUITE/test-mail/userx/new @@ -349,6 +346,7 @@ renaming temporary file renamed tmp/MAILDIR.myhost.test.ex as new/MAILDIR.myhost.test.ex appendfile yields 0 with errno=dd more_errno=dd search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1239 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling userx@test.ex t1 transport returned OK for userx@test.ex post-process userx@test.ex (0) @@ -360,10 +358,10 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1238 set_process_info: pppp tidying up after delivering 10HmaY-000000005vi-0000 Processing retry items -Succeeded addresses: - userx@test.ex: no retry items -Failed addresses: -Deferred addresses: + Succeeded addresses: + userx@test.ex: no retry items + Failed addresses: + Deferred addresses: end of retry processing DSN: processing router : r1 DSN: processing successful delivery address: userx@test.ex @@ -382,6 +380,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 @@ -402,15 +401,15 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=F: From: CALLER_NAME search_tidyup called >>Headers after rewriting and local additions: -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaZ-000000005vi-0000-D Data file written for message 10HmaZ-000000005vi-0000 @@ -429,6 +428,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 @@ -452,8 +452,6 @@ body_linecount=1 message_linecount=8 DSN: set orcpt: flags: 0x0 Delivery address list: userx@test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -489,8 +487,6 @@ After routing: search_tidyup called >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> userx@test.ex <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -506,7 +502,7 @@ appendfile: mode=600 notify_comsat=0 quota=500 warning=0 message_prefix=null message_suffix=null maildir_use_size_file=yes -de-tainting path 'TESTSUITE/test-mail/userx' +below-home: de-tainting path 'TESTSUITE/test-mail/userx' ensuring maildir directories exist in TESTSUITE/test-mail/userx compiling RE '^(?:cur|new|\..*)$' using regex for maildir directory selection: ^(?:cur|new|\..*)$ @@ -536,6 +532,7 @@ maildir: time since "new" directory modified = 10s Exim quota exceeded for tmp/dddddddddd.HddddddPddddd.myhost.test.ex appendfile yields 1 with errno=-22 more_errno=dd search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1242 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> t1 transport returned DEFER for userx@test.ex added retry item for T:userx@test.ex: errno=-22 more_errno=dd flags=0 post-process userx@test.ex (1) @@ -546,31 +543,30 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1241 set_process_info: pppp tidying up after delivering 10HmaZ-000000005vi-0000 Processing retry items -Succeeded addresses: -Failed addresses: -Deferred addresses: - userx@test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile - EXIM_DBOPEN: file dir flags=O_RDWR - returned from EXIM_DBOPEN: 0xAAAAAAAA - opened hints database TESTSUITE/spool/db/retry: flags=O_RDWR - userx@test.ex in "*"? - list element: * - address match test: subject=userx@test.ex pattern=* - test.ex in "*"? + Succeeded addresses: + Failed addresses: + Deferred addresses: + userx@test.ex + EXIM_DBOPEN: file dir flags=O_RDWR + returned from EXIM_DBOPEN: 0xAAAAAAAA + opened hints database TESTSUITE/spool/db/retry: flags=O_RDWR + userx@test.ex in "*"? list element: * - test.ex in "*"? yes (matched "*") - userx@test.ex in "*"? yes (matched "*") -retry for T:userx@test.ex = * 0 0 - dbfn_read: key=T:userx@test.ex -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 - EXIM_DBCLOSE(0xAAAAAAAA) - closed hints database and lockfile + address match test: subject=userx@test.ex pattern=* + test.ex in "*"? + ╎list element: * + ╎test.ex in "*"? yes (matched "*") + 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 datalen 154 + EXIM_DBCLOSE(0xAAAAAAAA) + closed hints database end of retry processing delivery deferred: update_spool=1 header_rewritten=0 Writing spool header file: TESTSUITE/spool//input//hdr.10HmaZ-000000005vi-0000 @@ -584,6 +580,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 @@ -604,15 +601,15 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=F: From: CALLER_NAME search_tidyup called >>Headers after rewriting and local additions: -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmbA-000000005vi-0000-D Data file written for message 10HmbA-000000005vi-0000 @@ -631,6 +628,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 @@ -654,8 +652,6 @@ body_linecount=1 message_linecount=8 DSN: set orcpt: flags: 0x0 Delivery address list: userx@test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: 0xAAAAAAAA opened hints database TESTSUITE/spool/db/retry: flags=O_RDONLY @@ -663,13 +659,16 @@ 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: + dbfn_read: null return no domain retry record no address retry record userx@test.ex: queued for routing EXIM_DBCLOSE(0xAAAAAAAA) - closed hints database and lockfile + closed hints database >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> routing userx@test.ex --------> r1 router <-------- @@ -695,16 +694,15 @@ After routing: search_tidyup called >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> userx@test.ex <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY 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) - closed hints database and lockfile + closed hints database search_tidyup called changed uid/gid: local delivery to userx transport=t1 uid=CALLER_UID gid=CALLER_GID pid=p1245 @@ -716,7 +714,7 @@ appendfile: mode=600 notify_comsat=0 quota=500 warning=0 message_prefix=null message_suffix=null maildir_use_size_file=yes -de-tainting path 'TESTSUITE/test-mail/userx' +below-home: de-tainting path 'TESTSUITE/test-mail/userx' ensuring maildir directories exist in TESTSUITE/test-mail/userx compiling RE '^(?:cur|new|\..*)$' using regex for maildir directory selection: ^(?:cur|new|\..*)$ @@ -733,6 +731,7 @@ maildir: time since "new" directory modified = 10s Exim quota exceeded for tmp/dddddddddd.HddddddPddddd.myhost.test.ex appendfile yields 1 with errno=-22 more_errno=dd search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1245 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> t1 transport returned DEFER for userx@test.ex added retry item for T:userx@test.ex: errno=-22 more_errno=dd flags=0 post-process userx@test.ex (1) @@ -743,31 +742,30 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1244 set_process_info: pppp tidying up after delivering 10HmbA-000000005vi-0000 Processing retry items -Succeeded addresses: -Failed addresses: -Deferred addresses: - userx@test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile - EXIM_DBOPEN: file dir flags=O_RDWR - returned from EXIM_DBOPEN: 0xAAAAAAAA - opened hints database TESTSUITE/spool/db/retry: flags=O_RDWR - userx@test.ex in "*"? - list element: * - address match test: subject=userx@test.ex pattern=* - test.ex in "*"? + Succeeded addresses: + Failed addresses: + Deferred addresses: + userx@test.ex + EXIM_DBOPEN: file dir flags=O_RDWR + returned from EXIM_DBOPEN: 0xAAAAAAAA + opened hints database TESTSUITE/spool/db/retry: flags=O_RDWR + userx@test.ex in "*"? list element: * - test.ex in "*"? yes (matched "*") - userx@test.ex in "*"? yes (matched "*") -retry for T:userx@test.ex = * 0 0 - dbfn_read: key=T:userx@test.ex -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 - EXIM_DBCLOSE(0xAAAAAAAA) - closed hints database and lockfile + address match test: subject=userx@test.ex pattern=* + test.ex in "*"? + ╎list element: * + ╎test.ex in "*"? yes (matched "*") + 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 datalen 154 + EXIM_DBCLOSE(0xAAAAAAAA) + closed hints database end of retry processing delivery deferred: update_spool=1 header_rewritten=0 Writing spool header file: TESTSUITE/spool//input//hdr.10HmbA-000000005vi-0000 diff --git a/test/stderr/5006 b/test/stderr/5006 index 25a76f693..5d9c35fcd 100644 --- a/test/stderr/5006 +++ b/test/stderr/5006 @@ -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 @@ -19,15 +20,15 @@ search_tidyup called >>Headers received: qualify & rewrite recipients list -global rewrite rules -rewrite headers +rewrite rules on sender address +qualify and rewrite headers rewrite_one_header: type=F: From: CALLER_NAME search_tidyup called >>Headers after rewriting and local additions: -I Message-Id: -F From: CALLER_NAME - Date: Tue, 2 Mar 1999 09:44:33 +0000 + I Message-Id: + F From: CALLER_NAME + Date: Tue, 2 Mar 1999 09:44:33 +0000 Data file name: TESTSUITE/spool//input//10HmaX-000000005vi-0000-D Data file written for message 10HmaX-000000005vi-0000 @@ -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 @@ -70,8 +72,6 @@ body_linecount=1 message_linecount=8 DSN: set orcpt: flags: 0x0 Delivery address list: userx@test.ex - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -107,8 +107,6 @@ After routing: search_tidyup called >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> userx@test.ex <-------- - locking TESTSUITE/spool/db/retry.lockfile - locked TESTSUITE/spool/db/retry.lockfile EXIM_DBOPEN: file dir flags=O_RDONLY returned from EXIM_DBOPEN: (nil) failed to open DB file TESTSUITE/spool/db/retry: No such file or directory @@ -124,7 +122,7 @@ appendfile: mode=600 notify_comsat=0 quota=0 warning=50% message_prefix=null message_suffix=null maildir_use_size_file=yes -de-tainting path 'TESTSUITE/test-mail/userx' +below-home: de-tainting path 'TESTSUITE/test-mail/userx' ensuring maildir directories exist in TESTSUITE/test-mail/userx created directory TESTSUITE/test-mail/userx created directory TESTSUITE/test-mail/userx/tmp @@ -155,6 +153,7 @@ renaming temporary file renamed tmp/MAILDIR.myhost.test.ex as new/MAILDIR.myhost.test.ex appendfile yields 0 with errno=dd more_errno=dd search_tidyup called +>>>>>>>>>>>>>>>> Exim pid=p1236 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> journalling userx@test.ex t1 transport returned OK for userx@test.ex post-process userx@test.ex (0) @@ -166,10 +165,10 @@ changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=p1235 set_process_info: pppp tidying up after delivering 10HmaX-000000005vi-0000 Processing retry items -Succeeded addresses: - userx@test.ex: no retry items -Failed addresses: -Deferred addresses: + Succeeded addresses: + userx@test.ex: no retry items + Failed addresses: + Deferred addresses: end of retry processing DSN: processing router : r1 DSN: processing successful delivery address: userx@test.ex diff --git a/test/stderr/5008 b/test/stderr/5008 index 648ebd046..3a572fab1 100644 --- a/test/stderr/5008 +++ b/test/stderr/5008 @@ -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 @@ -17,7 +19,7 @@ appendfile: mode=600 notify_comsat=0 quota=1048576 warning=0 message_prefix=null message_suffix=null maildir_use_size_file=no -de-tainting path 'TESTSUITE/test-mail/userx' +below-home: de-tainting path 'TESTSUITE/test-mail/userx' ensuring maildir directories exist in TESTSUITE/test-mail/userx created directory TESTSUITE/test-mail/userx created directory TESTSUITE/test-mail/userx/tmp @@ -32,6 +34,7 @@ writing data block fd=dddd size=sss timeout=0 renaming temporary file renamed tmp/MAILDIR.myhost.test.ex as new/MAILDIR.myhost.test.ex appendfile yields 0 with errno=dd more_errno=dd +>>>>>>>>>>>>>>>> Exim pid=p1236 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> t1 transport returned OK for userx@test.ex LOG: MAIN => userx R=r1 T=t1 @@ -40,11 +43,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 @@ -57,7 +62,7 @@ appendfile: mode=600 notify_comsat=0 quota=1048576 warning=0 message_prefix=null message_suffix=null maildir_use_size_file=no -de-tainting path 'TESTSUITE/test-mail/userx' +below-home: de-tainting path 'TESTSUITE/test-mail/userx' ensuring maildir directories exist in TESTSUITE/test-mail/userx quota checks on directory TESTSUITE/test-mail/userx MUNGED: the check_dir_size lines have been sorted to ensure consistency @@ -74,10 +79,11 @@ writing data block fd=dddd size=sss timeout=0 renaming temporary file renamed tmp/MAILDIR.myhost.test.ex as new/MAILDIR.myhost.test.ex appendfile yields 0 with errno=dd more_errno=dd +>>>>>>>>>>>>>>>> Exim pid=p1239 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> t1 transport returned OK for userx@test.ex LOG: MAIN => userx R=r1 T=t1 LOG: MAIN Completed ->>>>>>>>>>>>>>>> Exim pid=p1237 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1238 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/5204 b/test/stderr/5204 index 63238c27c..d2f548258 100644 --- a/test/stderr/5204 +++ b/test/stderr/5204 @@ -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 @@ -9,10 +10,14 @@ routing "DECLINE cannot route this one (DECLINE)"@some.host --------> b router <-------- local_part=decline cannot route this one (decline) domain=some.host checking senders +myhost.test.ex in ""? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) b router skipped: senders mismatch --------> q router <-------- local_part=DECLINE cannot route this one (DECLINE) domain=some.host checking domains +some.host in "test.ex"? no (end of list) +some.host in domains? yes (end of list) calling q router q router called for "DECLINE cannot route this one (DECLINE)"@some.host: domain = some.host requires uid=EXIM_UID gid=EXIM_GID current_directory=/ @@ -22,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 @@ -30,10 +36,14 @@ routing "FAIL cannot route this one (FAIL)"@some.host --------> b router <-------- local_part=fail cannot route this one (fail) domain=some.host checking senders +myhost.test.ex in ""? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) b router skipped: senders mismatch --------> q router <-------- local_part=FAIL cannot route this one (FAIL) domain=some.host checking domains +some.host in "test.ex"? no (end of list) +some.host in domains? yes (end of list) calling q router q router called for "FAIL cannot route this one (FAIL)"@some.host: domain = some.host requires uid=EXIM_UID gid=EXIM_GID current_directory=/ @@ -41,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 @@ -49,10 +60,14 @@ routing "ERROR cannot route this one (ERROR)"@some.host --------> b router <-------- local_part=error cannot route this one (error) domain=some.host checking senders +myhost.test.ex in ""? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) b router skipped: senders mismatch --------> q router <-------- local_part=ERROR cannot route this one (ERROR) domain=some.host checking domains +some.host in "test.ex"? no (end of list) +some.host in domains? yes (end of list) calling q router q router called for "ERROR cannot route this one (ERROR)"@some.host: domain = some.host requires uid=EXIM_UID gid=EXIM_GID current_directory=/ @@ -63,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 @@ -71,10 +87,14 @@ routing "DEFER cannot route this one (DEFER)"@some.host --------> b router <-------- local_part=defer cannot route this one (defer) domain=some.host checking senders +myhost.test.ex in ""? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) b router skipped: senders mismatch --------> q router <-------- local_part=DEFER cannot route this one (DEFER) domain=some.host checking domains +some.host in "test.ex"? no (end of list) +some.host in domains? yes (end of list) calling q router q router called for "DEFER cannot route this one (DEFER)"@some.host: domain = some.host requires uid=EXIM_UID gid=EXIM_GID current_directory=/ @@ -83,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 @@ -91,10 +112,14 @@ routing "ACCEPT transport = other_smtp hosts=ten-1.test.ex"@some.host --------> b router <-------- local_part=accept transport = other_smtp hosts=ten-1.test.ex domain=some.host checking senders +myhost.test.ex in ""? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) b router skipped: senders mismatch --------> q router <-------- local_part=ACCEPT transport = other_smtp hosts=ten-1.test.ex domain=some.host checking domains +some.host in "test.ex"? no (end of list) +some.host in domains? yes (end of list) calling q router q router called for "ACCEPT transport = other_smtp hosts=ten-1.test.ex"@some.host: domain = some.host requires uid=EXIM_UID gid=EXIM_GID current_directory=/ @@ -111,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 @@ -119,10 +145,14 @@ routing PASS@some.host --------> b router <-------- local_part=pass domain=some.host checking senders +myhost.test.ex in ""? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) b router skipped: senders mismatch --------> q router <-------- local_part=PASS domain=some.host checking domains +some.host in "test.ex"? no (end of list) +some.host in domains? yes (end of list) calling q router q router called for PASS@some.host: domain = some.host requires uid=EXIM_UID gid=EXIM_GID current_directory=/ @@ -131,6 +161,7 @@ q router passed for PASS@some.host --------> s router <-------- local_part=pass domain=some.host checking domains +some.host in domains? yes (end of list) calling s router s router called for PASS@some.host domain = some.host @@ -151,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 @@ -159,10 +191,14 @@ routing "FREEZE cannot route this one (FREEZE)"@some.host --------> b router <-------- local_part=freeze cannot route this one (freeze) domain=some.host checking senders +myhost.test.ex in ""? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) b router skipped: senders mismatch --------> q router <-------- local_part=FREEZE cannot route this one (FREEZE) domain=some.host checking domains +some.host in "test.ex"? no (end of list) +some.host in domains? yes (end of list) calling q router q router called for "FREEZE cannot route this one (FREEZE)"@some.host: domain = some.host requires uid=EXIM_UID gid=EXIM_GID current_directory=/ @@ -171,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 @@ -179,10 +216,14 @@ routing "REDIRECT postmaster@test.ex"@some.host --------> b router <-------- local_part=redirect postmaster@test.ex domain=some.host checking senders +myhost.test.ex in ""? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) b router skipped: senders mismatch --------> q router <-------- local_part=REDIRECT postmaster@test.ex domain=some.host checking domains +some.host in "test.ex"? no (end of list) +some.host in domains? yes (end of list) calling q router q router called for "REDIRECT postmaster@test.ex"@some.host: domain = some.host requires uid=EXIM_UID gid=EXIM_GID current_directory=/ @@ -201,6 +242,8 @@ routing postmaster@test.ex --------> b router <-------- local_part=postmaster domain=test.ex checking senders +myhost.test.ex in ""? no (end of list) +CALLER@myhost.test.ex in senders? no (end of list) b router skipped: senders mismatch --------> q router <-------- local_part=postmaster domain=test.ex @@ -226,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) @@ -242,6 +286,8 @@ some.name in helo_lookup_domains? list element: @ list element: @[] some.name in helo_lookup_domains? no (end of list) + list element: * + host in limits_advertise_hosts? yes (matched "*") host in dsn_advertise_hosts? no (option unset) host in pipelining_advertise_hosts? list element: * @@ -255,21 +301,23 @@ routing "FAIL cannot route this one (FAIL)"@some.host --------> b router <-------- local_part=fail cannot route this one (fail) domain=some.host checking senders -x@y in ":"? +x@y in senders? list element: y in ""? y in ""? no (end of list) -x@y in ":"? no (end of list) +x@y in senders? no (end of list) b router skipped: senders mismatch --------> q router <-------- local_part=FAIL cannot route this one (FAIL) domain=some.host checking domains -some.host in "! +local_domains"? - list element: ! +local_domains - some.host in "test.ex"? - list element: test.ex - some.host in "test.ex"? no (end of list) -some.host in "! +local_domains"? yes (end of list) +some.host in domains? + list element: !░+local_domains + start sublist local_domains + some.host in "test.ex"? + ╎list element: test.ex + some.host in "test.ex"? no (end of list) + end sublist local_domains +some.host in domains? yes (end of list) calling q router q router called for "FAIL cannot route this one (FAIL)"@some.host: domain = some.host requires uid=CALLER_UID gid=CALLER_GID current_directory=/ diff --git a/test/stderr/5403 b/test/stderr/5403 index f5f7a3831..b173280d1 100644 --- a/test/stderr/5403 +++ b/test/stderr/5403 @@ -11,6 +11,8 @@ >>> myhost.test.ex in helo_lookup_domains? yes (matched "@") >>> looking up host name for 1.2.3.4 LOG: no host name found for IP address 1.2.3.4 +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -45,6 +47,8 @@ LOG: 10HmaX-000000005vi-0000 <= CALLER@myhost.test.ex H=(myhost.test.ex) [1.2.3. >>> myhost.test.ex in helo_lookup_domains? yes (matched "@") >>> looking up host name for 1.2.3.4 LOG: no host name found for IP address 1.2.3.4 +>>> list element: * +>>> host in limits_advertise_hosts? yes (matched "*") >>> host in dsn_advertise_hosts? no (option unset) >>> host in pipelining_advertise_hosts? >>> list element: * @@ -64,18 +68,20 @@ LOG: rcpt for verify@domain.com >>> check verify = recipient/callout=use_sender >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing verify@domain.com ->>> domain.com in "localhost.test.ex : localhost4.test.ex : thishost.test.ex"? +>>> domain.com in domains? >>> list element: localhost.test.ex >>> list element: localhost4.test.ex >>> list element: thishost.test.ex ->>> domain.com in "localhost.test.ex : localhost4.test.ex : thishost.test.ex"? no (end of list) ->>> domain.com in "! +local_domains"? ->>> list element: ! +local_domains ->>> domain.com in "test.ex : *.test.ex"? ->>> list element: test.ex ->>> list element: *.test.ex ->>> domain.com in "test.ex : *.test.ex"? no (end of list) ->>> domain.com in "! +local_domains"? yes (end of list) +>>> domain.com in domains? no (end of list) +>>> domain.com in domains? +>>> list element: !░+local_domains +>>> start sublist local_domains +>>> domain.com in "test.ex : *.test.ex"? +>>> ╎list element: test.ex +>>> ╎list element: *.test.ex +>>> domain.com in "test.ex : *.test.ex"? no (end of list) +>>> end sublist local_domains +>>> domain.com in domains? yes (end of list) >>> calling all router >>> domain.com in "special.com"? >>> list element: special.com @@ -92,9 +98,10 @@ MUNGED: ::1 will be omitted in what follows >>> Attempting full verification using callout >>> callout cache: disabled by no_cache >>> interface=ip4.ip4.ip4.ip4 port=PORT_S ->>> Connecting to 127.0.0.1 [127.0.0.1]:PORT_S from ip4.ip4.ip4.ip4 ... 127.0.0.1 in hosts_try_fastopen? ->>> list element: ->>> >>> connected +>>> Connecting to 127.0.0.1 [127.0.0.1]:PORT_S from ip4.ip4.ip4.ip4 ... +>>> 127.0.0.1 in hosts_try_fastopen? +>>> list element: +>>> connected >>> SMTP<< 220 server ready >>> 127.0.0.1 in hosts_avoid_esmtp? no (option unset) >>> SMTP>> EHLO myhost.test.ex diff --git a/test/stderr/5410 b/test/stderr/5410 index 044734f76..9b4f0ff8a 100644 --- a/test/stderr/5410 +++ b/test/stderr/5410 @@ -1,25 +1,39 @@ Exim version x.yz .... +Hints DB: environment after trimming: PATH= adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys configuration file is TESTSUITE/test-config admin user +try option gecos_pattern +try option gecos_name +try option unknown_login +try option smtp_active_hostname in hosts_connection_nolog? no (option unset) LOG: smtp_connection MAIN SMTP connection from CALLER - ╭considering: $smtp_active_hostname ESMTP Exim $version_number $tod_full +try option message_size_limit +try option acl_smtp_connect +try option smtp_banner + ╭considering: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full ├──────value: myhost.test.ex - ├considering: ESMTP Exim $version_number $tod_full - ├───────text: ESMTP Exim - ├considering: $version_number $tod_full + ├considering: ░ESMTP░Exim░$version_number░$tod_full + ├───────text: ░ESMTP░Exim░ + ├considering: $version_number░$tod_full ├──────value: x.yz - ├considering: $tod_full - ├───────text: + ├considering: ░$tod_full + ├───────text: ░ ├considering: $tod_full - ├──────value: Tue, 2 Mar 1999 09:44:33 +0000 - ├──expanding: $smtp_active_hostname ESMTP Exim $version_number $tod_full - ╰─────result: myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 + ├──────value: Tue,░2░Mar░1999░09:44:33░+0000 + ├───expanded: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full + ╰─────result: myhost.test.ex░ESMTP░Exim░x.yz░Tue,░2░Mar░1999░09:44:33░+0000 +try option acl_smtp_helo + list element: * + in limits_advertise_hosts? yes (matched "*") in dsn_advertise_hosts? no (option unset) +try option acl_smtp_etrn +try option acl_smtp_vrfy +try option acl_smtp_expn in pipelining_advertise_hosts? list element: * in pipelining_advertise_hosts? yes (matched "*") @@ -27,82 +41,98 @@ LOG: smtp_connection MAIN in chunking_advertise_hosts? no (end of list) list element: * in tls_advertise_hosts? yes (matched "*") - ╭considering: ${if eq {SERVER}{server}{queue}{cutthrough}} +try option acl_smtp_mail +try option acl_smtp_rcpt + ╭considering: ${if░eq░{SERVER}{server}{queue}{cutthrough}} ╭considering: SERVER}{server}{queue}{cutthrough}} ├───────text: SERVER ├considering: }{server}{queue}{cutthrough}} - ├──expanding: SERVER + ├───expanded: SERVER ╰─────result: SERVER ╭considering: server}{queue}{cutthrough}} ├───────text: server ├considering: }{queue}{cutthrough}} - ├──expanding: server + ├───expanded: server ╰─────result: server - ├──condition: eq {SERVER}{server} + ├──condition: eq░{SERVER}{server} ├─────result: false ╭───scanning: queue}{cutthrough}} ├───────text: queue ├───scanning: }{cutthrough}} - ├──expanding: queue - ├─────result: queue + ├───expanded: queue + ├─────result: ◀skipped▶ ╰───skipping: result is not used ╭considering: cutthrough}} ├───────text: cutthrough ├considering: }} - ├──expanding: cutthrough + ├───expanded: cutthrough ╰─────result: cutthrough - ├──expanding: ${if eq {SERVER}{server}{queue}{cutthrough}} + ├───expanded: ${if░eq░{SERVER}{server}{queue}{cutthrough}} ╰─────result: cutthrough using ACL "cutthrough" processing "accept" (TESTSUITE/test-config 22) check control = cutthrough_delivery check verify = recipient -domain.com in "! +local_domains"? - list element: ! +local_domains +domain.com in domains? + list element: !░+local_domains start sublist local_domains domain.com in "test.ex : *.test.ex"? ╎list element: test.ex ╎list element: *.test.ex domain.com in "test.ex : *.test.ex"? no (end of list) end sublist local_domains -domain.com in "! +local_domains"? yes (end of list) +domain.com in domains? yes (end of list) +try option router_home_directory +try option set +processing address_data ╭considering: $local_part ├──────value: userx ╰──(tainted) - ├──expanding: $local_part + ├───expanded: $local_part ╰─────result: userx ╰──(tainted) domain.com in "*"? list element: * domain.com in "*"? yes (matched "*") +try option transport +try option unseen ----------- end verify ------------ accept: condition test succeeded in ACL "cutthrough" end of ACL "cutthrough": ACCEPT ----------- start cutthrough setup ------------ -domain.com in "! +local_domains"? - list element: ! +local_domains +domain.com in domains? + list element: !░+local_domains start sublist local_domains domain.com in "test.ex : *.test.ex"? ╎list element: test.ex ╎list element: *.test.ex domain.com in "test.ex : *.test.ex"? no (end of list) end sublist local_domains -domain.com in "! +local_domains"? yes (end of list) +domain.com in domains? yes (end of list) +try option router_home_directory +try option set +processing address_data ╭considering: $local_part ├──────value: userx ╰──(tainted) - ├──expanding: $local_part + ├───expanded: $local_part ╰─────result: userx ╰──(tainted) domain.com in "*"? list element: * domain.com in "*"? yes (matched "*") -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D from ip4.ip4.ip4.ip4 ... 127.0.0.1 in hosts_try_fastopen? - list element: - connected +try option transport +try option unseen +try option interface +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D from ip4.ip4.ip4.ip4 ... +try option dscp + 127.0.0.1 in hosts_try_fastopen? + list element: +connected +try option helo_data ╭considering: $primary_hostname ├──────value: myhost.test.ex - ├──expanding: $primary_hostname + ├───expanded: $primary_hostname ╰─────result: myhost.test.ex SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 127.0.0.1 in hosts_avoid_esmtp? no (option unset) @@ -110,102 +140,104 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_D from ip4.ip4.ip4.ip4 ... 127.0.0.1 in cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello the.local.host.name [ip4.ip4.ip4.ip4] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS 250 HELP - ╭considering: ${if and {{match{$host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} - ╭considering: $host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} +try option host_name_extract + ╭considering: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} + ╭considering: $host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├──────value: 127.0.0.1 - ├considering: }{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} - ├──expanding: $host + ├considering: }{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} + ├───expanded: $host ╰─────result: 127.0.0.1 - ╭considering: .outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} + ╭considering: .outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├───────text: .outlook.com - ├considering: \$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} + ├considering: \$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├backslashed: '\$' - ├considering: }} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} - ├──expanding: .outlook.com\$ + ├considering: }}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} + ├───expanded: .outlook.com\$ ╰─────result: .outlook.com$ - ╭───scanning: $item}{\N^250-([\w.]+)\s\N}}} {$1}} + ╭───scanning: $item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├──────value: - ├───scanning: }{\N^250-([\w.]+)\s\N}}} {$1}} - ├──expanding: $item - ├─────result: + ├───scanning: }{\N^250-([\w.]+)\s\N}}}░{$1}} + ├───expanded: $item + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ╭───scanning: \N^250-([\w.]+)\s\N}}} {$1}} + ╭───scanning: \N^250-([\w.]+)\s\N}}}░{$1}} ├──protected: ^250-([\w.]+)\s - ├───scanning: }}} {$1}} - ├──expanding: \N^250-([\w.]+)\s\N - ├─────result: ^250-([\w.]+)\s + ├───scanning: }}}░{$1}} + ├───expanded: \N^250-([\w.]+)\s\N + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ├──condition: and {{match{$host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} + ├──condition: and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}} ├─────result: false ╭───scanning: $1}} ├───scanning: }} - ├──expanding: $1 - ├─────result: + ├───expanded: $1 + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ├──expanding: ${if and {{match{$host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} + ├───expanded: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ╰─────result: - ╭considering: ${if eq {$address_data}{usery}{*}{:}} + ╭considering: ${if░eq░{$address_data}{usery}{*}{:}} ╭considering: $address_data}{usery}{*}{:}} ├──────value: userx ╰──(tainted) ├considering: }{usery}{*}{:}} - ├──expanding: $address_data + ├───expanded: $address_data ╰─────result: userx ╰──(tainted) ╭considering: usery}{*}{:}} ├───────text: usery ├considering: }{*}{:}} - ├──expanding: usery + ├───expanded: usery ╰─────result: usery - ├──condition: eq {$address_data}{usery} + ├──condition: eq░{$address_data}{usery} ├─────result: false ╭───scanning: *}{:}} ├───────text: * ├───scanning: }{:}} - ├──expanding: * - ├─────result: * + ├───expanded: * + ├─────result: ◀skipped▶ ╰───skipping: result is not used ╭considering: :}} ├───────text: : ├considering: }} - ├──expanding: : + ├───expanded: : ╰─────result: : - ├──expanding: ${if eq {$address_data}{usery}{*}{:}} + ├───expanded: ${if░eq░{$address_data}{usery}{*}{:}} ╰─────result: : 127.0.0.1 in hosts_avoid_tls? list element: 127.0.0.1 in hosts_avoid_tls? no (end of list) - ╭considering: ${if eq {$address_data}{userz}{*}{:}} + ╭considering: ${if░eq░{$address_data}{userz}{*}{:}} ╭considering: $address_data}{userz}{*}{:}} ├──────value: userx ╰──(tainted) ├considering: }{userz}{*}{:}} - ├──expanding: $address_data + ├───expanded: $address_data ╰─────result: userx ╰──(tainted) ╭considering: userz}{*}{:}} ├───────text: userz ├considering: }{*}{:}} - ├──expanding: userz + ├───expanded: userz ╰─────result: userz - ├──condition: eq {$address_data}{userz} + ├──condition: eq░{$address_data}{userz} ├─────result: false ╭───scanning: *}{:}} ├───────text: * ├───scanning: }{:}} - ├──expanding: * - ├─────result: * + ├───expanded: * + ├─────result: ◀skipped▶ ╰───skipping: result is not used ╭considering: :}} ├───────text: : ├considering: }} - ├──expanding: : + ├───expanded: : ╰─────result: : - ├──expanding: ${if eq {$address_data}{userz}{*}{:}} + ├───expanded: ${if░eq░{$address_data}{userz}{*}{:}} ╰─────result: : 127.0.0.1 in hosts_verify_avoid_tls? list element: @@ -225,6 +257,7 @@ cmd buf flush ddd bytes cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello the.local.host.name [ip4.ip4.ip4.ip4] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -232,6 +265,7 @@ cmd buf flush ddd bytes using PIPELINING not using DSN 127.0.0.1 in hosts_require_auth? no (option unset) +try option authenticated_sender SMTP|> MAIL FROM: SMTP>> RCPT TO: cmd buf flush ddd bytes @@ -241,366 +275,369 @@ sync_responses expect rcpt for userx@domain.com SMTP<< 250 Accepted holding verify callout open for cutthrough delivery ----------- end cutthrough setup ------------ +try option acl_smtp_predata processing "accept" (TESTSUITE/test-config 57) accept: condition test succeeded in inline ACL end of inline ACL: ACCEPT SMTP>> DATA SMTP<< 354 Enter message, ending with "." on a line by itself +try option message_id_header_domain +try option message_id_header_text ╭considering: ${tod_full} - ├──expanding: ${tod_full} - ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 - ╭considering: Received: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: Received: - ├considering: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├───expanded: ${tod_full} + ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 +try option received_header_text + ╭considering: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: Received:░ + ├considering: ${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_rcvhost ├─────result: false - ╭───scanning: from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: from - ├───scanning: $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭───scanning: from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: from░ + ├───scanning: $sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: - ├───scanning: - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - - ├───scanning: }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: from $sender_rcvhost - - ├─────result: from - + ├───scanning: ↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉ + ├───scanning: }{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: from░$sender_rcvhost↩ + ␉ + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ╭considering: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_ident ├─────result: true - ╭considering: from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: from - ├considering: ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ╎╭considering: $sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - ╎ }}(Exim $version_number) - ╎ ${if def:sender_address {(envelope-from <$sender_address>) - ╎ }}id $message_exim_id${if def:received_for { - ╎ for $received_for}} + ╭considering: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: from░ + ├considering: ${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ╎╭considering: $sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ╎␉}}(Exim░$version_number)↩ + ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ╎␉}}id░$message_exim_id${if░def:received_for░{↩ + ╎␉for░$received_for}} ╎├──────value: CALLER - ╎├considering: } }}${if def:sender_helo_name {(helo=$sender_helo_name) - ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - ╎ }}(Exim $version_number) - ╎ ${if def:sender_address {(envelope-from <$sender_address>) - ╎ }}id $message_exim_id${if def:received_for { - ╎ for $received_for}} - ╎├──expanding: $sender_ident + ╎├considering: }░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ╎␉}}(Exim░$version_number)↩ + ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ╎␉}}id░$message_exim_id${if░def:received_for░{↩ + ╎␉for░$received_for}} + ╎├───expanded: $sender_ident ╎╰─────result: CALLER ├─────op-res: CALLER - ├considering: }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: from ${quote_local_part:$sender_ident} - ╰─────result: from CALLER - ├───item-res: from CALLER - ├considering: ${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: }}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: from░${quote_local_part:$sender_ident}░ + ╰─────result: from░CALLER░ + ├───item-res: from░CALLER░ + ├considering: ${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_helo_name ├─────result: true - ╭considering: (helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: (helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├───────text: (helo= - ├considering: $sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: $sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: myhost.test.ex ╰──(tainted) - ├considering: ) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: ) - - ├considering: }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: (helo=$sender_helo_name) - - ╰─────result: (helo=myhost.test.ex) - + ├considering: )↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: )↩ + ␉ + ├considering: }}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: (helo=$sender_helo_name)↩ + ␉ + ╰─────result: (helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├───item-res: (helo=myhost.test.ex) - + ├───item-res: (helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├considering: }}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }} - ╰─────result: from CALLER (helo=myhost.test.ex) - + ├considering: }}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}} + ╰─────result: from░CALLER░(helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├───item-res: from CALLER (helo=myhost.test.ex) - + ├───item-res: from░CALLER░(helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├considering: by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: by - ├considering: $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: by░ + ├considering: $primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: myhost.test.ex - ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: ${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:received_protocol ├─────result: true - ╭considering: with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: with - ├considering: $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: with░ + ├considering: $received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: local-esmtp - ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: with $received_protocol - ╰─────result: with local-esmtp - ├───item-res: with local-esmtp + ├considering: ░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: }}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: with░$received_protocol░ + ╰─────result: with░local-esmtp░ + ├───item-res: with░local-esmtp░ ╰──(tainted) - ├considering: ${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: ($tls_in_ver) - ├─────result: () + ├considering: ${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ░($tls_in_ver) + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: ╰──(tainted) - ├considering: ${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:tls_in_cipher_std ├─────result: false - ╭───scanning: tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: tls - ├───scanning: $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭───scanning: ░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░tls░ + ├───scanning: $tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: - ├───scanning: - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - - ├───scanning: }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: tls $tls_in_cipher_std - - ├─────result: tls - + ├───scanning: ↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉ + ├───scanning: }}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ░tls░$tls_in_cipher_std↩ + ␉ + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: ╰──(tainted) - ├considering: (Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: (Exim - ├considering: $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: (Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: (Exim░ + ├considering: $version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: x.yz - ├considering: ) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: ) - - ├considering: ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: )↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: )↩ + ␉ + ├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_address ├─────result: true - ╭considering: (envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: (envelope-from < - ├considering: $sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: (envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: (envelope-from░< + ├considering: $sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: CALLER@myhost.test.ex - ├considering: >) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: >) - - ├considering: }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: (envelope-from <$sender_address>) - - ╰─────result: (envelope-from ) - - ├───item-res: (envelope-from ) - + ├considering: >)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: >)↩ + ␉ + ├considering: }}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: (envelope-from░<$sender_address>)↩ + ␉ + ╰─────result: (envelope-from░)↩ + ␉ + ├───item-res: (envelope-from░)↩ + ␉ ╰──(tainted) - ├considering: id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: id - ├considering: $message_exim_id${if def:received_for { - for $received_for}} + ├considering: id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: id░ + ├considering: $message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: 10HmaX-000000005vi-0000 - ├considering: ${if def:received_for { - for $received_for}} + ├considering: ${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:received_for ├─────result: true - ╭considering: - for $received_for}} - ├───────text: - for + ╭considering: ↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉for░ ├considering: $received_for}} ├──────value: userx@domain.com ╰──(tainted) ├considering: }} - ├──expanding: - for $received_for - ╰─────result: - for userx@domain.com + ├───expanded: ↩ + ␉for░$received_for + ╰─────result: ↩ + ␉for░userx@domain.com ╰──(tainted) - ├───item-res: - for userx@domain.com + ├───item-res: ↩ + ␉for░userx@domain.com ╰──(tainted) - ├──expanding: Received: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ╰─────result: Received: from CALLER (helo=myhost.test.ex) - by myhost.test.ex with local-esmtp (Exim x.yz) - (envelope-from ) - id 10HmaX-000000005vi-0000 - for userx@domain.com + ├───expanded: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ╰─────result: Received:░from░CALLER░(helo=myhost.test.ex)↩ + ␉by░myhost.test.ex░with░local-esmtp░(Exim░x.yz)↩ + ␉(envelope-from░)↩ + ␉id░10HmaX-000000005vi-0000↩ + ␉for░userx@domain.com ╰──(tainted) ----------- start cutthrough headers send ----------- ----------- done cutthrough headers send ------------ +try option acl_smtp_data ╭considering: ${tod_full} - ├──expanding: ${tod_full} - ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 + ├───expanded: ${tod_full} + ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 SMTP>> . SMTP<< 250 OK id=10HmaY-000000005vi-0000 LOG: MAIN @@ -614,31 +651,46 @@ LOG: MAIN <= CALLER@myhost.test.ex U=CALLER P=local-esmtp S=sss LOG: MAIN Completed +try option acl_smtp_quit 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= adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys configuration file is TESTSUITE/test-config admin user +try option gecos_pattern +try option gecos_name +try option unknown_login +try option smtp_active_hostname in hosts_connection_nolog? no (option unset) LOG: smtp_connection MAIN SMTP connection from CALLER - ╭considering: $smtp_active_hostname ESMTP Exim $version_number $tod_full +try option message_size_limit +try option acl_smtp_connect +try option smtp_banner + ╭considering: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full ├──────value: myhost.test.ex - ├considering: ESMTP Exim $version_number $tod_full - ├───────text: ESMTP Exim - ├considering: $version_number $tod_full + ├considering: ░ESMTP░Exim░$version_number░$tod_full + ├───────text: ░ESMTP░Exim░ + ├considering: $version_number░$tod_full ├──────value: x.yz - ├considering: $tod_full - ├───────text: + ├considering: ░$tod_full + ├───────text: ░ ├considering: $tod_full - ├──────value: Tue, 2 Mar 1999 09:44:33 +0000 - ├──expanding: $smtp_active_hostname ESMTP Exim $version_number $tod_full - ╰─────result: myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 + ├──────value: Tue,░2░Mar░1999░09:44:33░+0000 + ├───expanded: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full + ╰─────result: myhost.test.ex░ESMTP░Exim░x.yz░Tue,░2░Mar░1999░09:44:33░+0000 +try option acl_smtp_helo + list element: * + in limits_advertise_hosts? yes (matched "*") in dsn_advertise_hosts? no (option unset) +try option acl_smtp_etrn +try option acl_smtp_vrfy +try option acl_smtp_expn in pipelining_advertise_hosts? list element: * in pipelining_advertise_hosts? yes (matched "*") @@ -646,82 +698,98 @@ LOG: smtp_connection MAIN in chunking_advertise_hosts? no (end of list) list element: * in tls_advertise_hosts? yes (matched "*") - ╭considering: ${if eq {SERVER}{server}{queue}{cutthrough}} +try option acl_smtp_mail +try option acl_smtp_rcpt + ╭considering: ${if░eq░{SERVER}{server}{queue}{cutthrough}} ╭considering: SERVER}{server}{queue}{cutthrough}} ├───────text: SERVER ├considering: }{server}{queue}{cutthrough}} - ├──expanding: SERVER + ├───expanded: SERVER ╰─────result: SERVER ╭considering: server}{queue}{cutthrough}} ├───────text: server ├considering: }{queue}{cutthrough}} - ├──expanding: server + ├───expanded: server ╰─────result: server - ├──condition: eq {SERVER}{server} + ├──condition: eq░{SERVER}{server} ├─────result: false ╭───scanning: queue}{cutthrough}} ├───────text: queue ├───scanning: }{cutthrough}} - ├──expanding: queue - ├─────result: queue + ├───expanded: queue + ├─────result: ◀skipped▶ ╰───skipping: result is not used ╭considering: cutthrough}} ├───────text: cutthrough ├considering: }} - ├──expanding: cutthrough + ├───expanded: cutthrough ╰─────result: cutthrough - ├──expanding: ${if eq {SERVER}{server}{queue}{cutthrough}} + ├───expanded: ${if░eq░{SERVER}{server}{queue}{cutthrough}} ╰─────result: cutthrough using ACL "cutthrough" processing "accept" (TESTSUITE/test-config 22) check control = cutthrough_delivery check verify = recipient -domain.com in "! +local_domains"? - list element: ! +local_domains +domain.com in domains? + list element: !░+local_domains start sublist local_domains domain.com in "test.ex : *.test.ex"? ╎list element: test.ex ╎list element: *.test.ex domain.com in "test.ex : *.test.ex"? no (end of list) end sublist local_domains -domain.com in "! +local_domains"? yes (end of list) +domain.com in domains? yes (end of list) +try option router_home_directory +try option set +processing address_data ╭considering: $local_part ├──────value: usery ╰──(tainted) - ├──expanding: $local_part + ├───expanded: $local_part ╰─────result: usery ╰──(tainted) domain.com in "*"? list element: * domain.com in "*"? yes (matched "*") +try option transport +try option unseen ----------- end verify ------------ accept: condition test succeeded in ACL "cutthrough" end of ACL "cutthrough": ACCEPT ----------- start cutthrough setup ------------ -domain.com in "! +local_domains"? - list element: ! +local_domains +domain.com in domains? + list element: !░+local_domains start sublist local_domains domain.com in "test.ex : *.test.ex"? ╎list element: test.ex ╎list element: *.test.ex domain.com in "test.ex : *.test.ex"? no (end of list) end sublist local_domains -domain.com in "! +local_domains"? yes (end of list) +domain.com in domains? yes (end of list) +try option router_home_directory +try option set +processing address_data ╭considering: $local_part ├──────value: usery ╰──(tainted) - ├──expanding: $local_part + ├───expanded: $local_part ╰─────result: usery ╰──(tainted) domain.com in "*"? list element: * domain.com in "*"? yes (matched "*") -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D from ip4.ip4.ip4.ip4 ... 127.0.0.1 in hosts_try_fastopen? - list element: - connected +try option transport +try option unseen +try option interface +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D from ip4.ip4.ip4.ip4 ... +try option dscp + 127.0.0.1 in hosts_try_fastopen? + list element: +connected +try option helo_data ╭considering: $primary_hostname ├──────value: myhost.test.ex - ├──expanding: $primary_hostname + ├───expanded: $primary_hostname ╰─────result: myhost.test.ex SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 127.0.0.1 in hosts_avoid_esmtp? no (option unset) @@ -729,71 +797,73 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_D from ip4.ip4.ip4.ip4 ... 127.0.0.1 in cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello the.local.host.name [ip4.ip4.ip4.ip4] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS 250 HELP - ╭considering: ${if and {{match{$host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} - ╭considering: $host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} +try option host_name_extract + ╭considering: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} + ╭considering: $host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├──────value: 127.0.0.1 - ├considering: }{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} - ├──expanding: $host + ├considering: }{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} + ├───expanded: $host ╰─────result: 127.0.0.1 - ╭considering: .outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} + ╭considering: .outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├───────text: .outlook.com - ├considering: \$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} + ├considering: \$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├backslashed: '\$' - ├considering: }} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} - ├──expanding: .outlook.com\$ + ├considering: }}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} + ├───expanded: .outlook.com\$ ╰─────result: .outlook.com$ - ╭───scanning: $item}{\N^250-([\w.]+)\s\N}}} {$1}} + ╭───scanning: $item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├──────value: - ├───scanning: }{\N^250-([\w.]+)\s\N}}} {$1}} - ├──expanding: $item - ├─────result: + ├───scanning: }{\N^250-([\w.]+)\s\N}}}░{$1}} + ├───expanded: $item + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ╭───scanning: \N^250-([\w.]+)\s\N}}} {$1}} + ╭───scanning: \N^250-([\w.]+)\s\N}}}░{$1}} ├──protected: ^250-([\w.]+)\s - ├───scanning: }}} {$1}} - ├──expanding: \N^250-([\w.]+)\s\N - ├─────result: ^250-([\w.]+)\s + ├───scanning: }}}░{$1}} + ├───expanded: \N^250-([\w.]+)\s\N + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ├──condition: and {{match{$host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} + ├──condition: and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}} ├─────result: false ╭───scanning: $1}} ├───scanning: }} - ├──expanding: $1 - ├─────result: + ├───expanded: $1 + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ├──expanding: ${if and {{match{$host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} + ├───expanded: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ╰─────result: - ╭considering: ${if eq {$address_data}{usery}{*}{:}} + ╭considering: ${if░eq░{$address_data}{usery}{*}{:}} ╭considering: $address_data}{usery}{*}{:}} ├──────value: usery ╰──(tainted) ├considering: }{usery}{*}{:}} - ├──expanding: $address_data + ├───expanded: $address_data ╰─────result: usery ╰──(tainted) ╭considering: usery}{*}{:}} ├───────text: usery ├considering: }{*}{:}} - ├──expanding: usery + ├───expanded: usery ╰─────result: usery - ├──condition: eq {$address_data}{usery} + ├──condition: eq░{$address_data}{usery} ├─────result: true ╭considering: *}{:}} ├───────text: * ├considering: }{:}} - ├──expanding: * + ├───expanded: * ╰─────result: * ╭───scanning: :}} ├───────text: : ├───scanning: }} - ├──expanding: : - ├─────result: : + ├───expanded: : + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ├──expanding: ${if eq {$address_data}{usery}{*}{:}} + ├───expanded: ${if░eq░{$address_data}{usery}{*}{:}} ╰─────result: * 127.0.0.1 in hosts_avoid_tls? list element: * @@ -802,6 +872,7 @@ cmd buf flush ddd bytes using PIPELINING not using DSN 127.0.0.1 in hosts_require_auth? no (option unset) +try option authenticated_sender SMTP|> MAIL FROM: SMTP>> RCPT TO: cmd buf flush ddd bytes @@ -811,366 +882,369 @@ sync_responses expect rcpt for usery@domain.com SMTP<< 250 Accepted holding verify callout open for cutthrough delivery ----------- end cutthrough setup ------------ +try option acl_smtp_predata processing "accept" (TESTSUITE/test-config 57) accept: condition test succeeded in inline ACL end of inline ACL: ACCEPT SMTP>> DATA SMTP<< 354 Enter message, ending with "." on a line by itself +try option message_id_header_domain +try option message_id_header_text ╭considering: ${tod_full} - ├──expanding: ${tod_full} - ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 - ╭considering: Received: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: Received: - ├considering: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├───expanded: ${tod_full} + ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 +try option received_header_text + ╭considering: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: Received:░ + ├considering: ${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_rcvhost ├─────result: false - ╭───scanning: from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: from - ├───scanning: $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭───scanning: from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: from░ + ├───scanning: $sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: - ├───scanning: - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - - ├───scanning: }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: from $sender_rcvhost - - ├─────result: from - + ├───scanning: ↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉ + ├───scanning: }{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: from░$sender_rcvhost↩ + ␉ + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ╭considering: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_ident ├─────result: true - ╭considering: from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: from - ├considering: ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ╎╭considering: $sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - ╎ }}(Exim $version_number) - ╎ ${if def:sender_address {(envelope-from <$sender_address>) - ╎ }}id $message_exim_id${if def:received_for { - ╎ for $received_for}} + ╭considering: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: from░ + ├considering: ${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ╎╭considering: $sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ╎␉}}(Exim░$version_number)↩ + ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ╎␉}}id░$message_exim_id${if░def:received_for░{↩ + ╎␉for░$received_for}} ╎├──────value: CALLER - ╎├considering: } }}${if def:sender_helo_name {(helo=$sender_helo_name) - ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - ╎ }}(Exim $version_number) - ╎ ${if def:sender_address {(envelope-from <$sender_address>) - ╎ }}id $message_exim_id${if def:received_for { - ╎ for $received_for}} - ╎├──expanding: $sender_ident + ╎├considering: }░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ╎␉}}(Exim░$version_number)↩ + ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ╎␉}}id░$message_exim_id${if░def:received_for░{↩ + ╎␉for░$received_for}} + ╎├───expanded: $sender_ident ╎╰─────result: CALLER ├─────op-res: CALLER - ├considering: }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: from ${quote_local_part:$sender_ident} - ╰─────result: from CALLER - ├───item-res: from CALLER - ├considering: ${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: }}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: from░${quote_local_part:$sender_ident}░ + ╰─────result: from░CALLER░ + ├───item-res: from░CALLER░ + ├considering: ${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_helo_name ├─────result: true - ╭considering: (helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: (helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├───────text: (helo= - ├considering: $sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: $sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: myhost.test.ex ╰──(tainted) - ├considering: ) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: ) - - ├considering: }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: (helo=$sender_helo_name) - - ╰─────result: (helo=myhost.test.ex) - + ├considering: )↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: )↩ + ␉ + ├considering: }}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: (helo=$sender_helo_name)↩ + ␉ + ╰─────result: (helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├───item-res: (helo=myhost.test.ex) - + ├───item-res: (helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├considering: }}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }} - ╰─────result: from CALLER (helo=myhost.test.ex) - + ├considering: }}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}} + ╰─────result: from░CALLER░(helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├───item-res: from CALLER (helo=myhost.test.ex) - + ├───item-res: from░CALLER░(helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├considering: by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: by - ├considering: $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: by░ + ├considering: $primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: myhost.test.ex - ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: ${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:received_protocol ├─────result: true - ╭considering: with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: with - ├considering: $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: with░ + ├considering: $received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: local-esmtp - ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: with $received_protocol - ╰─────result: with local-esmtp - ├───item-res: with local-esmtp + ├considering: ░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: }}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: with░$received_protocol░ + ╰─────result: with░local-esmtp░ + ├───item-res: with░local-esmtp░ ╰──(tainted) - ├considering: ${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: ($tls_in_ver) - ├─────result: () + ├considering: ${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ░($tls_in_ver) + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: ╰──(tainted) - ├considering: ${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:tls_in_cipher_std ├─────result: false - ╭───scanning: tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: tls - ├───scanning: $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭───scanning: ░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░tls░ + ├───scanning: $tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: - ├───scanning: - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - - ├───scanning: }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: tls $tls_in_cipher_std - - ├─────result: tls - + ├───scanning: ↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉ + ├───scanning: }}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ░tls░$tls_in_cipher_std↩ + ␉ + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: ╰──(tainted) - ├considering: (Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: (Exim - ├considering: $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: (Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: (Exim░ + ├considering: $version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: x.yz - ├considering: ) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: ) - - ├considering: ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: )↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: )↩ + ␉ + ├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_address ├─────result: true - ╭considering: (envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: (envelope-from < - ├considering: $sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: (envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: (envelope-from░< + ├considering: $sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: CALLER@myhost.test.ex - ├considering: >) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: >) - - ├considering: }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: (envelope-from <$sender_address>) - - ╰─────result: (envelope-from ) - - ├───item-res: (envelope-from ) - + ├considering: >)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: >)↩ + ␉ + ├considering: }}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: (envelope-from░<$sender_address>)↩ + ␉ + ╰─────result: (envelope-from░)↩ + ␉ + ├───item-res: (envelope-from░)↩ + ␉ ╰──(tainted) - ├considering: id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: id - ├considering: $message_exim_id${if def:received_for { - for $received_for}} + ├considering: id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: id░ + ├considering: $message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: 10HmaZ-000000005vi-0000 - ├considering: ${if def:received_for { - for $received_for}} + ├considering: ${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:received_for ├─────result: true - ╭considering: - for $received_for}} - ├───────text: - for + ╭considering: ↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉for░ ├considering: $received_for}} ├──────value: usery@domain.com ╰──(tainted) ├considering: }} - ├──expanding: - for $received_for - ╰─────result: - for usery@domain.com + ├───expanded: ↩ + ␉for░$received_for + ╰─────result: ↩ + ␉for░usery@domain.com ╰──(tainted) - ├───item-res: - for usery@domain.com + ├───item-res: ↩ + ␉for░usery@domain.com ╰──(tainted) - ├──expanding: Received: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ╰─────result: Received: from CALLER (helo=myhost.test.ex) - by myhost.test.ex with local-esmtp (Exim x.yz) - (envelope-from ) - id 10HmaZ-000000005vi-0000 - for usery@domain.com + ├───expanded: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ╰─────result: Received:░from░CALLER░(helo=myhost.test.ex)↩ + ␉by░myhost.test.ex░with░local-esmtp░(Exim░x.yz)↩ + ␉(envelope-from░)↩ + ␉id░10HmaZ-000000005vi-0000↩ + ␉for░usery@domain.com ╰──(tainted) ----------- start cutthrough headers send ----------- ----------- done cutthrough headers send ------------ +try option acl_smtp_data ╭considering: ${tod_full} - ├──expanding: ${tod_full} - ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 + ├───expanded: ${tod_full} + ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 SMTP>> . SMTP<< 250 OK id=10HmbA-000000005vi-0000 LOG: MAIN @@ -1184,31 +1258,46 @@ LOG: MAIN <= CALLER@myhost.test.ex U=CALLER P=local-esmtp S=sss LOG: MAIN Completed +try option acl_smtp_quit 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= adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys configuration file is TESTSUITE/test-config admin user +try option gecos_pattern +try option gecos_name +try option unknown_login +try option smtp_active_hostname in hosts_connection_nolog? no (option unset) LOG: smtp_connection MAIN SMTP connection from CALLER - ╭considering: $smtp_active_hostname ESMTP Exim $version_number $tod_full +try option message_size_limit +try option acl_smtp_connect +try option smtp_banner + ╭considering: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full ├──────value: myhost.test.ex - ├considering: ESMTP Exim $version_number $tod_full - ├───────text: ESMTP Exim - ├considering: $version_number $tod_full + ├considering: ░ESMTP░Exim░$version_number░$tod_full + ├───────text: ░ESMTP░Exim░ + ├considering: $version_number░$tod_full ├──────value: x.yz - ├considering: $tod_full - ├───────text: + ├considering: ░$tod_full + ├───────text: ░ ├considering: $tod_full - ├──────value: Tue, 2 Mar 1999 09:44:33 +0000 - ├──expanding: $smtp_active_hostname ESMTP Exim $version_number $tod_full - ╰─────result: myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 + ├──────value: Tue,░2░Mar░1999░09:44:33░+0000 + ├───expanded: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full + ╰─────result: myhost.test.ex░ESMTP░Exim░x.yz░Tue,░2░Mar░1999░09:44:33░+0000 +try option acl_smtp_helo + list element: * + in limits_advertise_hosts? yes (matched "*") in dsn_advertise_hosts? no (option unset) +try option acl_smtp_etrn +try option acl_smtp_vrfy +try option acl_smtp_expn in pipelining_advertise_hosts? list element: * in pipelining_advertise_hosts? yes (matched "*") @@ -1216,82 +1305,98 @@ LOG: smtp_connection MAIN in chunking_advertise_hosts? no (end of list) list element: * in tls_advertise_hosts? yes (matched "*") - ╭considering: ${if eq {SERVER}{server}{queue}{cutthrough}} +try option acl_smtp_mail +try option acl_smtp_rcpt + ╭considering: ${if░eq░{SERVER}{server}{queue}{cutthrough}} ╭considering: SERVER}{server}{queue}{cutthrough}} ├───────text: SERVER ├considering: }{server}{queue}{cutthrough}} - ├──expanding: SERVER + ├───expanded: SERVER ╰─────result: SERVER ╭considering: server}{queue}{cutthrough}} ├───────text: server ├considering: }{queue}{cutthrough}} - ├──expanding: server + ├───expanded: server ╰─────result: server - ├──condition: eq {SERVER}{server} + ├──condition: eq░{SERVER}{server} ├─────result: false ╭───scanning: queue}{cutthrough}} ├───────text: queue ├───scanning: }{cutthrough}} - ├──expanding: queue - ├─────result: queue + ├───expanded: queue + ├─────result: ◀skipped▶ ╰───skipping: result is not used ╭considering: cutthrough}} ├───────text: cutthrough ├considering: }} - ├──expanding: cutthrough + ├───expanded: cutthrough ╰─────result: cutthrough - ├──expanding: ${if eq {SERVER}{server}{queue}{cutthrough}} + ├───expanded: ${if░eq░{SERVER}{server}{queue}{cutthrough}} ╰─────result: cutthrough using ACL "cutthrough" processing "accept" (TESTSUITE/test-config 22) check control = cutthrough_delivery check verify = recipient -domain.com in "! +local_domains"? - list element: ! +local_domains +domain.com in domains? + list element: !░+local_domains start sublist local_domains domain.com in "test.ex : *.test.ex"? ╎list element: test.ex ╎list element: *.test.ex domain.com in "test.ex : *.test.ex"? no (end of list) end sublist local_domains -domain.com in "! +local_domains"? yes (end of list) +domain.com in domains? yes (end of list) +try option router_home_directory +try option set +processing address_data ╭considering: $local_part ├──────value: usery ╰──(tainted) - ├──expanding: $local_part + ├───expanded: $local_part ╰─────result: usery ╰──(tainted) domain.com in "*"? list element: * domain.com in "*"? yes (matched "*") +try option transport +try option unseen ----------- end verify ------------ accept: condition test succeeded in ACL "cutthrough" end of ACL "cutthrough": ACCEPT ----------- start cutthrough setup ------------ -domain.com in "! +local_domains"? - list element: ! +local_domains +domain.com in domains? + list element: !░+local_domains start sublist local_domains domain.com in "test.ex : *.test.ex"? ╎list element: test.ex ╎list element: *.test.ex domain.com in "test.ex : *.test.ex"? no (end of list) end sublist local_domains -domain.com in "! +local_domains"? yes (end of list) +domain.com in domains? yes (end of list) +try option router_home_directory +try option set +processing address_data ╭considering: $local_part ├──────value: usery ╰──(tainted) - ├──expanding: $local_part + ├───expanded: $local_part ╰─────result: usery ╰──(tainted) domain.com in "*"? list element: * domain.com in "*"? yes (matched "*") -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D from ip4.ip4.ip4.ip4 ... 127.0.0.1 in hosts_try_fastopen? - list element: - connected +try option transport +try option unseen +try option interface +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D from ip4.ip4.ip4.ip4 ... +try option dscp + 127.0.0.1 in hosts_try_fastopen? + list element: +connected +try option helo_data ╭considering: $primary_hostname ├──────value: myhost.test.ex - ├──expanding: $primary_hostname + ├───expanded: $primary_hostname ╰─────result: myhost.test.ex SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 127.0.0.1 in hosts_avoid_esmtp? no (option unset) @@ -1299,71 +1404,73 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_D from ip4.ip4.ip4.ip4 ... 127.0.0.1 in cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello the.local.host.name [ip4.ip4.ip4.ip4] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS 250 HELP - ╭considering: ${if and {{match{$host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} - ╭considering: $host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} +try option host_name_extract + ╭considering: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} + ╭considering: $host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├──────value: 127.0.0.1 - ├considering: }{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} - ├──expanding: $host + ├considering: }{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} + ├───expanded: $host ╰─────result: 127.0.0.1 - ╭considering: .outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} + ╭considering: .outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├───────text: .outlook.com - ├considering: \$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} + ├considering: \$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├backslashed: '\$' - ├considering: }} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} - ├──expanding: .outlook.com\$ + ├considering: }}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} + ├───expanded: .outlook.com\$ ╰─────result: .outlook.com$ - ╭───scanning: $item}{\N^250-([\w.]+)\s\N}}} {$1}} + ╭───scanning: $item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├──────value: - ├───scanning: }{\N^250-([\w.]+)\s\N}}} {$1}} - ├──expanding: $item - ├─────result: + ├───scanning: }{\N^250-([\w.]+)\s\N}}}░{$1}} + ├───expanded: $item + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ╭───scanning: \N^250-([\w.]+)\s\N}}} {$1}} + ╭───scanning: \N^250-([\w.]+)\s\N}}}░{$1}} ├──protected: ^250-([\w.]+)\s - ├───scanning: }}} {$1}} - ├──expanding: \N^250-([\w.]+)\s\N - ├─────result: ^250-([\w.]+)\s + ├───scanning: }}}░{$1}} + ├───expanded: \N^250-([\w.]+)\s\N + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ├──condition: and {{match{$host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} + ├──condition: and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}} ├─────result: false ╭───scanning: $1}} ├───scanning: }} - ├──expanding: $1 - ├─────result: + ├───expanded: $1 + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ├──expanding: ${if and {{match{$host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} + ├───expanded: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ╰─────result: - ╭considering: ${if eq {$address_data}{usery}{*}{:}} + ╭considering: ${if░eq░{$address_data}{usery}{*}{:}} ╭considering: $address_data}{usery}{*}{:}} ├──────value: usery ╰──(tainted) ├considering: }{usery}{*}{:}} - ├──expanding: $address_data + ├───expanded: $address_data ╰─────result: usery ╰──(tainted) ╭considering: usery}{*}{:}} ├───────text: usery ├considering: }{*}{:}} - ├──expanding: usery + ├───expanded: usery ╰─────result: usery - ├──condition: eq {$address_data}{usery} + ├──condition: eq░{$address_data}{usery} ├─────result: true ╭considering: *}{:}} ├───────text: * ├considering: }{:}} - ├──expanding: * + ├───expanded: * ╰─────result: * ╭───scanning: :}} ├───────text: : ├───scanning: }} - ├──expanding: : - ├─────result: : + ├───expanded: : + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ├──expanding: ${if eq {$address_data}{usery}{*}{:}} + ├───expanded: ${if░eq░{$address_data}{usery}{*}{:}} ╰─────result: * 127.0.0.1 in hosts_avoid_tls? list element: * @@ -1372,6 +1479,7 @@ cmd buf flush ddd bytes using PIPELINING not using DSN 127.0.0.1 in hosts_require_auth? no (option unset) +try option authenticated_sender SMTP|> MAIL FROM: SMTP>> RCPT TO: cmd buf flush ddd bytes @@ -1381,366 +1489,369 @@ sync_responses expect rcpt for usery@domain.com SMTP<< 250 Accepted holding verify callout open for cutthrough delivery ----------- end cutthrough setup ------------ +try option acl_smtp_predata processing "accept" (TESTSUITE/test-config 57) accept: condition test succeeded in inline ACL end of inline ACL: ACCEPT SMTP>> DATA SMTP<< 354 Enter message, ending with "." on a line by itself +try option message_id_header_domain +try option message_id_header_text ╭considering: ${tod_full} - ├──expanding: ${tod_full} - ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 - ╭considering: Received: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: Received: - ├considering: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├───expanded: ${tod_full} + ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 +try option received_header_text + ╭considering: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: Received:░ + ├considering: ${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_rcvhost ├─────result: false - ╭───scanning: from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: from - ├───scanning: $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭───scanning: from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: from░ + ├───scanning: $sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: - ├───scanning: - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - - ├───scanning: }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: from $sender_rcvhost - - ├─────result: from - + ├───scanning: ↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉ + ├───scanning: }{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: from░$sender_rcvhost↩ + ␉ + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ╭considering: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_ident ├─────result: true - ╭considering: from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: from - ├considering: ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ╎╭considering: $sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - ╎ }}(Exim $version_number) - ╎ ${if def:sender_address {(envelope-from <$sender_address>) - ╎ }}id $message_exim_id${if def:received_for { - ╎ for $received_for}} + ╭considering: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: from░ + ├considering: ${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ╎╭considering: $sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ╎␉}}(Exim░$version_number)↩ + ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ╎␉}}id░$message_exim_id${if░def:received_for░{↩ + ╎␉for░$received_for}} ╎├──────value: CALLER - ╎├considering: } }}${if def:sender_helo_name {(helo=$sender_helo_name) - ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - ╎ }}(Exim $version_number) - ╎ ${if def:sender_address {(envelope-from <$sender_address>) - ╎ }}id $message_exim_id${if def:received_for { - ╎ for $received_for}} - ╎├──expanding: $sender_ident + ╎├considering: }░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ╎␉}}(Exim░$version_number)↩ + ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ╎␉}}id░$message_exim_id${if░def:received_for░{↩ + ╎␉for░$received_for}} + ╎├───expanded: $sender_ident ╎╰─────result: CALLER ├─────op-res: CALLER - ├considering: }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: from ${quote_local_part:$sender_ident} - ╰─────result: from CALLER - ├───item-res: from CALLER - ├considering: ${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: }}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: from░${quote_local_part:$sender_ident}░ + ╰─────result: from░CALLER░ + ├───item-res: from░CALLER░ + ├considering: ${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_helo_name ├─────result: true - ╭considering: (helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: (helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├───────text: (helo= - ├considering: $sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: $sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: myhost.test.ex ╰──(tainted) - ├considering: ) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: ) - - ├considering: }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: (helo=$sender_helo_name) - - ╰─────result: (helo=myhost.test.ex) - + ├considering: )↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: )↩ + ␉ + ├considering: }}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: (helo=$sender_helo_name)↩ + ␉ + ╰─────result: (helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├───item-res: (helo=myhost.test.ex) - + ├───item-res: (helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├considering: }}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }} - ╰─────result: from CALLER (helo=myhost.test.ex) - + ├considering: }}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}} + ╰─────result: from░CALLER░(helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├───item-res: from CALLER (helo=myhost.test.ex) - + ├───item-res: from░CALLER░(helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├considering: by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: by - ├considering: $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: by░ + ├considering: $primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: myhost.test.ex - ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: ${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:received_protocol ├─────result: true - ╭considering: with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: with - ├considering: $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: with░ + ├considering: $received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: local-esmtp - ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: with $received_protocol - ╰─────result: with local-esmtp - ├───item-res: with local-esmtp + ├considering: ░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: }}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: with░$received_protocol░ + ╰─────result: with░local-esmtp░ + ├───item-res: with░local-esmtp░ ╰──(tainted) - ├considering: ${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: ($tls_in_ver) - ├─────result: () + ├considering: ${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ░($tls_in_ver) + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: ╰──(tainted) - ├considering: ${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:tls_in_cipher_std ├─────result: false - ╭───scanning: tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: tls - ├───scanning: $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭───scanning: ░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░tls░ + ├───scanning: $tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: - ├───scanning: - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - - ├───scanning: }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: tls $tls_in_cipher_std - - ├─────result: tls - + ├───scanning: ↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉ + ├───scanning: }}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ░tls░$tls_in_cipher_std↩ + ␉ + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: ╰──(tainted) - ├considering: (Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: (Exim - ├considering: $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: (Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: (Exim░ + ├considering: $version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: x.yz - ├considering: ) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: ) - - ├considering: ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: )↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: )↩ + ␉ + ├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_address ├─────result: true - ╭considering: (envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: (envelope-from < - ├considering: $sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: (envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: (envelope-from░< + ├considering: $sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: CALLER@myhost.test.ex - ├considering: >) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: >) - - ├considering: }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: (envelope-from <$sender_address>) - - ╰─────result: (envelope-from ) - - ├───item-res: (envelope-from ) - + ├considering: >)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: >)↩ + ␉ + ├considering: }}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: (envelope-from░<$sender_address>)↩ + ␉ + ╰─────result: (envelope-from░)↩ + ␉ + ├───item-res: (envelope-from░)↩ + ␉ ╰──(tainted) - ├considering: id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: id - ├considering: $message_exim_id${if def:received_for { - for $received_for}} + ├considering: id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: id░ + ├considering: $message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: 10HmbB-000000005vi-0000 - ├considering: ${if def:received_for { - for $received_for}} + ├considering: ${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:received_for ├─────result: true - ╭considering: - for $received_for}} - ├───────text: - for + ╭considering: ↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉for░ ├considering: $received_for}} ├──────value: usery@domain.com ╰──(tainted) ├considering: }} - ├──expanding: - for $received_for - ╰─────result: - for usery@domain.com + ├───expanded: ↩ + ␉for░$received_for + ╰─────result: ↩ + ␉for░usery@domain.com ╰──(tainted) - ├───item-res: - for usery@domain.com + ├───item-res: ↩ + ␉for░usery@domain.com ╰──(tainted) - ├──expanding: Received: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ╰─────result: Received: from CALLER (helo=myhost.test.ex) - by myhost.test.ex with local-esmtp (Exim x.yz) - (envelope-from ) - id 10HmbB-000000005vi-0000 - for usery@domain.com + ├───expanded: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ╰─────result: Received:░from░CALLER░(helo=myhost.test.ex)↩ + ␉by░myhost.test.ex░with░local-esmtp░(Exim░x.yz)↩ + ␉(envelope-from░)↩ + ␉id░10HmbB-000000005vi-0000↩ + ␉for░usery@domain.com ╰──(tainted) ----------- start cutthrough headers send ----------- ----------- done cutthrough headers send ------------ +try option acl_smtp_data ╭considering: ${tod_full} - ├──expanding: ${tod_full} - ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 + ├───expanded: ${tod_full} + ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 SMTP>> . SMTP<< 250 OK id=10HmbC-000000005vi-0000 LOG: MAIN @@ -1754,6 +1865,7 @@ LOG: MAIN <= CALLER@myhost.test.ex U=CALLER P=local-esmtp S=sss LOG: MAIN Completed +try option acl_smtp_quit LOG: smtp_connection MAIN SMTP connection from CALLER D=qqs closed by QUIT >>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/5420 b/test/stderr/5420 index 535542d26..caa9e0de0 100644 --- a/test/stderr/5420 +++ b/test/stderr/5420 @@ -1,25 +1,39 @@ Exim version x.yz .... +Hints DB: environment after trimming: PATH= adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys configuration file is TESTSUITE/test-config admin user +try option gecos_pattern +try option gecos_name +try option unknown_login +try option smtp_active_hostname in hosts_connection_nolog? no (option unset) LOG: smtp_connection MAIN SMTP connection from CALLER - ╭considering: $smtp_active_hostname ESMTP Exim $version_number $tod_full +try option message_size_limit +try option acl_smtp_connect +try option smtp_banner + ╭considering: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full ├──────value: myhost.test.ex - ├considering: ESMTP Exim $version_number $tod_full - ├───────text: ESMTP Exim - ├considering: $version_number $tod_full + ├considering: ░ESMTP░Exim░$version_number░$tod_full + ├───────text: ░ESMTP░Exim░ + ├considering: $version_number░$tod_full ├──────value: x.yz - ├considering: $tod_full - ├───────text: + ├considering: ░$tod_full + ├───────text: ░ ├considering: $tod_full - ├──────value: Tue, 2 Mar 1999 09:44:33 +0000 - ├──expanding: $smtp_active_hostname ESMTP Exim $version_number $tod_full - ╰─────result: myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 + ├──────value: Tue,░2░Mar░1999░09:44:33░+0000 + ├───expanded: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full + ╰─────result: myhost.test.ex░ESMTP░Exim░x.yz░Tue,░2░Mar░1999░09:44:33░+0000 +try option acl_smtp_helo + list element: * + in limits_advertise_hosts? yes (matched "*") in dsn_advertise_hosts? no (option unset) +try option acl_smtp_etrn +try option acl_smtp_vrfy +try option acl_smtp_expn in pipelining_advertise_hosts? list element: * in pipelining_advertise_hosts? yes (matched "*") @@ -27,82 +41,98 @@ LOG: smtp_connection MAIN in chunking_advertise_hosts? no (end of list) list element: * in tls_advertise_hosts? yes (matched "*") - ╭considering: ${if eq {SERVER}{server}{queue}{cutthrough}} +try option acl_smtp_mail +try option acl_smtp_rcpt + ╭considering: ${if░eq░{SERVER}{server}{queue}{cutthrough}} ╭considering: SERVER}{server}{queue}{cutthrough}} ├───────text: SERVER ├considering: }{server}{queue}{cutthrough}} - ├──expanding: SERVER + ├───expanded: SERVER ╰─────result: SERVER ╭considering: server}{queue}{cutthrough}} ├───────text: server ├considering: }{queue}{cutthrough}} - ├──expanding: server + ├───expanded: server ╰─────result: server - ├──condition: eq {SERVER}{server} + ├──condition: eq░{SERVER}{server} ├─────result: false ╭───scanning: queue}{cutthrough}} ├───────text: queue ├───scanning: }{cutthrough}} - ├──expanding: queue - ├─────result: queue + ├───expanded: queue + ├─────result: ◀skipped▶ ╰───skipping: result is not used ╭considering: cutthrough}} ├───────text: cutthrough ├considering: }} - ├──expanding: cutthrough + ├───expanded: cutthrough ╰─────result: cutthrough - ├──expanding: ${if eq {SERVER}{server}{queue}{cutthrough}} + ├───expanded: ${if░eq░{SERVER}{server}{queue}{cutthrough}} ╰─────result: cutthrough using ACL "cutthrough" processing "accept" (TESTSUITE/test-config 22) check control = cutthrough_delivery check verify = recipient -domain.com in "! +local_domains"? - list element: ! +local_domains +domain.com in domains? + list element: !░+local_domains start sublist local_domains domain.com in "test.ex : *.test.ex"? ╎list element: test.ex ╎list element: *.test.ex domain.com in "test.ex : *.test.ex"? no (end of list) end sublist local_domains -domain.com in "! +local_domains"? yes (end of list) +domain.com in domains? yes (end of list) +try option router_home_directory +try option set +processing address_data ╭considering: $local_part ├──────value: userx ╰──(tainted) - ├──expanding: $local_part + ├───expanded: $local_part ╰─────result: userx ╰──(tainted) domain.com in "*"? list element: * domain.com in "*"? yes (matched "*") +try option transport +try option unseen ----------- end verify ------------ accept: condition test succeeded in ACL "cutthrough" end of ACL "cutthrough": ACCEPT ----------- start cutthrough setup ------------ -domain.com in "! +local_domains"? - list element: ! +local_domains +domain.com in domains? + list element: !░+local_domains start sublist local_domains domain.com in "test.ex : *.test.ex"? ╎list element: test.ex ╎list element: *.test.ex domain.com in "test.ex : *.test.ex"? no (end of list) end sublist local_domains -domain.com in "! +local_domains"? yes (end of list) +domain.com in domains? yes (end of list) +try option router_home_directory +try option set +processing address_data ╭considering: $local_part ├──────value: userx ╰──(tainted) - ├──expanding: $local_part + ├───expanded: $local_part ╰─────result: userx ╰──(tainted) domain.com in "*"? list element: * domain.com in "*"? yes (matched "*") -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D from ip4.ip4.ip4.ip4 ... 127.0.0.1 in hosts_try_fastopen? - list element: - connected +try option transport +try option unseen +try option interface +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D from ip4.ip4.ip4.ip4 ... +try option dscp + 127.0.0.1 in hosts_try_fastopen? + list element: +connected +try option helo_data ╭considering: $primary_hostname ├──────value: myhost.test.ex - ├──expanding: $primary_hostname + ├───expanded: $primary_hostname ╰─────result: myhost.test.ex SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 127.0.0.1 in hosts_avoid_esmtp? no (option unset) @@ -110,102 +140,104 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_D from ip4.ip4.ip4.ip4 ... 127.0.0.1 in cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello the.local.host.name [ip4.ip4.ip4.ip4] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS 250 HELP - ╭considering: ${if and {{match{$host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} - ╭considering: $host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} +try option host_name_extract + ╭considering: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} + ╭considering: $host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├──────value: 127.0.0.1 - ├considering: }{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} - ├──expanding: $host + ├considering: }{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} + ├───expanded: $host ╰─────result: 127.0.0.1 - ╭considering: .outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} + ╭considering: .outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├───────text: .outlook.com - ├considering: \$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} + ├considering: \$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├backslashed: '\$' - ├considering: }} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} - ├──expanding: .outlook.com\$ + ├considering: }}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} + ├───expanded: .outlook.com\$ ╰─────result: .outlook.com$ - ╭───scanning: $item}{\N^250-([\w.]+)\s\N}}} {$1}} + ╭───scanning: $item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├──────value: - ├───scanning: }{\N^250-([\w.]+)\s\N}}} {$1}} - ├──expanding: $item - ├─────result: + ├───scanning: }{\N^250-([\w.]+)\s\N}}}░{$1}} + ├───expanded: $item + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ╭───scanning: \N^250-([\w.]+)\s\N}}} {$1}} + ╭───scanning: \N^250-([\w.]+)\s\N}}}░{$1}} ├──protected: ^250-([\w.]+)\s - ├───scanning: }}} {$1}} - ├──expanding: \N^250-([\w.]+)\s\N - ├─────result: ^250-([\w.]+)\s + ├───scanning: }}}░{$1}} + ├───expanded: \N^250-([\w.]+)\s\N + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ├──condition: and {{match{$host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} + ├──condition: and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}} ├─────result: false ╭───scanning: $1}} ├───scanning: }} - ├──expanding: $1 - ├─────result: + ├───expanded: $1 + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ├──expanding: ${if and {{match{$host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} + ├───expanded: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ╰─────result: - ╭considering: ${if eq {$address_data}{usery}{*}{:}} + ╭considering: ${if░eq░{$address_data}{usery}{*}{:}} ╭considering: $address_data}{usery}{*}{:}} ├──────value: userx ╰──(tainted) ├considering: }{usery}{*}{:}} - ├──expanding: $address_data + ├───expanded: $address_data ╰─────result: userx ╰──(tainted) ╭considering: usery}{*}{:}} ├───────text: usery ├considering: }{*}{:}} - ├──expanding: usery + ├───expanded: usery ╰─────result: usery - ├──condition: eq {$address_data}{usery} + ├──condition: eq░{$address_data}{usery} ├─────result: false ╭───scanning: *}{:}} ├───────text: * ├───scanning: }{:}} - ├──expanding: * - ├─────result: * + ├───expanded: * + ├─────result: ◀skipped▶ ╰───skipping: result is not used ╭considering: :}} ├───────text: : ├considering: }} - ├──expanding: : + ├───expanded: : ╰─────result: : - ├──expanding: ${if eq {$address_data}{usery}{*}{:}} + ├───expanded: ${if░eq░{$address_data}{usery}{*}{:}} ╰─────result: : 127.0.0.1 in hosts_avoid_tls? list element: 127.0.0.1 in hosts_avoid_tls? no (end of list) - ╭considering: ${if eq {$address_data}{userz}{*}{:}} + ╭considering: ${if░eq░{$address_data}{userz}{*}{:}} ╭considering: $address_data}{userz}{*}{:}} ├──────value: userx ╰──(tainted) ├considering: }{userz}{*}{:}} - ├──expanding: $address_data + ├───expanded: $address_data ╰─────result: userx ╰──(tainted) ╭considering: userz}{*}{:}} ├───────text: userz ├considering: }{*}{:}} - ├──expanding: userz + ├───expanded: userz ╰─────result: userz - ├──condition: eq {$address_data}{userz} + ├──condition: eq░{$address_data}{userz} ├─────result: false ╭───scanning: *}{:}} ├───────text: * ├───scanning: }{:}} - ├──expanding: * - ├─────result: * + ├───expanded: * + ├─────result: ◀skipped▶ ╰───skipping: result is not used ╭considering: :}} ├───────text: : ├considering: }} - ├──expanding: : + ├───expanded: : ╰─────result: : - ├──expanding: ${if eq {$address_data}{userz}{*}{:}} + ├───expanded: ${if░eq░{$address_data}{userz}{*}{:}} ╰─────result: : 127.0.0.1 in hosts_verify_avoid_tls? list element: @@ -225,6 +257,7 @@ cmd buf flush ddd bytes cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello the.local.host.name [ip4.ip4.ip4.ip4] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -232,6 +265,7 @@ cmd buf flush ddd bytes using PIPELINING not using DSN 127.0.0.1 in hosts_require_auth? no (option unset) +try option authenticated_sender SMTP|> MAIL FROM: SMTP>> RCPT TO: cmd buf flush ddd bytes @@ -241,366 +275,369 @@ sync_responses expect rcpt for userx@domain.com SMTP<< 250 Accepted holding verify callout open for cutthrough delivery ----------- end cutthrough setup ------------ +try option acl_smtp_predata processing "accept" (TESTSUITE/test-config 55) accept: condition test succeeded in inline ACL end of inline ACL: ACCEPT SMTP>> DATA SMTP<< 354 Enter message, ending with "." on a line by itself +try option message_id_header_domain +try option message_id_header_text ╭considering: ${tod_full} - ├──expanding: ${tod_full} - ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 - ╭considering: Received: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: Received: - ├considering: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├───expanded: ${tod_full} + ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 +try option received_header_text + ╭considering: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: Received:░ + ├considering: ${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_rcvhost ├─────result: false - ╭───scanning: from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: from - ├───scanning: $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭───scanning: from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: from░ + ├───scanning: $sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: - ├───scanning: - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - - ├───scanning: }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: from $sender_rcvhost - - ├─────result: from - + ├───scanning: ↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉ + ├───scanning: }{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: from░$sender_rcvhost↩ + ␉ + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ╭considering: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_ident ├─────result: true - ╭considering: from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: from - ├considering: ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ╎╭considering: $sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - ╎ }}(Exim $version_number) - ╎ ${if def:sender_address {(envelope-from <$sender_address>) - ╎ }}id $message_exim_id${if def:received_for { - ╎ for $received_for}} + ╭considering: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: from░ + ├considering: ${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ╎╭considering: $sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ╎␉}}(Exim░$version_number)↩ + ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ╎␉}}id░$message_exim_id${if░def:received_for░{↩ + ╎␉for░$received_for}} ╎├──────value: CALLER - ╎├considering: } }}${if def:sender_helo_name {(helo=$sender_helo_name) - ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - ╎ }}(Exim $version_number) - ╎ ${if def:sender_address {(envelope-from <$sender_address>) - ╎ }}id $message_exim_id${if def:received_for { - ╎ for $received_for}} - ╎├──expanding: $sender_ident + ╎├considering: }░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ╎␉}}(Exim░$version_number)↩ + ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ╎␉}}id░$message_exim_id${if░def:received_for░{↩ + ╎␉for░$received_for}} + ╎├───expanded: $sender_ident ╎╰─────result: CALLER ├─────op-res: CALLER - ├considering: }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: from ${quote_local_part:$sender_ident} - ╰─────result: from CALLER - ├───item-res: from CALLER - ├considering: ${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: }}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: from░${quote_local_part:$sender_ident}░ + ╰─────result: from░CALLER░ + ├───item-res: from░CALLER░ + ├considering: ${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_helo_name ├─────result: true - ╭considering: (helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: (helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├───────text: (helo= - ├considering: $sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: $sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: myhost.test.ex ╰──(tainted) - ├considering: ) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: ) - - ├considering: }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: (helo=$sender_helo_name) - - ╰─────result: (helo=myhost.test.ex) - + ├considering: )↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: )↩ + ␉ + ├considering: }}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: (helo=$sender_helo_name)↩ + ␉ + ╰─────result: (helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├───item-res: (helo=myhost.test.ex) - + ├───item-res: (helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├considering: }}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }} - ╰─────result: from CALLER (helo=myhost.test.ex) - + ├considering: }}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}} + ╰─────result: from░CALLER░(helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├───item-res: from CALLER (helo=myhost.test.ex) - + ├───item-res: from░CALLER░(helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├considering: by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: by - ├considering: $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: by░ + ├considering: $primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: myhost.test.ex - ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: ${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:received_protocol ├─────result: true - ╭considering: with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: with - ├considering: $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: with░ + ├considering: $received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: local-esmtp - ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: with $received_protocol - ╰─────result: with local-esmtp - ├───item-res: with local-esmtp + ├considering: ░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: }}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: with░$received_protocol░ + ╰─────result: with░local-esmtp░ + ├───item-res: with░local-esmtp░ ╰──(tainted) - ├considering: ${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: ($tls_in_ver) - ├─────result: () + ├considering: ${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ░($tls_in_ver) + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: ╰──(tainted) - ├considering: ${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:tls_in_cipher_std ├─────result: false - ╭───scanning: tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: tls - ├───scanning: $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭───scanning: ░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░tls░ + ├───scanning: $tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: - ├───scanning: - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - - ├───scanning: }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: tls $tls_in_cipher_std - - ├─────result: tls - + ├───scanning: ↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉ + ├───scanning: }}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ░tls░$tls_in_cipher_std↩ + ␉ + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: ╰──(tainted) - ├considering: (Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: (Exim - ├considering: $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: (Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: (Exim░ + ├considering: $version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: x.yz - ├considering: ) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: ) - - ├considering: ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: )↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: )↩ + ␉ + ├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_address ├─────result: true - ╭considering: (envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: (envelope-from < - ├considering: $sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: (envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: (envelope-from░< + ├considering: $sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: CALLER@myhost.test.ex - ├considering: >) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: >) - - ├considering: }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: (envelope-from <$sender_address>) - - ╰─────result: (envelope-from ) - - ├───item-res: (envelope-from ) - + ├considering: >)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: >)↩ + ␉ + ├considering: }}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: (envelope-from░<$sender_address>)↩ + ␉ + ╰─────result: (envelope-from░)↩ + ␉ + ├───item-res: (envelope-from░)↩ + ␉ ╰──(tainted) - ├considering: id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: id - ├considering: $message_exim_id${if def:received_for { - for $received_for}} + ├considering: id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: id░ + ├considering: $message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: 10HmaX-000000005vi-0000 - ├considering: ${if def:received_for { - for $received_for}} + ├considering: ${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:received_for ├─────result: true - ╭considering: - for $received_for}} - ├───────text: - for + ╭considering: ↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉for░ ├considering: $received_for}} ├──────value: userx@domain.com ╰──(tainted) ├considering: }} - ├──expanding: - for $received_for - ╰─────result: - for userx@domain.com + ├───expanded: ↩ + ␉for░$received_for + ╰─────result: ↩ + ␉for░userx@domain.com ╰──(tainted) - ├───item-res: - for userx@domain.com + ├───item-res: ↩ + ␉for░userx@domain.com ╰──(tainted) - ├──expanding: Received: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ╰─────result: Received: from CALLER (helo=myhost.test.ex) - by myhost.test.ex with local-esmtp (Exim x.yz) - (envelope-from ) - id 10HmaX-000000005vi-0000 - for userx@domain.com + ├───expanded: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ╰─────result: Received:░from░CALLER░(helo=myhost.test.ex)↩ + ␉by░myhost.test.ex░with░local-esmtp░(Exim░x.yz)↩ + ␉(envelope-from░)↩ + ␉id░10HmaX-000000005vi-0000↩ + ␉for░userx@domain.com ╰──(tainted) ----------- start cutthrough headers send ----------- ----------- done cutthrough headers send ------------ +try option acl_smtp_data ╭considering: ${tod_full} - ├──expanding: ${tod_full} - ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 + ├───expanded: ${tod_full} + ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 SMTP>> . SMTP<< 250 OK id=10HmaY-000000005vi-0000 LOG: MAIN @@ -614,31 +651,46 @@ LOG: MAIN <= CALLER@myhost.test.ex U=CALLER P=local-esmtp S=sss LOG: MAIN Completed +try option acl_smtp_quit 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= adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys configuration file is TESTSUITE/test-config admin user +try option gecos_pattern +try option gecos_name +try option unknown_login +try option smtp_active_hostname in hosts_connection_nolog? no (option unset) LOG: smtp_connection MAIN SMTP connection from CALLER - ╭considering: $smtp_active_hostname ESMTP Exim $version_number $tod_full +try option message_size_limit +try option acl_smtp_connect +try option smtp_banner + ╭considering: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full ├──────value: myhost.test.ex - ├considering: ESMTP Exim $version_number $tod_full - ├───────text: ESMTP Exim - ├considering: $version_number $tod_full + ├considering: ░ESMTP░Exim░$version_number░$tod_full + ├───────text: ░ESMTP░Exim░ + ├considering: $version_number░$tod_full ├──────value: x.yz - ├considering: $tod_full - ├───────text: + ├considering: ░$tod_full + ├───────text: ░ ├considering: $tod_full - ├──────value: Tue, 2 Mar 1999 09:44:33 +0000 - ├──expanding: $smtp_active_hostname ESMTP Exim $version_number $tod_full - ╰─────result: myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 + ├──────value: Tue,░2░Mar░1999░09:44:33░+0000 + ├───expanded: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full + ╰─────result: myhost.test.ex░ESMTP░Exim░x.yz░Tue,░2░Mar░1999░09:44:33░+0000 +try option acl_smtp_helo + list element: * + in limits_advertise_hosts? yes (matched "*") in dsn_advertise_hosts? no (option unset) +try option acl_smtp_etrn +try option acl_smtp_vrfy +try option acl_smtp_expn in pipelining_advertise_hosts? list element: * in pipelining_advertise_hosts? yes (matched "*") @@ -646,82 +698,98 @@ LOG: smtp_connection MAIN in chunking_advertise_hosts? no (end of list) list element: * in tls_advertise_hosts? yes (matched "*") - ╭considering: ${if eq {SERVER}{server}{queue}{cutthrough}} +try option acl_smtp_mail +try option acl_smtp_rcpt + ╭considering: ${if░eq░{SERVER}{server}{queue}{cutthrough}} ╭considering: SERVER}{server}{queue}{cutthrough}} ├───────text: SERVER ├considering: }{server}{queue}{cutthrough}} - ├──expanding: SERVER + ├───expanded: SERVER ╰─────result: SERVER ╭considering: server}{queue}{cutthrough}} ├───────text: server ├considering: }{queue}{cutthrough}} - ├──expanding: server + ├───expanded: server ╰─────result: server - ├──condition: eq {SERVER}{server} + ├──condition: eq░{SERVER}{server} ├─────result: false ╭───scanning: queue}{cutthrough}} ├───────text: queue ├───scanning: }{cutthrough}} - ├──expanding: queue - ├─────result: queue + ├───expanded: queue + ├─────result: ◀skipped▶ ╰───skipping: result is not used ╭considering: cutthrough}} ├───────text: cutthrough ├considering: }} - ├──expanding: cutthrough + ├───expanded: cutthrough ╰─────result: cutthrough - ├──expanding: ${if eq {SERVER}{server}{queue}{cutthrough}} + ├───expanded: ${if░eq░{SERVER}{server}{queue}{cutthrough}} ╰─────result: cutthrough using ACL "cutthrough" processing "accept" (TESTSUITE/test-config 22) check control = cutthrough_delivery check verify = recipient -domain.com in "! +local_domains"? - list element: ! +local_domains +domain.com in domains? + list element: !░+local_domains start sublist local_domains domain.com in "test.ex : *.test.ex"? ╎list element: test.ex ╎list element: *.test.ex domain.com in "test.ex : *.test.ex"? no (end of list) end sublist local_domains -domain.com in "! +local_domains"? yes (end of list) +domain.com in domains? yes (end of list) +try option router_home_directory +try option set +processing address_data ╭considering: $local_part ├──────value: usery ╰──(tainted) - ├──expanding: $local_part + ├───expanded: $local_part ╰─────result: usery ╰──(tainted) domain.com in "*"? list element: * domain.com in "*"? yes (matched "*") +try option transport +try option unseen ----------- end verify ------------ accept: condition test succeeded in ACL "cutthrough" end of ACL "cutthrough": ACCEPT ----------- start cutthrough setup ------------ -domain.com in "! +local_domains"? - list element: ! +local_domains +domain.com in domains? + list element: !░+local_domains start sublist local_domains domain.com in "test.ex : *.test.ex"? ╎list element: test.ex ╎list element: *.test.ex domain.com in "test.ex : *.test.ex"? no (end of list) end sublist local_domains -domain.com in "! +local_domains"? yes (end of list) +domain.com in domains? yes (end of list) +try option router_home_directory +try option set +processing address_data ╭considering: $local_part ├──────value: usery ╰──(tainted) - ├──expanding: $local_part + ├───expanded: $local_part ╰─────result: usery ╰──(tainted) domain.com in "*"? list element: * domain.com in "*"? yes (matched "*") -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D from ip4.ip4.ip4.ip4 ... 127.0.0.1 in hosts_try_fastopen? - list element: - connected +try option transport +try option unseen +try option interface +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D from ip4.ip4.ip4.ip4 ... +try option dscp + 127.0.0.1 in hosts_try_fastopen? + list element: +connected +try option helo_data ╭considering: $primary_hostname ├──────value: myhost.test.ex - ├──expanding: $primary_hostname + ├───expanded: $primary_hostname ╰─────result: myhost.test.ex SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 127.0.0.1 in hosts_avoid_esmtp? no (option unset) @@ -729,71 +797,73 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_D from ip4.ip4.ip4.ip4 ... 127.0.0.1 in cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello the.local.host.name [ip4.ip4.ip4.ip4] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS 250 HELP - ╭considering: ${if and {{match{$host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} - ╭considering: $host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} +try option host_name_extract + ╭considering: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} + ╭considering: $host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├──────value: 127.0.0.1 - ├considering: }{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} - ├──expanding: $host + ├considering: }{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} + ├───expanded: $host ╰─────result: 127.0.0.1 - ╭considering: .outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} + ╭considering: .outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├───────text: .outlook.com - ├considering: \$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} + ├considering: \$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├backslashed: '\$' - ├considering: }} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} - ├──expanding: .outlook.com\$ + ├considering: }}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} + ├───expanded: .outlook.com\$ ╰─────result: .outlook.com$ - ╭───scanning: $item}{\N^250-([\w.]+)\s\N}}} {$1}} + ╭───scanning: $item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├──────value: - ├───scanning: }{\N^250-([\w.]+)\s\N}}} {$1}} - ├──expanding: $item - ├─────result: + ├───scanning: }{\N^250-([\w.]+)\s\N}}}░{$1}} + ├───expanded: $item + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ╭───scanning: \N^250-([\w.]+)\s\N}}} {$1}} + ╭───scanning: \N^250-([\w.]+)\s\N}}}░{$1}} ├──protected: ^250-([\w.]+)\s - ├───scanning: }}} {$1}} - ├──expanding: \N^250-([\w.]+)\s\N - ├─────result: ^250-([\w.]+)\s + ├───scanning: }}}░{$1}} + ├───expanded: \N^250-([\w.]+)\s\N + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ├──condition: and {{match{$host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} + ├──condition: and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}} ├─────result: false ╭───scanning: $1}} ├───scanning: }} - ├──expanding: $1 - ├─────result: + ├───expanded: $1 + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ├──expanding: ${if and {{match{$host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} + ├───expanded: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ╰─────result: - ╭considering: ${if eq {$address_data}{usery}{*}{:}} + ╭considering: ${if░eq░{$address_data}{usery}{*}{:}} ╭considering: $address_data}{usery}{*}{:}} ├──────value: usery ╰──(tainted) ├considering: }{usery}{*}{:}} - ├──expanding: $address_data + ├───expanded: $address_data ╰─────result: usery ╰──(tainted) ╭considering: usery}{*}{:}} ├───────text: usery ├considering: }{*}{:}} - ├──expanding: usery + ├───expanded: usery ╰─────result: usery - ├──condition: eq {$address_data}{usery} + ├──condition: eq░{$address_data}{usery} ├─────result: true ╭considering: *}{:}} ├───────text: * ├considering: }{:}} - ├──expanding: * + ├───expanded: * ╰─────result: * ╭───scanning: :}} ├───────text: : ├───scanning: }} - ├──expanding: : - ├─────result: : + ├───expanded: : + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ├──expanding: ${if eq {$address_data}{usery}{*}{:}} + ├───expanded: ${if░eq░{$address_data}{usery}{*}{:}} ╰─────result: * 127.0.0.1 in hosts_avoid_tls? list element: * @@ -802,6 +872,7 @@ cmd buf flush ddd bytes using PIPELINING not using DSN 127.0.0.1 in hosts_require_auth? no (option unset) +try option authenticated_sender SMTP|> MAIL FROM: SMTP>> RCPT TO: cmd buf flush ddd bytes @@ -811,366 +882,369 @@ sync_responses expect rcpt for usery@domain.com SMTP<< 250 Accepted holding verify callout open for cutthrough delivery ----------- end cutthrough setup ------------ +try option acl_smtp_predata processing "accept" (TESTSUITE/test-config 55) accept: condition test succeeded in inline ACL end of inline ACL: ACCEPT SMTP>> DATA SMTP<< 354 Enter message, ending with "." on a line by itself +try option message_id_header_domain +try option message_id_header_text ╭considering: ${tod_full} - ├──expanding: ${tod_full} - ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 - ╭considering: Received: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: Received: - ├considering: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├───expanded: ${tod_full} + ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 +try option received_header_text + ╭considering: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: Received:░ + ├considering: ${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_rcvhost ├─────result: false - ╭───scanning: from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: from - ├───scanning: $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭───scanning: from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: from░ + ├───scanning: $sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: - ├───scanning: - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - - ├───scanning: }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: from $sender_rcvhost - - ├─────result: from - + ├───scanning: ↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉ + ├───scanning: }{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: from░$sender_rcvhost↩ + ␉ + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ╭considering: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_ident ├─────result: true - ╭considering: from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: from - ├considering: ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ╎╭considering: $sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - ╎ }}(Exim $version_number) - ╎ ${if def:sender_address {(envelope-from <$sender_address>) - ╎ }}id $message_exim_id${if def:received_for { - ╎ for $received_for}} + ╭considering: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: from░ + ├considering: ${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ╎╭considering: $sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ╎␉}}(Exim░$version_number)↩ + ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ╎␉}}id░$message_exim_id${if░def:received_for░{↩ + ╎␉for░$received_for}} ╎├──────value: CALLER - ╎├considering: } }}${if def:sender_helo_name {(helo=$sender_helo_name) - ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - ╎ }}(Exim $version_number) - ╎ ${if def:sender_address {(envelope-from <$sender_address>) - ╎ }}id $message_exim_id${if def:received_for { - ╎ for $received_for}} - ╎├──expanding: $sender_ident + ╎├considering: }░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ╎␉}}(Exim░$version_number)↩ + ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ╎␉}}id░$message_exim_id${if░def:received_for░{↩ + ╎␉for░$received_for}} + ╎├───expanded: $sender_ident ╎╰─────result: CALLER ├─────op-res: CALLER - ├considering: }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: from ${quote_local_part:$sender_ident} - ╰─────result: from CALLER - ├───item-res: from CALLER - ├considering: ${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: }}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: from░${quote_local_part:$sender_ident}░ + ╰─────result: from░CALLER░ + ├───item-res: from░CALLER░ + ├considering: ${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_helo_name ├─────result: true - ╭considering: (helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: (helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├───────text: (helo= - ├considering: $sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: $sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: myhost.test.ex ╰──(tainted) - ├considering: ) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: ) - - ├considering: }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: (helo=$sender_helo_name) - - ╰─────result: (helo=myhost.test.ex) - + ├considering: )↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: )↩ + ␉ + ├considering: }}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: (helo=$sender_helo_name)↩ + ␉ + ╰─────result: (helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├───item-res: (helo=myhost.test.ex) - + ├───item-res: (helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├considering: }}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }} - ╰─────result: from CALLER (helo=myhost.test.ex) - + ├considering: }}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}} + ╰─────result: from░CALLER░(helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├───item-res: from CALLER (helo=myhost.test.ex) - + ├───item-res: from░CALLER░(helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├considering: by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: by - ├considering: $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: by░ + ├considering: $primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: myhost.test.ex - ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: ${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:received_protocol ├─────result: true - ╭considering: with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: with - ├considering: $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: with░ + ├considering: $received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: local-esmtp - ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: with $received_protocol - ╰─────result: with local-esmtp - ├───item-res: with local-esmtp + ├considering: ░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: }}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: with░$received_protocol░ + ╰─────result: with░local-esmtp░ + ├───item-res: with░local-esmtp░ ╰──(tainted) - ├considering: ${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: ($tls_in_ver) - ├─────result: () + ├considering: ${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ░($tls_in_ver) + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: ╰──(tainted) - ├considering: ${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:tls_in_cipher_std ├─────result: false - ╭───scanning: tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: tls - ├───scanning: $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭───scanning: ░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░tls░ + ├───scanning: $tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: - ├───scanning: - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - - ├───scanning: }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: tls $tls_in_cipher_std - - ├─────result: tls - + ├───scanning: ↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉ + ├───scanning: }}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ░tls░$tls_in_cipher_std↩ + ␉ + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: ╰──(tainted) - ├considering: (Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: (Exim - ├considering: $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: (Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: (Exim░ + ├considering: $version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: x.yz - ├considering: ) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: ) - - ├considering: ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: )↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: )↩ + ␉ + ├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_address ├─────result: true - ╭considering: (envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: (envelope-from < - ├considering: $sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: (envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: (envelope-from░< + ├considering: $sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: CALLER@myhost.test.ex - ├considering: >) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: >) - - ├considering: }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: (envelope-from <$sender_address>) - - ╰─────result: (envelope-from ) - - ├───item-res: (envelope-from ) - + ├considering: >)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: >)↩ + ␉ + ├considering: }}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: (envelope-from░<$sender_address>)↩ + ␉ + ╰─────result: (envelope-from░)↩ + ␉ + ├───item-res: (envelope-from░)↩ + ␉ ╰──(tainted) - ├considering: id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: id - ├considering: $message_exim_id${if def:received_for { - for $received_for}} + ├considering: id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: id░ + ├considering: $message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: 10HmaZ-000000005vi-0000 - ├considering: ${if def:received_for { - for $received_for}} + ├considering: ${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:received_for ├─────result: true - ╭considering: - for $received_for}} - ├───────text: - for + ╭considering: ↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉for░ ├considering: $received_for}} ├──────value: usery@domain.com ╰──(tainted) ├considering: }} - ├──expanding: - for $received_for - ╰─────result: - for usery@domain.com + ├───expanded: ↩ + ␉for░$received_for + ╰─────result: ↩ + ␉for░usery@domain.com ╰──(tainted) - ├───item-res: - for usery@domain.com + ├───item-res: ↩ + ␉for░usery@domain.com ╰──(tainted) - ├──expanding: Received: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ╰─────result: Received: from CALLER (helo=myhost.test.ex) - by myhost.test.ex with local-esmtp (Exim x.yz) - (envelope-from ) - id 10HmaZ-000000005vi-0000 - for usery@domain.com + ├───expanded: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ╰─────result: Received:░from░CALLER░(helo=myhost.test.ex)↩ + ␉by░myhost.test.ex░with░local-esmtp░(Exim░x.yz)↩ + ␉(envelope-from░)↩ + ␉id░10HmaZ-000000005vi-0000↩ + ␉for░usery@domain.com ╰──(tainted) ----------- start cutthrough headers send ----------- ----------- done cutthrough headers send ------------ +try option acl_smtp_data ╭considering: ${tod_full} - ├──expanding: ${tod_full} - ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 + ├───expanded: ${tod_full} + ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 SMTP>> . SMTP<< 250 OK id=10HmbA-000000005vi-0000 LOG: MAIN @@ -1184,31 +1258,46 @@ LOG: MAIN <= CALLER@myhost.test.ex U=CALLER P=local-esmtp S=sss LOG: MAIN Completed +try option acl_smtp_quit 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= adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys configuration file is TESTSUITE/test-config admin user +try option gecos_pattern +try option gecos_name +try option unknown_login +try option smtp_active_hostname in hosts_connection_nolog? no (option unset) LOG: smtp_connection MAIN SMTP connection from CALLER - ╭considering: $smtp_active_hostname ESMTP Exim $version_number $tod_full +try option message_size_limit +try option acl_smtp_connect +try option smtp_banner + ╭considering: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full ├──────value: myhost.test.ex - ├considering: ESMTP Exim $version_number $tod_full - ├───────text: ESMTP Exim - ├considering: $version_number $tod_full + ├considering: ░ESMTP░Exim░$version_number░$tod_full + ├───────text: ░ESMTP░Exim░ + ├considering: $version_number░$tod_full ├──────value: x.yz - ├considering: $tod_full - ├───────text: + ├considering: ░$tod_full + ├───────text: ░ ├considering: $tod_full - ├──────value: Tue, 2 Mar 1999 09:44:33 +0000 - ├──expanding: $smtp_active_hostname ESMTP Exim $version_number $tod_full - ╰─────result: myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 + ├──────value: Tue,░2░Mar░1999░09:44:33░+0000 + ├───expanded: $smtp_active_hostname░ESMTP░Exim░$version_number░$tod_full + ╰─────result: myhost.test.ex░ESMTP░Exim░x.yz░Tue,░2░Mar░1999░09:44:33░+0000 +try option acl_smtp_helo + list element: * + in limits_advertise_hosts? yes (matched "*") in dsn_advertise_hosts? no (option unset) +try option acl_smtp_etrn +try option acl_smtp_vrfy +try option acl_smtp_expn in pipelining_advertise_hosts? list element: * in pipelining_advertise_hosts? yes (matched "*") @@ -1216,82 +1305,98 @@ LOG: smtp_connection MAIN in chunking_advertise_hosts? no (end of list) list element: * in tls_advertise_hosts? yes (matched "*") - ╭considering: ${if eq {SERVER}{server}{queue}{cutthrough}} +try option acl_smtp_mail +try option acl_smtp_rcpt + ╭considering: ${if░eq░{SERVER}{server}{queue}{cutthrough}} ╭considering: SERVER}{server}{queue}{cutthrough}} ├───────text: SERVER ├considering: }{server}{queue}{cutthrough}} - ├──expanding: SERVER + ├───expanded: SERVER ╰─────result: SERVER ╭considering: server}{queue}{cutthrough}} ├───────text: server ├considering: }{queue}{cutthrough}} - ├──expanding: server + ├───expanded: server ╰─────result: server - ├──condition: eq {SERVER}{server} + ├──condition: eq░{SERVER}{server} ├─────result: false ╭───scanning: queue}{cutthrough}} ├───────text: queue ├───scanning: }{cutthrough}} - ├──expanding: queue - ├─────result: queue + ├───expanded: queue + ├─────result: ◀skipped▶ ╰───skipping: result is not used ╭considering: cutthrough}} ├───────text: cutthrough ├considering: }} - ├──expanding: cutthrough + ├───expanded: cutthrough ╰─────result: cutthrough - ├──expanding: ${if eq {SERVER}{server}{queue}{cutthrough}} + ├───expanded: ${if░eq░{SERVER}{server}{queue}{cutthrough}} ╰─────result: cutthrough using ACL "cutthrough" processing "accept" (TESTSUITE/test-config 22) check control = cutthrough_delivery check verify = recipient -domain.com in "! +local_domains"? - list element: ! +local_domains +domain.com in domains? + list element: !░+local_domains start sublist local_domains domain.com in "test.ex : *.test.ex"? ╎list element: test.ex ╎list element: *.test.ex domain.com in "test.ex : *.test.ex"? no (end of list) end sublist local_domains -domain.com in "! +local_domains"? yes (end of list) +domain.com in domains? yes (end of list) +try option router_home_directory +try option set +processing address_data ╭considering: $local_part ├──────value: usery ╰──(tainted) - ├──expanding: $local_part + ├───expanded: $local_part ╰─────result: usery ╰──(tainted) domain.com in "*"? list element: * domain.com in "*"? yes (matched "*") +try option transport +try option unseen ----------- end verify ------------ accept: condition test succeeded in ACL "cutthrough" end of ACL "cutthrough": ACCEPT ----------- start cutthrough setup ------------ -domain.com in "! +local_domains"? - list element: ! +local_domains +domain.com in domains? + list element: !░+local_domains start sublist local_domains domain.com in "test.ex : *.test.ex"? ╎list element: test.ex ╎list element: *.test.ex domain.com in "test.ex : *.test.ex"? no (end of list) end sublist local_domains -domain.com in "! +local_domains"? yes (end of list) +domain.com in domains? yes (end of list) +try option router_home_directory +try option set +processing address_data ╭considering: $local_part ├──────value: usery ╰──(tainted) - ├──expanding: $local_part + ├───expanded: $local_part ╰─────result: usery ╰──(tainted) domain.com in "*"? list element: * domain.com in "*"? yes (matched "*") -Connecting to 127.0.0.1 [127.0.0.1]:PORT_D from ip4.ip4.ip4.ip4 ... 127.0.0.1 in hosts_try_fastopen? - list element: - connected +try option transport +try option unseen +try option interface +Connecting to 127.0.0.1 [127.0.0.1]:PORT_D from ip4.ip4.ip4.ip4 ... +try option dscp + 127.0.0.1 in hosts_try_fastopen? + list element: +connected +try option helo_data ╭considering: $primary_hostname ├──────value: myhost.test.ex - ├──expanding: $primary_hostname + ├───expanded: $primary_hostname ╰─────result: myhost.test.ex SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 127.0.0.1 in hosts_avoid_esmtp? no (option unset) @@ -1299,71 +1404,73 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_D from ip4.ip4.ip4.ip4 ... 127.0.0.1 in cmd buf flush ddd bytes SMTP<< 250-myhost.test.ex Hello the.local.host.name [ip4.ip4.ip4.ip4] 250-SIZE 52428800 + 250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS 250 HELP - ╭considering: ${if and {{match{$host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} - ╭considering: $host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} +try option host_name_extract + ╭considering: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} + ╭considering: $host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├──────value: 127.0.0.1 - ├considering: }{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} - ├──expanding: $host + ├considering: }{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} + ├───expanded: $host ╰─────result: 127.0.0.1 - ╭considering: .outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} + ╭considering: .outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├───────text: .outlook.com - ├considering: \$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} + ├considering: \$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├backslashed: '\$' - ├considering: }} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} - ├──expanding: .outlook.com\$ + ├considering: }}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} + ├───expanded: .outlook.com\$ ╰─────result: .outlook.com$ - ╭───scanning: $item}{\N^250-([\w.]+)\s\N}}} {$1}} + ╭───scanning: $item}{\N^250-([\w.]+)\s\N}}}░{$1}} ├──────value: - ├───scanning: }{\N^250-([\w.]+)\s\N}}} {$1}} - ├──expanding: $item - ├─────result: + ├───scanning: }{\N^250-([\w.]+)\s\N}}}░{$1}} + ├───expanded: $item + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ╭───scanning: \N^250-([\w.]+)\s\N}}} {$1}} + ╭───scanning: \N^250-([\w.]+)\s\N}}}░{$1}} ├──protected: ^250-([\w.]+)\s - ├───scanning: }}} {$1}} - ├──expanding: \N^250-([\w.]+)\s\N - ├─────result: ^250-([\w.]+)\s + ├───scanning: }}}░{$1}} + ├───expanded: \N^250-([\w.]+)\s\N + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ├──condition: and {{match{$host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} + ├──condition: and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}} ├─────result: false ╭───scanning: $1}} ├───scanning: }} - ├──expanding: $1 - ├─────result: + ├───expanded: $1 + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ├──expanding: ${if and {{match{$host}{.outlook.com\$}} {match{$item}{\N^250-([\w.]+)\s\N}}} {$1}} + ├───expanded: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}} ╰─────result: - ╭considering: ${if eq {$address_data}{usery}{*}{:}} + ╭considering: ${if░eq░{$address_data}{usery}{*}{:}} ╭considering: $address_data}{usery}{*}{:}} ├──────value: usery ╰──(tainted) ├considering: }{usery}{*}{:}} - ├──expanding: $address_data + ├───expanded: $address_data ╰─────result: usery ╰──(tainted) ╭considering: usery}{*}{:}} ├───────text: usery ├considering: }{*}{:}} - ├──expanding: usery + ├───expanded: usery ╰─────result: usery - ├──condition: eq {$address_data}{usery} + ├──condition: eq░{$address_data}{usery} ├─────result: true ╭considering: *}{:}} ├───────text: * ├considering: }{:}} - ├──expanding: * + ├───expanded: * ╰─────result: * ╭───scanning: :}} ├───────text: : ├───scanning: }} - ├──expanding: : - ├─────result: : + ├───expanded: : + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ├──expanding: ${if eq {$address_data}{usery}{*}{:}} + ├───expanded: ${if░eq░{$address_data}{usery}{*}{:}} ╰─────result: * 127.0.0.1 in hosts_avoid_tls? list element: * @@ -1372,6 +1479,7 @@ cmd buf flush ddd bytes using PIPELINING not using DSN 127.0.0.1 in hosts_require_auth? no (option unset) +try option authenticated_sender SMTP|> MAIL FROM: SMTP>> RCPT TO: cmd buf flush ddd bytes @@ -1381,366 +1489,369 @@ sync_responses expect rcpt for usery@domain.com SMTP<< 250 Accepted holding verify callout open for cutthrough delivery ----------- end cutthrough setup ------------ +try option acl_smtp_predata processing "accept" (TESTSUITE/test-config 55) accept: condition test succeeded in inline ACL end of inline ACL: ACCEPT SMTP>> DATA SMTP<< 354 Enter message, ending with "." on a line by itself +try option message_id_header_domain +try option message_id_header_text ╭considering: ${tod_full} - ├──expanding: ${tod_full} - ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 - ╭considering: Received: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: Received: - ├considering: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├───expanded: ${tod_full} + ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 +try option received_header_text + ╭considering: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: Received:░ + ├considering: ${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_rcvhost ├─────result: false - ╭───scanning: from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: from - ├───scanning: $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭───scanning: from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: from░ + ├───scanning: $sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: - ├───scanning: - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - - ├───scanning: }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: from $sender_rcvhost - - ├─────result: from - + ├───scanning: ↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉ + ├───scanning: }{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: from░$sender_rcvhost↩ + ␉ + ├─────result: ◀skipped▶ ╰───skipping: result is not used - ╭considering: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_ident ├─────result: true - ╭considering: from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: from - ├considering: ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ╎╭considering: $sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - ╎ }}(Exim $version_number) - ╎ ${if def:sender_address {(envelope-from <$sender_address>) - ╎ }}id $message_exim_id${if def:received_for { - ╎ for $received_for}} + ╭considering: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: from░ + ├considering: ${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ╎╭considering: $sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ╎␉}}(Exim░$version_number)↩ + ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ╎␉}}id░$message_exim_id${if░def:received_for░{↩ + ╎␉for░$received_for}} ╎├──────value: CALLER - ╎├considering: } }}${if def:sender_helo_name {(helo=$sender_helo_name) - ╎ }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - ╎ }}(Exim $version_number) - ╎ ${if def:sender_address {(envelope-from <$sender_address>) - ╎ }}id $message_exim_id${if def:received_for { - ╎ for $received_for}} - ╎├──expanding: $sender_ident + ╎├considering: }░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ╎␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ╎␉}}(Exim░$version_number)↩ + ╎␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ╎␉}}id░$message_exim_id${if░def:received_for░{↩ + ╎␉for░$received_for}} + ╎├───expanded: $sender_ident ╎╰─────result: CALLER ├─────op-res: CALLER - ├considering: }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: from ${quote_local_part:$sender_ident} - ╰─────result: from CALLER - ├───item-res: from CALLER - ├considering: ${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: }}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: from░${quote_local_part:$sender_ident}░ + ╰─────result: from░CALLER░ + ├───item-res: from░CALLER░ + ├considering: ${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_helo_name ├─────result: true - ╭considering: (helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: (helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├───────text: (helo= - ├considering: $sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: $sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: myhost.test.ex ╰──(tainted) - ├considering: ) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: ) - - ├considering: }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: (helo=$sender_helo_name) - - ╰─────result: (helo=myhost.test.ex) - + ├considering: )↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: )↩ + ␉ + ├considering: }}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: (helo=$sender_helo_name)↩ + ␉ + ╰─────result: (helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├───item-res: (helo=myhost.test.ex) - + ├───item-res: (helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├considering: }}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }} - ╰─────result: from CALLER (helo=myhost.test.ex) - + ├considering: }}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}} + ╰─────result: from░CALLER░(helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├───item-res: from CALLER (helo=myhost.test.ex) - + ├───item-res: from░CALLER░(helo=myhost.test.ex)↩ + ␉ ╰──(tainted) - ├considering: by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: by - ├considering: $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: by░ + ├considering: $primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: myhost.test.ex - ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: ${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:received_protocol ├─────result: true - ╭considering: with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: with - ├considering: $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: with░ + ├considering: $received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: local-esmtp - ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - ├considering: }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: with $received_protocol - ╰─────result: with local-esmtp - ├───item-res: with local-esmtp + ├considering: ░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░ + ├considering: }}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: with░$received_protocol░ + ╰─────result: with░local-esmtp░ + ├───item-res: with░local-esmtp░ ╰──(tainted) - ├considering: ${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: ($tls_in_ver) - ├─────result: () + ├considering: ${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ░($tls_in_ver) + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: ╰──(tainted) - ├considering: ${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: ${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:tls_in_cipher_std ├─────result: false - ╭───scanning: tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: tls - ├───scanning: $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭───scanning: ░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ░tls░ + ├───scanning: $tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: - ├───scanning: - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: - - ├───scanning: }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: tls $tls_in_cipher_std - - ├─────result: tls - + ├───scanning: ↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉ + ├───scanning: }}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: ░tls░$tls_in_cipher_std↩ + ␉ + ├─────result: ◀skipped▶ ╰───skipping: result is not used ├───item-res: ╰──(tainted) - ├considering: (Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: (Exim - ├considering: $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: (Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: (Exim░ + ├considering: $version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: x.yz - ├considering: ) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: ) - - ├considering: ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ├considering: )↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: )↩ + ␉ + ├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:sender_address ├─────result: true - ╭considering: (envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: (envelope-from < - ├considering: $sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} + ╭considering: (envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: (envelope-from░< + ├considering: $sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: CALLER@myhost.test.ex - ├considering: >) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: >) - - ├considering: }}id $message_exim_id${if def:received_for { - for $received_for}} - ├──expanding: (envelope-from <$sender_address>) - - ╰─────result: (envelope-from ) - - ├───item-res: (envelope-from ) - + ├considering: >)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: >)↩ + ␉ + ├considering: }}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───expanded: (envelope-from░<$sender_address>)↩ + ␉ + ╰─────result: (envelope-from░)↩ + ␉ + ├───item-res: (envelope-from░)↩ + ␉ ╰──(tainted) - ├considering: id $message_exim_id${if def:received_for { - for $received_for}} - ├───────text: id - ├considering: $message_exim_id${if def:received_for { - for $received_for}} + ├considering: id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ├───────text: id░ + ├considering: $message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} ├──────value: 10HmbB-000000005vi-0000 - ├considering: ${if def:received_for { - for $received_for}} + ├considering: ${if░def:received_for░{↩ + ␉for░$received_for}} ├──condition: def:received_for ├─────result: true - ╭considering: - for $received_for}} - ├───────text: - for + ╭considering: ↩ + ␉for░$received_for}} + ├───────text: ↩ + ␉for░ ├considering: $received_for}} ├──────value: usery@domain.com ╰──(tainted) ├considering: }} - ├──expanding: - for $received_for - ╰─────result: - for usery@domain.com + ├───expanded: ↩ + ␉for░$received_for + ╰─────result: ↩ + ␉for░usery@domain.com ╰──(tainted) - ├───item-res: - for usery@domain.com + ├───item-res: ↩ + ␉for░usery@domain.com ╰──(tainted) - ├──expanding: Received: ${if def:sender_rcvhost {from $sender_rcvhost - }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name) - }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std - }}(Exim $version_number) - ${if def:sender_address {(envelope-from <$sender_address>) - }}id $message_exim_id${if def:received_for { - for $received_for}} - ╰─────result: Received: from CALLER (helo=myhost.test.ex) - by myhost.test.ex with local-esmtp (Exim x.yz) - (envelope-from ) - id 10HmbB-000000005vi-0000 - for usery@domain.com + ├───expanded: Received:░${if░def:sender_rcvhost░{from░$sender_rcvhost↩ + ␉}{${if░def:sender_ident░{from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩ + ␉}}}}by░$primary_hostname░${if░def:received_protocol░{with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩ + ␉}}(Exim░$version_number)↩ + ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩ + ␉}}id░$message_exim_id${if░def:received_for░{↩ + ␉for░$received_for}} + ╰─────result: Received:░from░CALLER░(helo=myhost.test.ex)↩ + ␉by░myhost.test.ex░with░local-esmtp░(Exim░x.yz)↩ + ␉(envelope-from░)↩ + ␉id░10HmbB-000000005vi-0000↩ + ␉for░usery@domain.com ╰──(tainted) ----------- start cutthrough headers send ----------- ----------- done cutthrough headers send ------------ +try option acl_smtp_data ╭considering: ${tod_full} - ├──expanding: ${tod_full} - ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000 + ├───expanded: ${tod_full} + ╰─────result: Tue,░2░Mar░1999░09:44:33░+0000 SMTP>> . SMTP<< 250 OK id=10HmbC-000000005vi-0000 LOG: MAIN @@ -1754,6 +1865,7 @@ LOG: MAIN <= CALLER@myhost.test.ex U=CALLER P=local-esmtp S=sss LOG: MAIN Completed +try option acl_smtp_quit LOG: smtp_connection MAIN SMTP connection from CALLER D=qqs closed by QUIT >>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/5820 b/test/stderr/5820 index 717fe93ce..362fffd94 100644 --- a/test/stderr/5820 +++ b/test/stderr/5820 @@ -18,9 +18,12 @@ >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing rcptuser@dane256ee.test.ex >>> calling client router ->>> dane256ee.test.ex in "*"? ->>> list element: * ->>> dane256ee.test.ex in "*"? yes (matched "*") +>>> check dnssec require list +>>> dane256ee.test.ex in dnssec_require_domains? no (option unset) +>>> check dnssec request list +>>> dane256ee.test.ex in dnssec_request_domains? +>>> list element: * +>>> dane256ee.test.ex in dnssec_request_domains? yes (matched "*") >>> local host found for non-MX address >>> routed by client router >>> Attempting full verification using callout @@ -30,15 +33,17 @@ >>> list element: ip4.ip4.ip4.ip4 >>> ip4.ip4.ip4.ip4 in hosts_require_dane? yes (matched "ip4.ip4.ip4.ip4") >>> interface=NULL port=PORT_D ->>> Connecting to dane256ee.test.ex [ip4.ip4.ip4.ip4]:PORT_D ... ip4.ip4.ip4.ip4 in hosts_try_fastopen? ->>> list element: ->>> >>> connected +>>> Connecting to dane256ee.test.ex [ip4.ip4.ip4.ip4]:PORT_D ... +>>> ip4.ip4.ip4.ip4 in hosts_try_fastopen? +>>> list element: +>>> connected >>> SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 >>> ip4.ip4.ip4.ip4 in hosts_avoid_esmtp? no (option unset) >>> SMTP>> EHLO myhost.test.ex >>> cmd buf flush 21 bytes >>> SMTP<< 250-myhost.test.ex Hello the.local.host.name [ip4.ip4.ip4.ip4] >>> 250-SIZE 52428800 +>>> 250-LIMITS MAILMAX=1000 RCPTMAX=50000 >>> 250-8BITMIME >>> 250-PIPELINING >>> 250-STARTTLS @@ -54,6 +59,7 @@ >>> cmd buf flush 21 bytes >>> SMTP<< 250-myhost.test.ex Hello the.local.host.name [ip4.ip4.ip4.ip4] >>> 250-SIZE 52428800 +>>> 250-LIMITS MAILMAX=1000 RCPTMAX=50000 >>> 250-8BITMIME >>> 250-PIPELINING >>> 250 HELP diff --git a/test/stderr/5840 b/test/stderr/5840 index e217f1502..8da93ab49 100644 --- a/test/stderr/5840 +++ b/test/stderr/5840 @@ -18,9 +18,12 @@ >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> routing rcptuser@dane256ee.test.ex >>> calling client router ->>> dane256ee.test.ex in "*"? ->>> list element: * ->>> dane256ee.test.ex in "*"? yes (matched "*") +>>> check dnssec require list +>>> dane256ee.test.ex in dnssec_require_domains? no (option unset) +>>> check dnssec request list +>>> dane256ee.test.ex in dnssec_request_domains? +>>> list element: * +>>> dane256ee.test.ex in dnssec_request_domains? yes (matched "*") >>> local host found for non-MX address >>> routed by client router >>> Attempting full verification using callout @@ -30,15 +33,17 @@ >>> list element: ip4.ip4.ip4.ip4 >>> ip4.ip4.ip4.ip4 in hosts_require_dane? yes (matched "ip4.ip4.ip4.ip4") >>> interface=NULL port=PORT_D ->>> Connecting to dane256ee.test.ex [ip4.ip4.ip4.ip4]:PORT_D ... ip4.ip4.ip4.ip4 in hosts_try_fastopen? ->>> list element: ->>> >>> connected +>>> Connecting to dane256ee.test.ex [ip4.ip4.ip4.ip4]:PORT_D ... +>>> ip4.ip4.ip4.ip4 in hosts_try_fastopen? +>>> list element: +>>> connected >>> SMTP<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 >>> ip4.ip4.ip4.ip4 in hosts_avoid_esmtp? no (option unset) >>> SMTP>> EHLO myhost.test.ex >>> cmd buf flush 21 bytes >>> SMTP<< 250-myhost.test.ex Hello the.local.host.name [ip4.ip4.ip4.ip4] >>> 250-SIZE 52428800 +>>> 250-LIMITS MAILMAX=1000 RCPTMAX=50000 >>> 250-8BITMIME >>> 250-PIPELINING >>> 250-STARTTLS @@ -53,6 +58,7 @@ >>> cmd buf flush 21 bytes >>> SMTP<< 250-myhost.test.ex Hello the.local.host.name [ip4.ip4.ip4.ip4] >>> 250-SIZE 52428800 +>>> 250-LIMITS MAILMAX=1000 RCPTMAX=50000 >>> 250-8BITMIME >>> 250-PIPELINING >>> 250 HELP diff --git a/test/stdout/0002 b/test/stdout/0002 index 2d7c82838..0524afd7b 100644 --- a/test/stdout/0002 +++ b/test/stdout/0002 @@ -452,6 +452,7 @@ newline tab\134backslash ~tilde\177DEL\200\201. > gei: y > > isip: y 1.2.3.4 +> isip: n 1.2.3 > isip4: y 1.2.3.4 > isip6: n 1.2.3.4 > isip: n ::1.2.3.256 @@ -465,10 +466,14 @@ newline tab\134backslash ~tilde\177DEL\200\201. > isip: y fe80::a00:20ff:fe86:a061 > isip4: n fe80::a00:20ff:fe86:a061 > isip6: y fe80::a00:20ff:fe86:a061 +> isip6: n fe80:a00:20ff:fe86:a061 > isip: y fe80::1.2.3.4 > isip: n rhubarb > isip4: n rhubarb > isip6: n rhubarb +> isip6: n ::/100 +> isip6: n ::/foo +> isip6: n ::/f o > > match: cdab > match: cdab @@ -965,12 +970,14 @@ xyz > Failed: "if" failed and "fail" requested > yes > match_address: no +> protected: > > primary_hostname: myhost.test.ex > match: cdab > Failed: "if" failed and "fail" requested > yes > match_address: no +> protected: > > -be Sender host name and address etc, all unset > -oMa sender_host_address = @@ -1087,6 +1094,7 @@ xyz 221 myhost.test.ex closing connection > match_ip: 15 > match_ip: 16 +> match_ip: 17 > > in list > in list diff --git a/test/stdout/0019 b/test/stdout/0019 index 5559e27d2..58ec8b2ee 100644 --- a/test/stdout/0019 +++ b/test/stdout/0019 @@ -19,6 +19,7 @@ 501 argument must begin with # 250-the.local.host.name Hello CALLER at a.b.c 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=5 250-8BITMIME 250-ETRN 250-PIPELINING diff --git a/test/stdout/0028 b/test/stdout/0028 index 8bbf23864..b9e058254 100644 --- a/test/stdout/0028 +++ b/test/stdout/0028 @@ -8,6 +8,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at Testing 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0034 b/test/stdout/0034 index 1d81aaf2d..5727e1057 100644 --- a/test/stdout/0034 +++ b/test/stdout/0034 @@ -7,21 +7,25 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at a.b.c 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP 250-myhost.test.ex Hello CALLER at a.b.c 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP 250-myhost.test.ex Hello CALLER at a.b.c 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP 250-myhost.test.ex Hello CALLER at a.b.c 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -53,6 +57,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at a.b.c 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -62,6 +67,7 @@ 250 OK id=10HmbB-000000005vi-0000 250-myhost.test.ex Hello CALLER at a.b.c 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -71,6 +77,7 @@ 250 OK id=10HmbC-000000005vi-0000 250-myhost.test.ex Hello CALLER at a.b.c 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -80,21 +87,25 @@ 250 OK id=10HmbD-000000005vi-0000 250-myhost.test.ex Hello CALLER at a.b.c 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP 250-myhost.test.ex Hello CALLER at a.b.c 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP 250-myhost.test.ex Hello CALLER at a.b.c 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP 250-myhost.test.ex Hello CALLER at a.b.c 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0035 b/test/stdout/0035 index 10c80a0d7..06c5c99e5 100644 --- a/test/stdout/0035 +++ b/test/stdout/0035 @@ -4,13 +4,15 @@ Connecting to 127.0.0.1 port 1225 ... connected >>> ehlo rhu.barb ??? 250- <<< 250-myhost.test.ex Hello rhu.barb [127.0.0.1] -??? 250- +??? 250-SIZE <<< 250-SIZE 52428800 -??? 250- +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250-8BITMIME <<< 250-8BITMIME -??? 250- +??? 250-PIPELINING <<< 250-PIPELINING -??? 250 +??? 250 HELP <<< 250 HELP >>> mail from: ??? 250 @@ -87,6 +89,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -118,6 +122,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/0038 b/test/stdout/0038 index fec80a9ff..54857e7a6 100644 --- a/test/stdout/0038 +++ b/test/stdout/0038 @@ -6,6 +6,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello test.ex [V4NET.9.8.7] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -22,6 +23,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello test.ex [V4NET.9.8.7] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -38,6 +40,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello test.ex [V4NET.9.8.7] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -54,6 +57,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello test.ex [V4NET.9.8.7] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -70,6 +74,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello test.ex [V4NET.9.8.7] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -88,6 +93,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello test.ex [V4NET.9.8.6] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0043 b/test/stdout/0043 index c25b99168..657d50528 100644 --- a/test/stdout/0043 +++ b/test/stdout/0043 @@ -6,6 +6,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello exim.test.ex [V4NET.0.0.97] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0044 b/test/stdout/0044 index b32174a63..b5446e168 100644 --- a/test/stdout/0044 +++ b/test/stdout/0044 @@ -6,6 +6,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello exim.test.ex [V4NET.11.12.13] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -27,6 +28,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello exim.test.ex [V4NET.11.12.13] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -46,6 +48,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello exim.test.ex [V4NET.99.99.99] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0070 b/test/stdout/0070 index 18339e98a..3a80305ca 100644 --- a/test/stdout/0070 +++ b/test/stdout/0070 @@ -97,6 +97,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello rhubarb [99.99.99.99] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0079 b/test/stdout/0079 index 9a8b41ef6..74998992e 100644 --- a/test/stdout/0079 +++ b/test/stdout/0079 @@ -6,6 +6,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello exim.test.ex [V4NET.11.12.14] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -21,6 +22,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at exim.test.ex [V4NET.11.12.13] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -32,6 +34,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at exim.test.ex [V4NET.11.12.14] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0080 b/test/stdout/0080 index afb1bfdf0..ccc5d030f 100644 --- a/test/stdout/0080 +++ b/test/stdout/0080 @@ -6,6 +6,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello exim.test.ex [V4NET.11.12.14] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0121 b/test/stdout/0121 index f3fda94fb..16fcbe1d0 100644 --- a/test/stdout/0121 +++ b/test/stdout/0121 @@ -44,6 +44,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello foo.bar [127.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -51,6 +52,7 @@ 250 Reset OK 250-the.local.host.name Hello foo.bar [127.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -58,6 +60,7 @@ 250 Reset OK 250-the.local.host.name Hello foo.bar [127.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -65,13 +68,7 @@ 250 Reset OK 250-the.local.host.name Hello foo.bar [127.0.0.1] 250-SIZE 52428800 -250-8BITMIME -250-PIPELINING -250 HELP -250 OK -250 Reset OK -250-the.local.host.name Hello foo.bar [127.0.0.1] -250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0138 b/test/stdout/0138 index 6520808c1..f945f9f09 100644 --- a/test/stdout/0138 +++ b/test/stdout/0138 @@ -6,6 +6,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello exim.test.ex [V4NET.11.12.14] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -26,6 +27,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello exim.test.ex [V4NET.11.12.13] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0159 b/test/stdout/0159 index bbb2be429..02869e73b 100644 --- a/test/stdout/0159 +++ b/test/stdout/0159 @@ -7,6 +7,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -33,6 +35,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -59,6 +63,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -85,6 +91,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/0180 b/test/stdout/0180 index e2c14c4ab..70d782d34 100644 --- a/test/stdout/0180 +++ b/test/stdout/0180 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at some.host 250-SIZE 100 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -20,6 +21,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello some.host [1.2.3.4] 250-SIZE 500 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -32,6 +34,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello some.host [5.6.7.8] 250-SIZE 600 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -39,6 +42,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at some.host 250-SIZE 100 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0181 b/test/stdout/0181 index ae4da9034..acbc56e0a 100644 --- a/test/stdout/0181 +++ b/test/stdout/0181 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at some.host 250-SIZE 100 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0213 b/test/stdout/0213 index d3dd7cffc..4647ccbed 100644 --- a/test/stdout/0213 +++ b/test/stdout/0213 @@ -1,5 +1,5 @@ +++++++++++++++++++++++++++ - T:127.0.0.1:127.0.0.1:1224 -19 65 H=127.0.0.1 [127.0.0.1]: Malformed SMTP reply in response to RCPT TO:: 550 The answer is no, but I am going to make sure it is a very l + T:[127.0.0.1]:127.0.0.1:PORT_S -19 65 H=127.0.0.1 [127.0.0.1]: Malformed SMTP reply in response to RCPT TO:: 550 The answer is no, but I am going to make sure it is a very l first failed = time last try = time2 next try = time2 + 3600 ******** SERVER ******** diff --git a/test/stdout/0227 b/test/stdout/0227 index 5eabc24ee..16462813a 100644 --- a/test/stdout/0227 +++ b/test/stdout/0227 @@ -110,6 +110,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello root at me [V4NET.0.0.6] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -119,6 +120,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello root at me [V4NET.0.0.3] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -128,6 +130,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello root at me [V4NET.0.0.3] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -137,6 +140,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello root at me [V4NET.0.0.7] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0243 b/test/stdout/0243 index af7553042..8c9ae230d 100644 --- a/test/stdout/0243 +++ b/test/stdout/0243 @@ -6,6 +6,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello xxxx [1.2.3.4] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0249 b/test/stdout/0249 index 68d431533..054d0892a 100644 --- a/test/stdout/0249 +++ b/test/stdout/0249 @@ -14,3 +14,18 @@ env-from: User@b.domain reply-to: User@d.domain env-from: User@d.domain env-to: User@d.domain + +**** SMTP testing session as if from host 127.0.0.1 +**** but without any ident (RFC 1413) callback. +**** This is not for real! + +220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 +250 myhost.test.ex Hello tester [127.0.0.1] +250 OK +250 Accepted +354 Enter message, ending with "." on a line by itself +250 OK id=10HmaX-000000005vi-0000 + +**** SMTP testing: that is not a real message id! + +221 myhost.test.ex closing connection diff --git a/test/stdout/0264 b/test/stdout/0264 index 159ebfabb..a4c1fb4ff 100644 --- a/test/stdout/0264 +++ b/test/stdout/0264 @@ -1,10 +1,10 @@ +++++++++++++++++++++++++++ - T:userx@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/userx) + T:userx@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to ) first failed = time last try = time2 next try = time2 + 600 +++++++++++++++++++++++++++ - T:test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/notuser) + T:test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to ) first failed = time last try = time2 next try = time2 + 1200 - T:userx@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/userx) + T:userx@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to ) first failed = time last try = time2 next try = time2 + 600 Message 10HmaX-000000005vi-0000 has been removed Message 10HmbA-000000005vi-0000 has been removed diff --git a/test/stdout/0282 b/test/stdout/0282 index 60ed701be..4c805fc47 100644 --- a/test/stdout/0282 +++ b/test/stdout/0282 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -38,6 +40,8 @@ Connecting to 127.0.0.1 port 1226 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/0287 b/test/stdout/0287 index 1fb1f8141..4e5ae1581 100644 --- a/test/stdout/0287 +++ b/test/stdout/0287 @@ -4,15 +4,17 @@ Connecting to 127.0.0.1 port 1225 ... connected >>> ehlo rhu.barb ??? 250- <<< 250-myhost.test.ex Hello rhu.barb [127.0.0.1] -??? 250- +??? 250-SIZE <<< 250-SIZE 52428800 -??? 250- +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250-8BITMIME <<< 250-8BITMIME -??? 250- +??? 250-ETRN <<< 250-ETRN -??? 250- +??? 250-PIPELINING <<< 250-PIPELINING -??? 250 +??? 250 HELP <<< 250 HELP >>> ETRN one ??? 250 diff --git a/test/stdout/0300 b/test/stdout/0300 index 0766a4900..dd9cc8507 100644 --- a/test/stdout/0300 +++ b/test/stdout/0300 @@ -14,6 +14,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -60,6 +62,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250 <<< 250 HELP @@ -86,6 +90,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -106,6 +112,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250 <<< 250 HELP @@ -122,6 +130,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/0301 b/test/stdout/0301 index 0d9b81a2d..a22c50070 100644 --- a/test/stdout/0301 +++ b/test/stdout/0301 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -27,6 +29,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -65,6 +69,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/0303 b/test/stdout/0303 index f88fb299a..72e317720 100644 --- a/test/stdout/0303 +++ b/test/stdout/0303 @@ -14,6 +14,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello ten-1.test.ex [V4NET.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -34,6 +35,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello [V4NET.2.3.4] [V4NET.2.3.4] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -53,6 +55,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello host.name.tld [V4NET.2.3.4] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0343 b/test/stdout/0343 index dbcd79079..37752fc5f 100644 --- a/test/stdout/0343 +++ b/test/stdout/0343 @@ -1,6 +1,6 @@ +++++++++++++++++++++++++++ - T:127.0.0.1:127.0.0.1:1223 dd 65 Connection refused + T:[127.0.0.1]:127.0.0.1:1223 dd 65 Connection refused first failed = time last try = time2 next try = time2 + 600 +++++++++++++++++++++++++++ - T:127.0.0.1:127.0.0.1:1223 dd 65 Connection refused + T:[127.0.0.1]:127.0.0.1:1223 dd 65 Connection refused first failed = time last try = time2 next try = time2 + 600 diff --git a/test/stdout/0345 b/test/stdout/0345 index 1fa2305cd..a3c51fa64 100644 --- a/test/stdout/0345 +++ b/test/stdout/0345 @@ -1,14 +1,14 @@ +++++++++++++++++++++++++++ - T:a@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/a) + T:a@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to ) first failed = time last try = time2 next try = time2 + 20 -rw------- 1 CALLER CALLER 0 May 10 2002 TESTSUITE/test-mail/a +++++++++++++++++++++++++++ - T:a@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/a) + T:a@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to ) first failed = time last try = time2 next try = time2 + 0 * - T:CALLER@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/CALLER) + T:CALLER@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to ) first failed = time last try = time2 next try = time2 + 20 +++++++++++++++++++++++++++ - T:a@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/a) + T:a@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to ) first failed = time last try = time2 next try = time2 + 0 * - T:CALLER@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/CALLER) + T:CALLER@test.ex -22 xxxx mailbox is full (MTA-imposed quota exceeded while writing to ) first failed = time last try = time2 next try = time2 + 20 diff --git a/test/stdout/0367 b/test/stdout/0367 index aa3af08c5..1f42f534a 100644 --- a/test/stdout/0367 +++ b/test/stdout/0367 @@ -32,14 +32,14 @@ DATA 354 More... Received: from CALLER by the.local.host.name with local (Exim x.yz) (envelope-from ) - id 10HmbA-000000005vi-0000 + id 10HmaY-000000005vi-0000 for userx@domain1; Tue, 2 Mar 1999 09:44:33 +0000 -Message-Id: +Message-Id: From: CALLER_NAME Date: Tue, 2 Mar 1999 09:44:33 +0000 -Test message 4 +Test message 2 . 250 OK MAIL FROM: @@ -68,14 +68,14 @@ DATA 354 More... Received: from CALLER by the.local.host.name with local (Exim x.yz) (envelope-from ) - id 10HmaY-000000005vi-0000 + id 10HmbA-000000005vi-0000 for userx@domain1; Tue, 2 Mar 1999 09:44:33 +0000 -Message-Id: +Message-Id: From: CALLER_NAME Date: Tue, 2 Mar 1999 09:44:33 +0000 -Test message 2 +Test message 4 . 250 OK QUIT diff --git a/test/stdout/0371 b/test/stdout/0371 index 75e1085a7..421749843 100644 --- a/test/stdout/0371 +++ b/test/stdout/0371 @@ -6,6 +6,7 @@ 220 mail.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-mail.test.ex Hello something [V4NET.0.0.0] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-VRFY 250-PIPELINING diff --git a/test/stdout/0384 b/test/stdout/0384 index e2c165c0b..25bc1eabb 100644 --- a/test/stdout/0384 +++ b/test/stdout/0384 @@ -6,6 +6,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello [V4NET.9.8.7] [V4NET.9.8.7] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0440 b/test/stdout/0440 index 5a3fbed6c..59fb726c3 100644 --- a/test/stdout/0440 +++ b/test/stdout/0440 @@ -25,38 +25,38 @@ First message 250 OK MAIL FROM: 250 OK -RCPT TO: +RCPT TO: 250 OK DATA 354 OK Received: from CALLER by myhost.test.ex with local (Exim x.yz) (envelope-from ) - id 10HmaZ-000000005vi-0000 - for x3@y3; + id 10HmaY-000000005vi-0000 + for x2@y2; Tue, 2 Mar 1999 09:44:33 +0000 -Message-Id: +Message-Id: From: CALLER_NAME Date: Tue, 2 Mar 1999 09:44:33 +0000 -Third message +Second message . 250 OK MAIL FROM: 250 OK -RCPT TO: +RCPT TO: 250 OK DATA 354 OK Received: from CALLER by myhost.test.ex with local (Exim x.yz) (envelope-from ) - id 10HmaY-000000005vi-0000 - for x2@y2; + id 10HmaZ-000000005vi-0000 + for x3@y3; Tue, 2 Mar 1999 09:44:33 +0000 -Message-Id: +Message-Id: From: CALLER_NAME Date: Tue, 2 Mar 1999 09:44:33 +0000 -Second message +Third message . 250 OK QUIT diff --git a/test/stdout/0447 b/test/stdout/0447 index caecaea8a..9b4f1785d 100644 --- a/test/stdout/0447 +++ b/test/stdout/0447 @@ -4,13 +4,13 @@ Retry rule: * timeout_connect F,1d,1m; Retry rule: * timeout_A F,1d,30s; Retry rule: * timeout_connect_A F,1d,29s; +++++++++++++++++++++++++++ - T:127.0.0.1:127.0.0.1:1224 dd 321 Connection timed out + T:[127.0.0.1]:127.0.0.1:PORT_S dd 321 Connection timed out first failed = time last try = time2 next try = time2 + 60 +++++++++++++++++++++++++++ - T:127.0.0.1:127.0.0.1:1224 dd 321 Connection timed out + T:[127.0.0.1]:127.0.0.1:PORT_S dd 321 Connection timed out first failed = time last try = time2 next try = time2 + 30 +++++++++++++++++++++++++++ - T:127.0.0.1:127.0.0.1:1224 dd 321 Connection timed out + T:[127.0.0.1]:127.0.0.1:PORT_S dd 321 Connection timed out first failed = time last try = time2 next try = time2 + 30 +++++++++++++++++++++++++++ R:xx.test.again.dns -1 0 host lookup did not complete diff --git a/test/stdout/0448 b/test/stdout/0448 index a915781bd..0654ffb0a 100644 --- a/test/stdout/0448 +++ b/test/stdout/0448 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at x.y.z 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -12,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at x.y.z 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0450 b/test/stdout/0450 index 2da7c051e..640292415 100644 --- a/test/stdout/0450 +++ b/test/stdout/0450 @@ -1,5 +1,5 @@ +++++++++++++++++++++++++++ - T:127.0.0.1:127.0.0.1:1225 dd 65 Connection refused + T:[127.0.0.1]:127.0.0.1:1225 dd 65 Connection refused first failed = time last try = time2 next try = time2 + 600 - T:127.0.0.1:127.0.0.1:1226 dd 65 Connection refused + T:[127.0.0.1]:127.0.0.1:1226 dd 65 Connection refused first failed = time last try = time2 next try = time2 + 600 diff --git a/test/stdout/0451 b/test/stdout/0451 index 92efc311a..df1124f45 100644 --- a/test/stdout/0451 +++ b/test/stdout/0451 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at a.b.c.d 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0458 b/test/stdout/0458 index 47d52c1ac..a8e41b9cc 100644 --- a/test/stdout/0458 +++ b/test/stdout/0458 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -61,6 +63,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -115,6 +119,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -181,6 +187,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/0460 b/test/stdout/0460 index 082635b97..e9a538b6b 100644 --- a/test/stdout/0460 +++ b/test/stdout/0460 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/0473 b/test/stdout/0473 index 7ac03f12a..82ff3bf74 100644 --- a/test/stdout/0473 +++ b/test/stdout/0473 @@ -1,6 +1,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at xxxx 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -24,6 +25,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at xxxx 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -33,6 +35,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at xxxx 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -42,6 +45,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at xxxx 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -52,6 +56,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at xxxx 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -61,6 +66,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at xxxx 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -74,6 +80,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at xxxx 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -85,6 +92,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at xxxx 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -104,6 +112,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at xxxx 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -113,6 +122,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at xxxx 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -134,6 +144,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at xxxx 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -143,6 +154,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at xxxx 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0474 b/test/stdout/0474 index b4ae3cce2..4491500a7 100644 --- a/test/stdout/0474 +++ b/test/stdout/0474 @@ -1,8 +1,8 @@ +++++++++++++++++++++++++++ - T:127.0.0.1:127.0.0.1:1224:10HmaX-000000005vi-0000 0 65 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 850 NONSENSE + T:[127.0.0.1]:127.0.0.1:1224:10HmaX-000000005vi-0000 0 65 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 850 NONSENSE first failed = time last try = time2 next try = time2 + 10 +++++++++++++++++++++++++++ - T:127.0.0.1:127.0.0.1:1224:10HmaX-000000005vi-0000 0 65 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:: 850 RUBBISH + T:[127.0.0.1]:127.0.0.1:1224:10HmaX-000000005vi-0000 0 65 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:: 850 RUBBISH first failed = time last try = time2 next try = time2 + 10 +++++++++++++++++++++++++++ R:abcd@xyz: -44 12865 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 850 RUBBISH diff --git a/test/stdout/0475 b/test/stdout/0475 index 819cea3bc..d1f718997 100644 --- a/test/stdout/0475 +++ b/test/stdout/0475 @@ -8,4 +8,6 @@ 250 OK 451 Temporary local problem - please try later 550 Administrative prohibition +550 Administrative prohibition +550 Administrative prohibition 221 the.local.host.name closing connection diff --git a/test/stdout/0485 b/test/stdout/0485 index 0d24cdb98..3d7beff74 100644 --- a/test/stdout/0485 +++ b/test/stdout/0485 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at x.y.z [1.2.3.4] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0486 b/test/stdout/0486 index 9f3c452e3..535075a27 100644 --- a/test/stdout/0486 +++ b/test/stdout/0486 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at x.y.z 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0487 b/test/stdout/0487 index e422660ee..8194c7559 100644 --- a/test/stdout/0487 +++ b/test/stdout/0487 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at x.y 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0495 b/test/stdout/0495 index 5d453389a..8129db3aa 100644 --- a/test/stdout/0495 +++ b/test/stdout/0495 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at a.b 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -13,6 +14,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at a.b 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0497 b/test/stdout/0497 index ac02261ac..acba7c8db 100644 --- a/test/stdout/0497 +++ b/test/stdout/0497 @@ -1,5 +1,5 @@ +++++++++++++++++++++++++++ - T:127.0.0.1:127.0.0.1:1224:10HmaX-000000005vi-0000 -45 13377 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:: 452 temporary error + T:[127.0.0.1]:127.0.0.1:1224:10HmaX-000000005vi-0000 -45 13377 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:: 452 temporary error first failed = time last try = time2 next try = time2 + 0 * +++++++++++++++++++++++++++ R:userx@x.y: -44 13377 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 452 temporary error diff --git a/test/stdout/0498 b/test/stdout/0498 index 727e2a2fb..635730dc9 100644 --- a/test/stdout/0498 +++ b/test/stdout/0498 @@ -1,5 +1,5 @@ +++++++++++++++++++++++++++ - T:127.0.0.1:127.0.0.1:1224:10HmaX-000000005vi-0000 -45 12865 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:: 450 DELAY + T:[127.0.0.1]:127.0.0.1:1224:10HmaX-000000005vi-0000 -45 12865 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:: 450 DELAY first failed = time last try = time2 next try = time2 + 10 ******** SERVER ******** diff --git a/test/stdout/0502 b/test/stdout/0502 index eeb79533f..2f51d0eef 100644 --- a/test/stdout/0502 +++ b/test/stdout/0502 @@ -30,6 +30,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/0513 b/test/stdout/0513 index d0fc6ede1..91d4c8482 100644 --- a/test/stdout/0513 +++ b/test/stdout/0513 @@ -6,6 +6,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello a.b.c.d [1.2.3.4] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0524 b/test/stdout/0524 index fad288a29..93c1e87dc 100644 --- a/test/stdout/0524 +++ b/test/stdout/0524 @@ -6,6 +6,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello csa1.test.ex [V4NET.9.8.7] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -13,6 +14,7 @@ 250 Reset OK 250-myhost.test.ex Hello csa2.test.ex [V4NET.9.8.7] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -26,6 +28,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello csa1.test.ex [V4NET.9.8.8] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -33,6 +36,7 @@ 250 Reset OK 250-myhost.test.ex Hello csa2.test.ex [V4NET.9.8.8] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0536 b/test/stdout/0536 index ff1beab89..8b8c6cea0 100644 --- a/test/stdout/0536 +++ b/test/stdout/0536 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -31,6 +32,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0537 b/test/stdout/0537 index afbab0d29..18663069e 100644 --- a/test/stdout/0537 +++ b/test/stdout/0537 @@ -13,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello ident at hostname [5.6.7.8] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -23,6 +24,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello ident at hostname [5.6.7.8] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0543 b/test/stdout/0543 index 9a99cddf2..c53cb62ad 100644 --- a/test/stdout/0543 +++ b/test/stdout/0543 @@ -1,5 +1,5 @@ +++++++++++++++++++++++++++ -** Failed to open database lock file TESTSUITE/spool/db/wait-smtp.lockfile: No such file or directory +** Failed to open hintsdb TESTSUITE/spool/db/wait-smtp: No such file or directory ******** SERVER ******** Listening on port 1224 ... diff --git a/test/stdout/0544 b/test/stdout/0544 index d267fea04..fb58b95de 100644 --- a/test/stdout/0544 +++ b/test/stdout/0544 @@ -1,6 +1,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at ehlo.domain 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0546 b/test/stdout/0546 index c1fc53b5e..200cc83d3 100644 --- a/test/stdout/0546 +++ b/test/stdout/0546 @@ -1,6 +1,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-One line 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -13,6 +14,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-Two 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -23,6 +25,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 299-With code 299-SIZE 52428800 +299-LIMITS MAILMAX=1000 RCPTMAX=50000 299-8BITMIME 299-PIPELINING 299 HELP diff --git a/test/stdout/0547 b/test/stdout/0547 index 418ddc4ba..84c691121 100644 --- a/test/stdout/0547 +++ b/test/stdout/0547 @@ -17,6 +17,8 @@ Connecting to 127.0.0.1 port 1225 ... connected <<< 250-myhost.test.ex Hello x.y.z [127.0.0.1] ??? 250 <<< 250-SIZE 52428800 +??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250 <<< 250-8BITMIME ??? 250 @@ -39,6 +41,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250 <<< 250-SIZE 52428800 ??? 250 +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250 <<< 250-PIPELINING diff --git a/test/stdout/0549 b/test/stdout/0549 index 7609d5146..d74b70672 100644 --- a/test/stdout/0549 +++ b/test/stdout/0549 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250 <<< 250 HELP @@ -23,6 +25,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/0556 b/test/stdout/0556 index 73046aaa2..c4ebf738e 100644 --- a/test/stdout/0556 +++ b/test/stdout/0556 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -33,6 +35,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250 <<< 250 HELP @@ -51,6 +55,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250 <<< 250 HELP diff --git a/test/stdout/0558 b/test/stdout/0558 index b80b14933..50df10e1e 100644 --- a/test/stdout/0558 +++ b/test/stdout/0558 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -19,6 +20,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0559 b/test/stdout/0559 index b5cc62c49..15a2f078b 100644 --- a/test/stdout/0559 +++ b/test/stdout/0559 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/0562 b/test/stdout/0562 index a32896899..3c96a4fdf 100644 --- a/test/stdout/0562 +++ b/test/stdout/0562 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -75,6 +77,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/0566 b/test/stdout/0566 index c17e9e485..5b1071af2 100644 --- a/test/stdout/0566 +++ b/test/stdout/0566 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at Testing 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -10,6 +11,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at Testing 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -19,6 +21,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at Testing 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -28,6 +31,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at Testing 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -37,6 +41,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at Testing 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -46,6 +51,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at Testing 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -55,6 +61,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at Testing 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -64,6 +71,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at Testing 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -73,6 +81,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at Testing 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -82,6 +91,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at Testing 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -91,6 +101,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at Testing 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -102,6 +113,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at Testing 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -113,6 +125,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at Testing 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -124,6 +137,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at Testing 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/0572 b/test/stdout/0572 index acfa5a0cd..a7347706b 100644 --- a/test/stdout/0572 +++ b/test/stdout/0572 @@ -60,7 +60,6 @@ hosts_require_auth = hosts_try_auth = hosts_try_chunking = * hosts_try_fastopen = : -hosts_try_prdr = * interface = ip4.ip4.ip4.ip4 keepalive no_lmtp_ignore_quota diff --git a/test/stdout/0579 b/test/stdout/0579 index 062573ebd..82ed646ae 100644 --- a/test/stdout/0579 +++ b/test/stdout/0579 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/0583 b/test/stdout/0583 index 9f70b7343..cab36ad45 100644 --- a/test/stdout/0583 +++ b/test/stdout/0583 @@ -6,6 +6,8 @@ Connecting to 127.0.0.1 port 1225 ... connected <<< 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 diff --git a/test/stdout/0610 b/test/stdout/0610 index 48ce1dee0..5fc87bef2 100644 --- a/test/stdout/0610 +++ b/test/stdout/0610 @@ -11,9 +11,9 @@ 250 OK id=10HmaY-000000005vi-0000 221 the.local.host.name closing connection +++++++++++++++++++++++++++ - T:127.0.0.1:127.0.0.1:1225/127.0.0.1 0 65 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after initial connection: 451 Temporary local problem - please try later + T:[127.0.0.1]:127.0.0.1:1225/127.0.0.1 0 65 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after initial connection: 451 Temporary local problem - please try later first failed = time last try = time2 next try = time2 + 2 - T:127.0.0.1:127.0.0.1:1225/ip4.ip4.ip4.ip4 0 65 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after initial connection: 451 Temporary local problem - please try later + T:[127.0.0.1]:127.0.0.1:1225/ip4.ip4.ip4.ip4 0 65 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after initial connection: 451 Temporary local problem - please try later first failed = time last try = time2 next try = time2 + 2 +++++++++++++++++++++++++++ +++++++++++++++++++++++++++ diff --git a/test/stdout/0612 b/test/stdout/0612 index 92b95b4e5..38ff3f068 100644 --- a/test/stdout/0612 +++ b/test/stdout/0612 @@ -6,6 +6,8 @@ Connecting to 127.0.0.1 port 1225 ... connected <<< 250-myhost.test.ex Hello testclient [127.0.0.1] ??? 250-SIZE <<< 250-SIZE 52428800 +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250 HELP <<< 250 HELP End of script @@ -17,6 +19,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected <<< 250-myhost.test.ex Hello testclient [ip4.ip4.ip4.ip4] ??? 250-SIZE <<< 250-SIZE 52428800 +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250-DSN <<< 250-DSN ??? 250 HELP @@ -49,6 +53,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected <<< 250-myhost.test.ex Hello testclient [ip4.ip4.ip4.ip4] ??? 250-SIZE <<< 250-SIZE 52428800 +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250-DSN <<< 250-DSN ??? 250 HELP @@ -78,6 +84,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected <<< 250-myhost.test.ex Hello testclient [ip4.ip4.ip4.ip4] ??? 250-SIZE <<< 250-SIZE 52428800 +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250-DSN <<< 250-DSN ??? 250 HELP @@ -107,6 +115,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected <<< 250-myhost.test.ex Hello testclient [ip4.ip4.ip4.ip4] ??? 250-SIZE <<< 250-SIZE 52428800 +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250-DSN <<< 250-DSN ??? 250 HELP @@ -136,6 +146,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected <<< 250-myhost.test.ex Hello testclient [ip4.ip4.ip4.ip4] ??? 250-SIZE <<< 250-SIZE 52428800 +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250-DSN <<< 250-DSN ??? 250 HELP @@ -167,6 +179,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected <<< 250-myhost.test.ex Hello testclient [ip4.ip4.ip4.ip4] ??? 250-SIZE <<< 250-SIZE 52428800 +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250-DSN <<< 250-DSN ??? 250 HELP diff --git a/test/stdout/0628 b/test/stdout/0628 index 4821f0180..422d6cd41 100644 --- a/test/stdout/0628 +++ b/test/stdout/0628 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -40,6 +42,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/0629 b/test/stdout/0629 index eaa8463ce..8b3b2ff8f 100644 --- a/test/stdout/0629 +++ b/test/stdout/0629 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/0630 b/test/stdout/0630 index 00618e6c8..c7a2173d5 100644 --- a/test/stdout/0630 +++ b/test/stdout/0630 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/0631 b/test/stdout/0631 index b3f7e1dc6..096fc1bc9 100644 --- a/test/stdout/0631 +++ b/test/stdout/0631 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/0633 b/test/stdout/0633 index f7969f84f..91854d5cb 100644 --- a/test/stdout/0633 +++ b/test/stdout/0633 @@ -13,3 +13,957 @@ **** SMTP testing: that is not a real message id! 421 the.local.host.name lost input connection + +**** SMTP testing session as if from host V4NET.0.0.0 +**** but without any ident (RFC 1413) callback. +**** This is not for real! + +220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 +250 the.local.host.name Hello test [V4NET.0.0.0] +250 OK +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +250 Accepted +354 Enter message, ending with "." on a line by itself +250 OK id=10HmaY-000000005vi-0000 + +**** SMTP testing: that is not a real message id! + +421 the.local.host.name lost input connection diff --git a/test/stdout/0637 b/test/stdout/0637 new file mode 100644 index 000000000..97d95ea6e --- /dev/null +++ b/test/stdout/0637 @@ -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: +??? 503 HELO or EHLO required +<<< 503 HELO or EHLO required +>>> mail from: +??? 503 +<<< 503 HELO or EHLO required +>>> mail from: +??? 503 +<<< 503 HELO or EHLO required +>>> mail from: +??? 503- +<<< 503-HELO or EHLO required +??? 503 Too many +<<< 503 Too many syntax or protocol errors +???* +Expected EOF read +End of script diff --git a/test/stdout/0699 b/test/stdout/0699 index 025f2996b..52c85a1d1 100644 --- a/test/stdout/0699 +++ b/test/stdout/0699 @@ -1,10 +1,13 @@ ### Check that delivery of old-format spoolfiles works +TTT sss 10HmaX-0005vi-00 + nulldeliver@test.ex + ### Check that the format-mangler utility can downgrade spoolfiles TTT sss 10HmaX-000000005vi-0000 nulldeliver@test.ex exim_id_update exit code = 0 -TTT sss 10HmaY-0005vi-00-H +TTT sss 10HmaY-0005vi-00 nulldeliver@test.ex ### Check that the format-mangler utility can upgrade spoolfiles diff --git a/test/stdout/0900 b/test/stdout/0900 index 9fe0eb7de..0c8d7ea40 100644 --- a/test/stdout/0900 +++ b/test/stdout/0900 @@ -528,3 +528,47 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 221 <<< 221 testhost.test.ex closing connection End of script +Connecting to 127.0.0.1 port 1225 ... connected +??? 220 +<<< 220 testhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 +>>> ehlo smuggler +??? 250- +<<< 250-testhost.test.ex Hello smuggler [127.0.0.1] +??? 250-SIZE +<<< 250-SIZE 52428800 +??? 250-8BITMIME +<<< 250-8BITMIME +??? 250-PIPELINING +<<< 250-PIPELINING +??? 250-CHUNKING +<<< 250-CHUNKING +??? 250 HELP +<<< 250 HELP +>>> MAIL FROM: +??? 250 +<<< 250 OK +>>> RCPT TO: +??? 250 +<<< 250 Accepted +>>> DATA +??? 354 +<<< 354 Enter message, ending with "." on a line by itself +>>> Subject: test of smuggled smtp +>>> +>>> This is body for initial message +>>> The next line is a bogus end-of-data attempt, followed by a try at a smuggled message: +>>> .\n +>>> mail from: +>>> rcpt to: +>>> bdat 86 last +>>> Subject: send me all your money! +>>> +>>> All your base are belong to us. Send Bitcoins. +>>> QUIT +>>> . +??? 250 +<<< 250 OK id=10HmbI-000000005vi-0000 +>>> QUIT +??? 221 +<<< 221 testhost.test.ex closing connection +End of script diff --git a/test/stdout/0904 b/test/stdout/0904 index b2eae3bf7..db112f277 100644 --- a/test/stdout/0904 +++ b/test/stdout/0904 @@ -85,116 +85,3 @@ RCPT TO: 550 sorry, no QUIT End of script -Listening on port 1224 ... -Connection request from [127.0.0.1] -220 Greetings -EHLO testhost.test.ex -250-Hello there -250-PIPELINING -250 CHUNKING -MAIL FROM:<> -RCPT TO: -BDAT 345 LAST -250 OK mail -250 OK rcpt -250 OK bdat -QUIT -225 OK -Expected EOF read from client -End of script -Listening on port 1224 ... -Connection request from [127.0.0.1] -220 Greetings -EHLO testhost.test.ex -250-Hello there -250-PIPELINING -250 CHUNKING -MAIL FROM:<> -RCPT TO: -BDAT 345 LAST -250 OK mail -250 OK rcpt -250 OK bdat - -Comparison failed - bailing out -Expected: QUIT -Listening on port 1224 ... -Connection request from [127.0.0.1] -220 Greetings -EHLO testhost.test.ex -250-Hello there -250-PIPELINING -250 CHUNKING -MAIL FROM:<> -RCPT TO: -BDAT 345 LAST -550 unacceptable mail-from -550 rcpt ungood lacking mail-from -500 bdat ungood lacking mail-from -QUIT -225 OK -End of script -Listening on port 1224 ... -Connection request from [127.0.0.1] -220 Greetings -EHLO testhost.test.ex -250-Hello there -250-PIPELINING -250 CHUNKING -MAIL FROM:<> -RCPT TO: -BDAT 346 LAST -450 greylisted mail-from -550 rcpt ungood lacking mail-from -500 bdat ungood lacking mail-from -QUIT -225 OK -End of script -Listening on port 1224 ... -Connection request from [127.0.0.1] -220 Greetings -EHLO testhost.test.ex -250-Hello there -250-PIPELINING -250 CHUNKING -MAIL FROM:<> -RCPT TO: -BDAT 345 LAST -250 OK mail -550 no such recipient -500 oops bdat -QUIT -225 OK -End of script -Listening on port 1224 ... -Connection request from [127.0.0.1] -220 Greetings -EHLO testhost.test.ex -250-Hello there -250-PIPELINING -250 CHUNKING -MAIL FROM:<> -RCPT TO: -BDAT 345 LAST -250 OK mail -250 OK rcpt -500 oops bdat -QUIT -225 OK -End of script -Listening on port 1224 ... -Connection request from [127.0.0.1] -220 Greetings -EHLO testhost.test.ex -250-Hello there -250-PIPELINING -250 CHUNKING -MAIL FROM:<> -RCPT TO: -BDAT 345 LAST -250 OK mail -250 OK rcpt -400 not right now bdat -QUIT -225 OK -End of script diff --git a/test/stdout/0905 b/test/stdout/0905 index 9a9104a74..7e687e780 100644 --- a/test/stdout/0905 +++ b/test/stdout/0905 @@ -5,14 +5,13 @@ Connection request from [127.0.0.1] 220 Greetings EHLO testhost.test.ex 250-Hello there +250-PIPELINING 250 CHUNKING MAIL FROM:<> -250 OK RCPT TO: -250 OK -BDAT 311 -250 OK nonlast bdat -BDAT 8380 LAST +BDAT 345 LAST +250 OK mail +250 OK rcpt 250 OK bdat QUIT 225 OK @@ -23,35 +22,17 @@ Connection request from [127.0.0.1] 220 Greetings EHLO testhost.test.ex 250-Hello there -250 CHUNKING -MAIL FROM:<> -250 OK -RCPT TO: -250 OK -BDAT 311 -500 oops bdat-nonlast -QUIT -225 OK -End of script -Listening on port 1224 ... -Connection request from [127.0.0.1] -220 Greetings -EHLO testhost.test.ex -250-Hello there 250-PIPELINING 250 CHUNKING MAIL FROM:<> -RCPT TO: -BDAT 311 +RCPT TO: +BDAT 345 LAST 250 OK mail 250 OK rcpt -250 OK nonlast bdat -BDAT 8380 LAST 250 OK bdat -QUIT -225 OK -Expected EOF read from client -End of script + +Comparison failed - bailing out +Expected: QUIT Listening on port 1224 ... Connection request from [127.0.0.1] 220 Greetings @@ -60,11 +41,11 @@ EHLO testhost.test.ex 250-PIPELINING 250 CHUNKING MAIL FROM:<> -RCPT TO: -BDAT 311 +RCPT TO: +BDAT 345 LAST 550 unacceptable mail-from 550 rcpt ungood lacking mail-from -500 bdat (nonlast) ungood lacking mail-from +500 bdat ungood lacking mail-from QUIT 225 OK End of script @@ -76,11 +57,11 @@ EHLO testhost.test.ex 250-PIPELINING 250 CHUNKING MAIL FROM:<> -RCPT TO: -BDAT 311 -250 OK mail -550 no such recipient -500 oops nonlast bdat - no rcpt +RCPT TO: +BDAT 346 LAST +450 greylisted mail-from +550 rcpt ungood lacking mail-from +500 bdat ungood lacking mail-from QUIT 225 OK End of script @@ -92,48 +73,10 @@ EHLO testhost.test.ex 250-PIPELINING 250 CHUNKING MAIL FROM:<> -RCPT TO: -RCPT TO: -BDAT 295 +RCPT TO: +BDAT 345 LAST 250 OK mail 550 no such recipient -250 good recipient -200 OK nonlast bdat -BDAT 8380 LAST -250 OK bdat -QUIT -225 OK -End of script -Listening on port 1224 ... -Connection request from [127.0.0.1] -220 Greetings -EHLO testhost.test.ex -250-Hello there -250-PIPELINING -250 CHUNKING -MAIL FROM:<> -RCPT TO: -BDAT 311 -250 OK mail -250 OK rcpt -500 oops nonlast bdat -QUIT -225 OK -End of script -Listening on port 1224 ... -Connection request from [127.0.0.1] -220 Greetings -EHLO testhost.test.ex -250-Hello there -250-PIPELINING -250 CHUNKING -MAIL FROM:<> -RCPT TO: -BDAT 311 -250 OK mail -250 OK rcpt -250 OK nonlast bdat -BDAT 8380 LAST 500 oops bdat QUIT 225 OK @@ -146,11 +89,11 @@ EHLO testhost.test.ex 250-PIPELINING 250 CHUNKING MAIL FROM:<> -RCPT TO: -BDAT 311 +RCPT TO: +BDAT 345 LAST 250 OK mail 250 OK rcpt -400 oops nonlast bdat +500 oops bdat QUIT 225 OK End of script @@ -162,14 +105,11 @@ EHLO testhost.test.ex 250-PIPELINING 250 CHUNKING MAIL FROM:<> -RCPT TO: -BDAT 8191 +RCPT TO: +BDAT 345 LAST 250 OK mail 250 OK rcpt -250 OK nonlast bdat -BDAT 823 LAST -250 OK bdat +400 not right now bdat QUIT 225 OK -Expected EOF read from client End of script diff --git a/test/stdout/0906 b/test/stdout/0906 index 2fbed0632..9a9104a74 100644 --- a/test/stdout/0906 +++ b/test/stdout/0906 @@ -1,123 +1,175 @@ -Connecting to 127.0.0.1 port 1224 ... connected -??? 220 -<<< 220 testhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 ->>> EHLO test.com -??? 250- -<<< 250-testhost.test.ex Hello test.com [127.0.0.1] -??? 250- -<<< 250-SIZE 52428800 -??? 250- -<<< 250-8BITMIME -??? 250- -<<< 250-PIPELINING -??? 250- -<<< 250-CHUNKING -??? 250 -<<< 250 HELP ->>> MAIL FROM: -??? 250 -<<< 250 OK ->>> RCPT TO: -??? 250 -<<< 250 Accepted ->>> BDAT 8408 LAST ->>> Subject: foo ->>> ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ->>> .dot ->>> tail -??? 250- -<<< 250- 8408 byte chunk, total 8408 -??? 250 -<<< 250 OK id=10HmaY-000000005vi-0000 ->>> QUIT + +******** SERVER ******** +Listening on port 1224 ... +Connection request from [127.0.0.1] +220 Greetings +EHLO testhost.test.ex +250-Hello there +250 CHUNKING +MAIL FROM:<> +250 OK +RCPT TO: +250 OK +BDAT 311 +250 OK nonlast bdat +BDAT 8380 LAST +250 OK bdat +QUIT +225 OK +Expected EOF read from client +End of script +Listening on port 1224 ... +Connection request from [127.0.0.1] +220 Greetings +EHLO testhost.test.ex +250-Hello there +250 CHUNKING +MAIL FROM:<> +250 OK +RCPT TO: +250 OK +BDAT 311 +500 oops bdat-nonlast +QUIT +225 OK +End of script +Listening on port 1224 ... +Connection request from [127.0.0.1] +220 Greetings +EHLO testhost.test.ex +250-Hello there +250-PIPELINING +250 CHUNKING +MAIL FROM:<> +RCPT TO: +BDAT 311 +250 OK mail +250 OK rcpt +250 OK nonlast bdat +BDAT 8380 LAST +250 OK bdat +QUIT +225 OK +Expected EOF read from client +End of script +Listening on port 1224 ... +Connection request from [127.0.0.1] +220 Greetings +EHLO testhost.test.ex +250-Hello there +250-PIPELINING +250 CHUNKING +MAIL FROM:<> +RCPT TO: +BDAT 311 +550 unacceptable mail-from +550 rcpt ungood lacking mail-from +500 bdat (nonlast) ungood lacking mail-from +QUIT +225 OK +End of script +Listening on port 1224 ... +Connection request from [127.0.0.1] +220 Greetings +EHLO testhost.test.ex +250-Hello there +250-PIPELINING +250 CHUNKING +MAIL FROM:<> +RCPT TO: +BDAT 311 +250 OK mail +550 no such recipient +500 oops nonlast bdat - no rcpt +QUIT +225 OK +End of script +Listening on port 1224 ... +Connection request from [127.0.0.1] +220 Greetings +EHLO testhost.test.ex +250-Hello there +250-PIPELINING +250 CHUNKING +MAIL FROM:<> +RCPT TO: +RCPT TO: +BDAT 295 +250 OK mail +550 no such recipient +250 good recipient +200 OK nonlast bdat +BDAT 8380 LAST +250 OK bdat +QUIT +225 OK +End of script +Listening on port 1224 ... +Connection request from [127.0.0.1] +220 Greetings +EHLO testhost.test.ex +250-Hello there +250-PIPELINING +250 CHUNKING +MAIL FROM:<> +RCPT TO: +BDAT 311 +250 OK mail +250 OK rcpt +500 oops nonlast bdat +QUIT +225 OK +End of script +Listening on port 1224 ... +Connection request from [127.0.0.1] +220 Greetings +EHLO testhost.test.ex +250-Hello there +250-PIPELINING +250 CHUNKING +MAIL FROM:<> +RCPT TO: +BDAT 311 +250 OK mail +250 OK rcpt +250 OK nonlast bdat +BDAT 8380 LAST +500 oops bdat +QUIT +225 OK +End of script +Listening on port 1224 ... +Connection request from [127.0.0.1] +220 Greetings +EHLO testhost.test.ex +250-Hello there +250-PIPELINING +250 CHUNKING +MAIL FROM:<> +RCPT TO: +BDAT 311 +250 OK mail +250 OK rcpt +400 oops nonlast bdat +QUIT +225 OK +End of script +Listening on port 1224 ... +Connection request from [127.0.0.1] +220 Greetings +EHLO testhost.test.ex +250-Hello there +250-PIPELINING +250 CHUNKING +MAIL FROM:<> +RCPT TO: +BDAT 8191 +250 OK mail +250 OK rcpt +250 OK nonlast bdat +BDAT 823 LAST +250 OK bdat +QUIT +225 OK +Expected EOF read from client End of script diff --git a/test/stdout/0908 b/test/stdout/0908 new file mode 100644 index 000000000..d86631f77 --- /dev/null +++ b/test/stdout/0908 @@ -0,0 +1,125 @@ +Connecting to 127.0.0.1 port 1224 ... connected +??? 220 +<<< 220 testhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 +>>> EHLO test.com +??? 250- +<<< 250-testhost.test.ex Hello test.com [127.0.0.1] +??? 250- +<<< 250-SIZE 52428800 +??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- +<<< 250-8BITMIME +??? 250- +<<< 250-PIPELINING +??? 250- +<<< 250-CHUNKING +??? 250 +<<< 250 HELP +>>> MAIL FROM: +??? 250 +<<< 250 OK +>>> RCPT TO: +??? 250 +<<< 250 Accepted +>>> BDAT 8408 LAST +>>> Subject: foo +>>> +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +>>> .dot +>>> tail +??? 250- +<<< 250- 8408 byte chunk, total 8408 +??? 250 +<<< 250 OK id=10HmaY-000000005vi-0000 +>>> QUIT +End of script diff --git a/test/stdout/0909 b/test/stdout/0909 new file mode 100644 index 000000000..00441c8d9 --- /dev/null +++ b/test/stdout/0909 @@ -0,0 +1,123 @@ +220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 +250 myhost.test.ex Hello root at tester +250 OK +250 Accepted +354 Enter message, ending with "." on a line by itself +250 OK id=10HmaX-000000005vi-0000 +221 myhost.test.ex closing connection +220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 +250 myhost.test.ex Hello root at tester +250 OK +250 Accepted +354 Enter message, ending with "." on a line by itself +250 OK id=10HmaY-000000005vi-0000 +221 myhost.test.ex closing connection +220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 +250 myhost.test.ex Hello root at tester +250 OK +250 Accepted +354 Enter message, ending with "." on a line by itself +250 OK id=10HmaZ-000000005vi-0000 +221 myhost.test.ex closing connection +Message 10HmaZ-000000005vi-0000 has been removed +220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 +250 myhost.test.ex Hello root at tester +250 OK +250 Accepted +354 Enter message, ending with "." on a line by itself +250 OK id=10HmbA-000000005vi-0000 +221 myhost.test.ex closing connection +220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 +250 myhost.test.ex Hello root at tester +250 OK +250 Accepted +354 Enter message, ending with "." on a line by itself +250 OK id=10HmbB-000000005vi-0000 +221 myhost.test.ex closing connection +Message 10HmbB-000000005vi-0000 has been removed + +******** SERVER ******** +Listening on port 1225 ... +Connection request from [127.0.0.1] +220 Server ready +EHLO myhost.test.ex +250-hi there +250-PIPELINING +250-CHUNKING +250 OK +MAIL FROM:<> +RCPT TO: +BDAT 329 LAST +250 OK mail +250 OK rcpt +QUIT +250 OK chunked message data +221 Closing connection +End of script +Listening on port 1225 ... +Connection request from [127.0.0.1] +220 Server ready +EHLO myhost.test.ex +250-hi there +250-CHUNKING +250 OK +MAIL FROM:<> +250 OK mail +RCPT TO: +250 OK rcpt +BDAT 331 LAST +250 OK chunked message data +QUIT +221 Closing connection +End of script +Listening on port 1225 ... +Connection request from [127.0.0.1] +220 Server ready +EHLO myhost.test.ex +250-hi there +250-PIPELINING +250-CHUNKING +250 OK +MAIL FROM:<> +250 OK mail +RCPT TO: +250 OK rcpt +BDAT 335 LAST +QUIT +451 Service not available +221 Closing connection +Expected EOF read from client +End of script +Listening on port 1225 ... +Connection request from [127.0.0.1] +220 Server ready +EHLO myhost.test.ex +250-hi there +250-PIPELINING +250-CHUNKING +250 OK +MAIL FROM:<> +250 OK mail +RCPT TO: +250 OK rcpt +BDAT 335 LAST +QUIT +550 content rejected +221 Closing connection +Expected EOF read from client +End of script +Listening on port 1225 ... +Connection request from [127.0.0.1] +220 Server ready +EHLO myhost.test.ex +250-hi there +250-PIPELINING +250-CHUNKING +250 OK +MAIL FROM:<> +250 OK mail +RCPT TO: +250 OK rcpt +BDAT 333 LAST +>*eof +End of script diff --git a/test/stdout/0911 b/test/stdout/0911 deleted file mode 100644 index 00441c8d9..000000000 --- a/test/stdout/0911 +++ /dev/null @@ -1,123 +0,0 @@ -220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 -250 myhost.test.ex Hello root at tester -250 OK -250 Accepted -354 Enter message, ending with "." on a line by itself -250 OK id=10HmaX-000000005vi-0000 -221 myhost.test.ex closing connection -220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 -250 myhost.test.ex Hello root at tester -250 OK -250 Accepted -354 Enter message, ending with "." on a line by itself -250 OK id=10HmaY-000000005vi-0000 -221 myhost.test.ex closing connection -220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 -250 myhost.test.ex Hello root at tester -250 OK -250 Accepted -354 Enter message, ending with "." on a line by itself -250 OK id=10HmaZ-000000005vi-0000 -221 myhost.test.ex closing connection -Message 10HmaZ-000000005vi-0000 has been removed -220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 -250 myhost.test.ex Hello root at tester -250 OK -250 Accepted -354 Enter message, ending with "." on a line by itself -250 OK id=10HmbA-000000005vi-0000 -221 myhost.test.ex closing connection -220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 -250 myhost.test.ex Hello root at tester -250 OK -250 Accepted -354 Enter message, ending with "." on a line by itself -250 OK id=10HmbB-000000005vi-0000 -221 myhost.test.ex closing connection -Message 10HmbB-000000005vi-0000 has been removed - -******** SERVER ******** -Listening on port 1225 ... -Connection request from [127.0.0.1] -220 Server ready -EHLO myhost.test.ex -250-hi there -250-PIPELINING -250-CHUNKING -250 OK -MAIL FROM:<> -RCPT TO: -BDAT 329 LAST -250 OK mail -250 OK rcpt -QUIT -250 OK chunked message data -221 Closing connection -End of script -Listening on port 1225 ... -Connection request from [127.0.0.1] -220 Server ready -EHLO myhost.test.ex -250-hi there -250-CHUNKING -250 OK -MAIL FROM:<> -250 OK mail -RCPT TO: -250 OK rcpt -BDAT 331 LAST -250 OK chunked message data -QUIT -221 Closing connection -End of script -Listening on port 1225 ... -Connection request from [127.0.0.1] -220 Server ready -EHLO myhost.test.ex -250-hi there -250-PIPELINING -250-CHUNKING -250 OK -MAIL FROM:<> -250 OK mail -RCPT TO: -250 OK rcpt -BDAT 335 LAST -QUIT -451 Service not available -221 Closing connection -Expected EOF read from client -End of script -Listening on port 1225 ... -Connection request from [127.0.0.1] -220 Server ready -EHLO myhost.test.ex -250-hi there -250-PIPELINING -250-CHUNKING -250 OK -MAIL FROM:<> -250 OK mail -RCPT TO: -250 OK rcpt -BDAT 335 LAST -QUIT -550 content rejected -221 Closing connection -Expected EOF read from client -End of script -Listening on port 1225 ... -Connection request from [127.0.0.1] -220 Server ready -EHLO myhost.test.ex -250-hi there -250-PIPELINING -250-CHUNKING -250 OK -MAIL FROM:<> -250 OK mail -RCPT TO: -250 OK rcpt -BDAT 333 LAST ->*eof -End of script diff --git a/test/stdout/1000 b/test/stdout/1000 index b9ec648b7..00a85edfc 100644 --- a/test/stdout/1000 +++ b/test/stdout/1000 @@ -1,18 +1,17 @@ -**** SMTP testing session as if from host 2001:0ab8:037f:0020:0000:0000:0000:0001 +**** SMTP testing session as if from host 2001:ab8:37f:20::1 **** but without any ident (RFC 1413) callback. **** This is not for real! -220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 -421 myhost.test.ex lost input connection +550 Administrative prohibition -**** SMTP testing session as if from host V6NET:1234:0005:0006:0007:0008:0abc:000d +**** SMTP testing session as if from host V6NET:1234:5:6:7:8:abc:d **** but without any ident (RFC 1413) callback. **** This is not for real! 550 Administrative prohibition -**** SMTP testing session as if from host V6NET:ffff:836f:0a00:000a:0800:200a:c032 +**** SMTP testing session as if from host V6NET:ffff:836f:a00:a:800:200a:c032 **** but without any ident (RFC 1413) callback. **** This is not for real! diff --git a/test/stdout/1001 b/test/stdout/1001 index dede9eb19..fe83d63c5 100644 --- a/test/stdout/1001 +++ b/test/stdout/1001 @@ -7,6 +7,8 @@ Connecting to ip6:ip6:ip6:ip6:ip6:ip6:ip6:ip6 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -33,6 +35,8 @@ Connecting to ip6:ip6:ip6:ip6:ip6:ip6:ip6:ip6 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -59,6 +63,8 @@ Connecting to ip6:ip6:ip6:ip6:ip6:ip6:ip6:ip6 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/1008 b/test/stdout/1008 index 0fb622a03..42485be93 100644 --- a/test/stdout/1008 +++ b/test/stdout/1008 @@ -1,18 +1,14 @@ +++++++++++++++++++++++++++ - T:127.0.0.1:127.0.0.1:1224:10HmaX-000000005vi-0000 -45 12865 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:: 450 Temporary error + T:[127.0.0.1]:127.0.0.1:1224:10HmaX-000000005vi-0000 -45 12865 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:: 450 Temporary error first failed = time last try = time2 next try = time2 + 7200 - T:::1:::1:1224:10HmaX-000000005vi-0000 -45 12865 H=::1 [::1]: SMTP error from remote mail server after MAIL FROM:: 450 Temporary error + T:[::1]:[::1]:1224:10HmaX-000000005vi-0000 -45 12865 H=::1 [::1]: SMTP error from remote mail server after MAIL FROM:: 450 Temporary error first failed = time last try = time2 next try = time2 + 7200 -Transport: 127.0.0.1 [127.0.0.1]:1111 10HmaX-000000005vi-0000 error -45: H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:: 450 Temporary error - first failed: 07-Mar-2000 12:21:52 - last tried: 07-Mar-2000 12:21:52 - next try at: 07-Mar-2000 12:21:52 -Transport: [:1:::1:1224:10HmaX-000000005vi-0000]:1224 10HmaX-000000005vi-0000 error -45: H=::1 [::1]: SMTP error from remote mail server after MAIL FROM:: 450 Temporary error +Transport: [127.0.0.1] 127.0.0.1:PORT_S 10HmaX-000000005vi-0000 error -45: H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:: 450 Temporary error first failed: 07-Mar-2000 12:21:52 last tried: 07-Mar-2000 12:21:52 next try at: 07-Mar-2000 12:21:52 exinext exit code = 0 -Transport: [:1:::1:1224:10HmaX-000000005vi-0000] error -45: H=::1 [::1]: SMTP error from remote mail server after MAIL FROM:: 450 Temporary error +Transport: [::1] [::1]:PORT_S 10HmaX-000000005vi-0000 error -45: H=::1 [::1]: SMTP error from remote mail server after MAIL FROM:: 450 Temporary error first failed: 07-Mar-2000 12:21:52 last tried: 07-Mar-2000 12:21:52 next try at: 07-Mar-2000 12:21:52 diff --git a/test/stdout/1103 b/test/stdout/1103 index 6bedb029a..4529e2a75 100644 --- a/test/stdout/1103 +++ b/test/stdout/1103 @@ -7,6 +7,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -25,6 +27,8 @@ Succeeded in starting TLS ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -49,6 +53,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/1104 b/test/stdout/1104 index 3fcc501b3..116f16952 100644 --- a/test/stdout/1104 +++ b/test/stdout/1104 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -33,6 +35,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/1105 b/test/stdout/1105 index 39f8610c2..07fbc8602 100644 --- a/test/stdout/1105 +++ b/test/stdout/1105 @@ -16,6 +16,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -34,6 +36,8 @@ Succeeded in starting TLS ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/1106 b/test/stdout/1106 index ba53967e0..88817d57b 100644 --- a/test/stdout/1106 +++ b/test/stdout/1106 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/1107 b/test/stdout/1107 index bfef01151..47a2b1614 100644 --- a/test/stdout/1107 +++ b/test/stdout/1107 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -30,6 +32,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/1108 b/test/stdout/1108 index de269abc5..90a8cb285 100644 --- a/test/stdout/1108 +++ b/test/stdout/1108 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -25,6 +27,8 @@ Succeeded in starting TLS ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -56,6 +60,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/1109 b/test/stdout/1109 index 5022d27b3..3523db790 100644 --- a/test/stdout/1109 +++ b/test/stdout/1109 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at a.b.c [10.9.8.10] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS diff --git a/test/stdout/1110 b/test/stdout/1110 index cf8661c6e..e267cabac 100644 --- a/test/stdout/1110 +++ b/test/stdout/1110 @@ -9,6 +9,8 @@ Succeeded in starting TLS ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/1111 b/test/stdout/1111 index 3f280e0d5..eb8d51e99 100644 --- a/test/stdout/1111 +++ b/test/stdout/1111 @@ -7,6 +7,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/1112 b/test/stdout/1112 index 1ccd96b88..c272458c2 100644 --- a/test/stdout/1112 +++ b/test/stdout/1112 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -34,6 +36,8 @@ Succeeded in starting TLS ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/1115 b/test/stdout/1115 new file mode 100644 index 000000000..43eac051c --- /dev/null +++ b/test/stdout/1115 @@ -0,0 +1,6 @@ +Connecting to 127.0.0.1 port 1226 ... connected +Attempting to start TLS +Failed to start TLS +???* +Expected EOF read +End of script diff --git a/test/stdout/2002 b/test/stdout/2002 index e8707e377..e97f6b460 100644 --- a/test/stdout/2002 +++ b/test/stdout/2002 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -25,6 +27,8 @@ Succeeded in starting TLS ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -56,6 +60,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -96,6 +102,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected <<< 250-myhost.test.ex Hello rhu.barb [ip4.ip4.ip4.ip4] ??? 250-SIZE <<< 250-SIZE 52428800 +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250-8BITMIME <<< 250-8BITMIME ??? 250-PIPELINING @@ -125,6 +133,8 @@ Key file = TESTSUITE/aux-fixed/exim-ca/example.com/server2.example.com/server2.e ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -166,6 +176,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -208,6 +220,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/2014 b/test/stdout/2014 index edd498aa8..94b9bdee8 100644 --- a/test/stdout/2014 +++ b/test/stdout/2014 @@ -8,6 +8,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -34,6 +36,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -71,6 +75,8 @@ Key file = aux-fixed/exim-ca/example.com/server1.example.com/server1.example.com ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -108,6 +114,8 @@ Key file = aux-fixed/exim-ca/example.com/server1.example.com/server1.example.com ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -145,6 +153,8 @@ Key file = aux-fixed/exim-ca/example.net/server1.example.net/server1.example.net ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -173,6 +183,8 @@ Key file = aux-fixed/exim-ca/example.net/server1.example.net/server1.example.net ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -210,6 +222,8 @@ Key file = aux-fixed/exim-ca/example.com/revoked1.example.com/revoked1.example.c ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -239,6 +253,8 @@ Key file = aux-fixed/exim-ca/example.com/revoked1.example.com/revoked1.example.c ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -276,6 +292,8 @@ Key file = aux-fixed/exim-ca/example.com/server1.example.com/server1.example.com ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/2024 b/test/stdout/2024 index 9a83c412c..7a930c2b1 100644 --- a/test/stdout/2024 +++ b/test/stdout/2024 @@ -9,6 +9,8 @@ Key file = aux-fixed/cert2 ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -36,6 +38,8 @@ Key file = aux-fixed/cert2 ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/2029 b/test/stdout/2029 index f2108b65d..3017610d1 100644 --- a/test/stdout/2029 +++ b/test/stdout/2029 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/2034 b/test/stdout/2034 index 19e959b8b..3998bf198 100644 --- a/test/stdout/2034 +++ b/test/stdout/2034 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -28,6 +30,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/2102 b/test/stdout/2102 index 7f8e4f825..ea3682f60 100644 --- a/test/stdout/2102 +++ b/test/stdout/2102 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -25,6 +27,8 @@ Succeeded in starting TLS ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -56,6 +60,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -74,6 +80,8 @@ Succeeded in starting TLS ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -105,6 +113,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -134,6 +144,8 @@ Key file = TESTSUITE/aux-fixed/exim-ca/example.com/server2.example.com/server2.e ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -152,6 +164,8 @@ Succeeded in starting TLS ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -183,6 +197,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -201,6 +217,8 @@ Succeeded in starting TLS ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/2114.openssl_1_1_1 b/test/stdout/2114.openssl_1_1_1 index a0b9fe33e..2753b9ba3 100644 --- a/test/stdout/2114.openssl_1_1_1 +++ b/test/stdout/2114.openssl_1_1_1 @@ -8,6 +8,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -43,6 +45,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -80,6 +84,8 @@ Key file = aux-fixed/exim-ca/example.com/server1.example.com/server1.example.com ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -117,6 +123,8 @@ Key file = aux-fixed/exim-ca/example.com/server1.example.com/server1.example.com ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -154,6 +162,8 @@ Key file = aux-fixed/exim-ca/example.net/server1.example.net/server1.example.net ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -186,6 +196,8 @@ Key file = aux-fixed/exim-ca/example.net/server1.example.net/server1.example.net ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -223,6 +235,8 @@ Key file = aux-fixed/exim-ca/example.com/revoked1.example.com/revoked1.example.c ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -255,6 +269,8 @@ Key file = aux-fixed/exim-ca/example.com/revoked1.example.com/revoked1.example.c ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -292,6 +308,8 @@ Key file = aux-fixed/exim-ca/example.com/server1.example.com/server1.example.com ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/2124.openssl_1_1_1 b/test/stdout/2124.openssl_1_1_1 index 2f4be205e..8fb045a20 100644 --- a/test/stdout/2124.openssl_1_1_1 +++ b/test/stdout/2124.openssl_1_1_1 @@ -9,6 +9,8 @@ Key file = aux-fixed/cert2 ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -40,6 +42,8 @@ Key file = aux-fixed/cert2 ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/2132.openssl_1_1_1 b/test/stdout/2132.openssl_1_1_1 index 08dbaa344..fda61ed5b 100644 --- a/test/stdout/2132.openssl_1_1_1 +++ b/test/stdout/2132.openssl_1_1_1 @@ -8,6 +8,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -50,6 +52,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -92,6 +96,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -124,6 +130,8 @@ Key file = TESTSUITE/aux-fixed/exim-ca/example.com/server1.example.com/server1.e ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/2150 b/test/stdout/2150 index f2108b65d..3017610d1 100644 --- a/test/stdout/2150 +++ b/test/stdout/2150 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/2200 b/test/stdout/2200 index 766d433ef..bc9d346c1 100644 --- a/test/stdout/2200 +++ b/test/stdout/2200 @@ -1,6 +1,16 @@ > test.ex A TXT record for test.ex. > s/lash.test.ex A TXT record for s/lash.test.ex. > txt=test.ex A TXT record for test.ex. +> >X txt=test.ex A TXT record for test.ex. +> >X; txt=test.ex A TXT record for test.ex. +> >X, txt=test.ex A TXT record for test.ex. +> >X, txt=test.ex A TXT record for test.ex. +> txt=long.test.ex This is a max-length chunk 789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234 +Second RR +> >X txt=long.test.ex This is a max-length chunk 789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234XSecond RR +> >X; txt=long.test.ex This is a max-length chunk 789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234A short chunkA final chunkXSecond RR +> >X, txt=long.test.ex This is a max-length chunk 789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234 A short chunk A final chunkXSecond RR +> >X,Z txt=long.test.ex This is a max-length chunk 789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234ZA short chunkZA final chunkXSecond RR > a=black-1.test.ex V4NET.11.12.13 > Failed: lookup of "xxx=test.ex" gave DEFER: unsupported DNS record type > a=localhost.test.ex 127.0.0.1 diff --git a/test/stdout/2302 b/test/stdout/2302 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/test/stdout/2302 @@ -0,0 +1 @@ +[] diff --git a/test/stdout/2500 b/test/stdout/2500 index 6daaab658..dd6b4bdd6 100644 --- a/test/stdout/2500 +++ b/test/stdout/2500 @@ -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/2620 b/test/stdout/2620 index 13020359a..f0796ae6f 100644 --- a/test/stdout/2620 +++ b/test/stdout/2620 @@ -25,6 +25,13 @@ Success. You can now start the database server using: pg_ctl: server is running (PID: p1234) POSTGRES "-D" "TESTSUITE/pgsql/data" "-p" "1223" "-k" "TESTSUITE/pgsql" +CREATE TABLE +INSERT 0 1 +INSERT 0 1 +INSERT 0 1 +INSERT 0 1 +INSERT 0 1 +INSERT 0 1 INSERT 0 1 > Philip Hazel > Philip Hazel diff --git a/test/stdout/3000 b/test/stdout/3000 index 9613d0e45..8a0bd00ab 100644 --- a/test/stdout/3000 +++ b/test/stdout/3000 @@ -30,6 +30,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at x.y.z 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -44,6 +45,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello x.y.z [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/3208 b/test/stdout/3208 index 2254a7ea3..a5ab29bf4 100644 --- a/test/stdout/3208 +++ b/test/stdout/3208 @@ -6,6 +6,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello remote.host [V4NET.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/3400 b/test/stdout/3400 index 9ed13f173..1fbcb8c6c 100644 --- a/test/stdout/3400 +++ b/test/stdout/3400 @@ -19,6 +19,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello test.host [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -53,6 +54,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello test.host [10.0.0.3] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -70,6 +72,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at testclient.ex [10.0.0.3] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -104,6 +107,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.host [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -116,6 +120,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.host [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -128,6 +133,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.host [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -141,6 +147,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.host [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -159,6 +166,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.host [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -172,6 +180,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.host [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -184,6 +193,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.host [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -197,6 +207,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.host [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -216,6 +227,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello test.host [10.0.0.4] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -226,6 +238,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.host [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -238,6 +251,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.host [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -251,6 +265,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.host [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -264,6 +279,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.host [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -277,6 +293,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.host [10.0.0.2] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -289,6 +306,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.host [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -321,6 +339,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at testing.testing [10.0.0.5] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -346,6 +365,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.host [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -360,6 +380,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at testing.testing [10.0.0.5] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -372,6 +393,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.host [10.0.0.6] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY diff --git a/test/stdout/3402 b/test/stdout/3402 index 444d46c06..5a8937db1 100644 --- a/test/stdout/3402 +++ b/test/stdout/3402 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at testing.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN @@ -11,6 +12,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at testing.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN diff --git a/test/stdout/3403 b/test/stdout/3403 index e95ad4553..c3af386f9 100644 --- a/test/stdout/3403 +++ b/test/stdout/3403 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at testing.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN diff --git a/test/stdout/3406 b/test/stdout/3406 index 81d58e350..b9f3054f1 100644 --- a/test/stdout/3406 +++ b/test/stdout/3406 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at testing.ex [10.0.0.2] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH FIRST @@ -10,6 +11,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at testing.ex [10.0.0.3] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH SECOND @@ -19,6 +21,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at testing.ex [10.0.0.2] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH FIRST @@ -28,6 +31,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at testing.ex [10.0.0.3] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH SECOND diff --git a/test/stdout/3408 b/test/stdout/3408 index e17265c20..dd0cee632 100644 --- a/test/stdout/3408 +++ b/test/stdout/3408 @@ -6,6 +6,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello exim.test.ex [V4NET.11.12.14] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN @@ -27,6 +28,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello exim.test.ex [V4NET.11.12.14] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN diff --git a/test/stdout/3409 b/test/stdout/3409 index ae2912f20..767a4c2e7 100644 --- a/test/stdout/3409 +++ b/test/stdout/3409 @@ -1,6 +1,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at a.b.c 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=5 250-8BITMIME 250-ETRN 250-PIPELINING @@ -14,6 +15,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at a.b.c 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=5 250-8BITMIME 250-ETRN 250-PIPELINING diff --git a/test/stdout/3410 b/test/stdout/3410 index bc4b2abd3..30e4e1741 100644 --- a/test/stdout/3410 +++ b/test/stdout/3410 @@ -10,6 +10,7 @@ 250 Reset OK 250-myhost.test.ex Hello rhu.barb [5.6.9.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN LOGIN @@ -30,6 +31,7 @@ 250 Reset OK 250-myhost.test.ex Hello rhu.barb [5.6.10.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN LOGIN @@ -46,6 +48,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello rhu.barb [5.6.10.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN LOGIN diff --git a/test/stdout/3411 b/test/stdout/3411 index 164afd2e4..cc0cd8600 100644 --- a/test/stdout/3411 +++ b/test/stdout/3411 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at rhu.barb [10.0.0.0] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN diff --git a/test/stdout/3413 b/test/stdout/3413 index 5370c5e40..dbc734e0e 100644 --- a/test/stdout/3413 +++ b/test/stdout/3413 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at x.y.z 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN diff --git a/test/stdout/3414 b/test/stdout/3414 index a96858c19..6e029fa8d 100644 --- a/test/stdout/3414 +++ b/test/stdout/3414 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at xxxx 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN @@ -10,6 +11,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at xxxx 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN @@ -19,6 +21,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at xxxx 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN @@ -28,6 +31,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at xxxx 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN @@ -38,6 +42,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at xxxx 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN @@ -48,6 +53,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at xxxx 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN diff --git a/test/stdout/3415 b/test/stdout/3415 index 6631174a9..52878c73f 100644 --- a/test/stdout/3415 +++ b/test/stdout/3415 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -54,6 +56,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -89,6 +93,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -124,6 +130,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/3416 b/test/stdout/3416 index 671998a86..4c75b4193 100644 --- a/test/stdout/3416 +++ b/test/stdout/3416 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at the.client 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN @@ -11,6 +12,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at the.client 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN @@ -22,6 +24,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at the.client 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN diff --git a/test/stdout/3418 b/test/stdout/3418 index 0ed179c33..7773ec3c1 100644 --- a/test/stdout/3418 +++ b/test/stdout/3418 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at testing.testing [10.0.0.5] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH MYLOGIN @@ -10,6 +11,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at testing.testing [10.0.0.5] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-AUTH MYLOGIN diff --git a/test/stdout/3450 b/test/stdout/3450 index 1eb09c9a9..e15bfb7a7 100644 --- a/test/stdout/3450 +++ b/test/stdout/3450 @@ -7,6 +7,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -32,6 +34,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -55,6 +59,8 @@ Succeeded in starting TLS ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/3453 b/test/stdout/3453 index 098973d42..2ac8aaed1 100644 --- a/test/stdout/3453 +++ b/test/stdout/3453 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -40,6 +42,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/3454 b/test/stdout/3454 index 5050b7f18..99e561800 100644 --- a/test/stdout/3454 +++ b/test/stdout/3454 @@ -6,6 +6,8 @@ Connecting to 127.0.0.1 port 1225 ... connected <<< 250-myhost.test.ex Hello foobar [127.0.0.1] ??? 250-SIZE <<< 250-SIZE 52428800 +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250-8BITMIME <<< 250-8BITMIME ??? 250-PIPELINING @@ -33,6 +35,8 @@ Connecting to 127.0.0.1 port 1225 ... connected <<< 250-myhost.test.ex Hello foobar [127.0.0.1] ??? 250-SIZE <<< 250-SIZE 52428800 +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250-8BITMIME <<< 250-8BITMIME ??? 250-PIPELINING @@ -53,6 +57,8 @@ Succeeded in starting TLS <<< 250-myhost.test.ex Hello foobar [127.0.0.1] ??? 250-SIZE <<< 250-SIZE 52428800 +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250-8BITMIME <<< 250-8BITMIME ??? 250-PIPELINING diff --git a/test/stdout/3460 b/test/stdout/3460 index 1eb09c9a9..e15bfb7a7 100644 --- a/test/stdout/3460 +++ b/test/stdout/3460 @@ -7,6 +7,8 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -32,6 +34,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -55,6 +59,8 @@ Succeeded in starting TLS ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/3463 b/test/stdout/3463 index 098973d42..2ac8aaed1 100644 --- a/test/stdout/3463 +++ b/test/stdout/3463 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -40,6 +42,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/3464 b/test/stdout/3464 index 2268389b0..cdcc0d77d 100644 --- a/test/stdout/3464 +++ b/test/stdout/3464 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -34,6 +36,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -54,6 +58,8 @@ Succeeded in starting TLS ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/3500 b/test/stdout/3500 index ee35a18ba..9599c088c 100644 --- a/test/stdout/3500 +++ b/test/stdout/3500 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.host [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -18,6 +19,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.host [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -36,6 +38,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello test.host [10.0.0.4] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -51,6 +54,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello test.host [10.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY @@ -76,6 +80,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello test.host [10.0.0.5] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-ETRN 250-VRFY diff --git a/test/stdout/3600 b/test/stdout/3600 index 1254d6cb2..bfe98842c 100644 --- a/test/stdout/3600 +++ b/test/stdout/3600 @@ -8,6 +8,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -34,6 +36,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/3720 b/test/stdout/3720 index 854382ee5..8fc42f57f 100644 --- a/test/stdout/3720 +++ b/test/stdout/3720 @@ -9,6 +9,8 @@ Key file = TESTSUITE/aux-fixed/exim-ca/example.org/server2.example.org/server2.e ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -27,6 +29,8 @@ Succeeded in starting TLS ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/3721 b/test/stdout/3721 index 854382ee5..8fc42f57f 100644 --- a/test/stdout/3721 +++ b/test/stdout/3721 @@ -9,6 +9,8 @@ Key file = TESTSUITE/aux-fixed/exim-ca/example.org/server2.example.org/server2.e ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -27,6 +29,8 @@ Succeeded in starting TLS ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/3800 b/test/stdout/3800 index 998df3a19..7df52daf8 100644 --- a/test/stdout/3800 +++ b/test/stdout/3800 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/3820 b/test/stdout/3820 index 25723136a..db21465cb 100644 --- a/test/stdout/3820 +++ b/test/stdout/3820 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/4000 b/test/stdout/4000 index e38902d59..b9098d554 100644 --- a/test/stdout/4000 +++ b/test/stdout/4000 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -12,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -23,6 +25,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -34,6 +37,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -45,6 +49,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -56,6 +61,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -67,6 +73,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -78,6 +85,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4001 b/test/stdout/4001 index 63b44505f..7b61beb1a 100644 --- a/test/stdout/4001 +++ b/test/stdout/4001 @@ -6,6 +6,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello mailserver.test [127.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4002 b/test/stdout/4002 index 9bbff7f0f..4e2dda08d 100644 --- a/test/stdout/4002 +++ b/test/stdout/4002 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -12,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4003 b/test/stdout/4003 index 333ef2e4f..39ff75100 100644 --- a/test/stdout/4003 +++ b/test/stdout/4003 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello fromuser at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -12,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello fromuser at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -23,6 +25,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello fromuser at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -34,6 +37,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello fromuser at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4004 b/test/stdout/4004 index 40d631402..16898c2e1 100644 --- a/test/stdout/4004 +++ b/test/stdout/4004 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4006 b/test/stdout/4006 index 39339ba02..6f3d15eec 100644 --- a/test/stdout/4006 +++ b/test/stdout/4006 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -12,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -23,6 +25,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -34,6 +37,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -45,6 +49,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -56,6 +61,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -67,6 +73,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4007 b/test/stdout/4007 index 07de64414..8615c9c48 100644 --- a/test/stdout/4007 +++ b/test/stdout/4007 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -13,6 +14,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -24,6 +26,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -35,6 +38,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -46,6 +50,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -58,6 +63,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4008 b/test/stdout/4008 index b98a53c68..029a913b6 100644 --- a/test/stdout/4008 +++ b/test/stdout/4008 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -12,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -23,6 +25,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -34,6 +37,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4009 b/test/stdout/4009 index fb69ffcf6..fec79c084 100644 --- a/test/stdout/4009 +++ b/test/stdout/4009 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -12,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -23,6 +25,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -34,6 +37,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -45,6 +49,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4010 b/test/stdout/4010 index a4933d219..15c1aa4ac 100644 --- a/test/stdout/4010 +++ b/test/stdout/4010 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -12,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -23,6 +25,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -34,6 +37,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -45,6 +49,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4011 b/test/stdout/4011 index 04a7ad4a5..4b201856d 100644 --- a/test/stdout/4011 +++ b/test/stdout/4011 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -12,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -23,6 +25,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -34,6 +37,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -45,6 +49,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -56,6 +61,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -67,6 +73,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4012 b/test/stdout/4012 index 95a9453ce..3816b5f54 100644 --- a/test/stdout/4012 +++ b/test/stdout/4012 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -12,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -23,6 +25,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -34,6 +37,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4013 b/test/stdout/4013 index 5ed067271..533a9a52b 100644 --- a/test/stdout/4013 +++ b/test/stdout/4013 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -12,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -23,6 +25,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -34,6 +37,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4014 b/test/stdout/4014 index e0d02cadb..121fb0157 100644 --- a/test/stdout/4014 +++ b/test/stdout/4014 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -12,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4015 b/test/stdout/4015 index 072c57e2b..af8161d0f 100644 --- a/test/stdout/4015 +++ b/test/stdout/4015 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello fromuser at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4017 b/test/stdout/4017 index 079b7dade..92ce85fe4 100644 --- a/test/stdout/4017 +++ b/test/stdout/4017 @@ -2,6 +2,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -14,6 +15,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -25,6 +27,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -36,6 +39,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -47,6 +51,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -58,6 +63,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4020 b/test/stdout/4020 index 5890d218f..47dc6e92b 100644 --- a/test/stdout/4020 +++ b/test/stdout/4020 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -12,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4021 b/test/stdout/4021 index 40d99b05c..5333dee39 100644 --- a/test/stdout/4021 +++ b/test/stdout/4021 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -12,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4027 b/test/stdout/4027 index be14c3534..87a37d3a5 100644 --- a/test/stdout/4027 +++ b/test/stdout/4027 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -12,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -23,6 +25,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/4033 b/test/stdout/4033 index 0e729668e..a43f3d6c1 100644 --- a/test/stdout/4033 +++ b/test/stdout/4033 @@ -7,6 +7,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello plainclient [127.0.0.1] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -28,6 +29,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello xclientproxy [ip4.ip4.ip4.ip4] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-XCLIENT ADDR NAME PORT LOGIN DESTADDR DESTPORT @@ -35,6 +37,7 @@ 220 XCLIENT success 250-myhost.test.ex Hello proxylookedupname.net [127.0.0.2] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-XCLIENT ADDR NAME PORT LOGIN DESTADDR DESTPORT @@ -49,6 +52,7 @@ 220 XCLIENT success 250-myhost.test.ex Hello anotherhelo [127.0.0.3] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-XCLIENT ADDR NAME PORT LOGIN DESTADDR DESTPORT @@ -75,6 +79,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello xclientproxy [ip4.ip4.ip4.ip4] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-XCLIENT ADDR NAME PORT LOGIN DESTADDR DESTPORT @@ -93,6 +98,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello xclientproxy [ip4.ip4.ip4.ip4] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-XCLIENT ADDR NAME PORT LOGIN DESTADDR DESTPORT diff --git a/test/stdout/4040 b/test/stdout/4040 new file mode 100644 index 000000000..836f57379 --- /dev/null +++ b/test/stdout/4040 @@ -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 diff --git a/test/stdout/4201 b/test/stdout/4201 index 1d74546b1..c38891b00 100644 --- a/test/stdout/4201 +++ b/test/stdout/4201 @@ -6,6 +6,8 @@ Connecting to 127.0.0.1 port 1225 ... connected <<< 250-the.local.host.name Hello client [127.0.0.1] ??? 250-SIZE <<< 250-SIZE 52428800 +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250-8BITMIME <<< 250-8BITMIME ??? 250-PIPELINING @@ -41,6 +43,8 @@ Connecting to 127.0.0.1 port 1225 ... connected <<< 250-the.local.host.name Hello client [127.0.0.1] ??? 250-SIZE <<< 250-SIZE 52428800 +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250-8BITMIME <<< 250-8BITMIME ??? 250-PIPELINING @@ -86,6 +90,7 @@ End of script 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-SMTPUTF8 @@ -103,6 +108,8 @@ Connecting to 127.0.0.1 port 1225 ... connected <<< 250-the.local.host.name Hello client [127.0.0.1] ??? 250-SIZE <<< 250-SIZE 52428800 +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250-8BITMIME <<< 250-8BITMIME ??? 250-PIPELINING diff --git a/test/stdout/4203 b/test/stdout/4203 index 3a7c70957..f74201119 100644 --- a/test/stdout/4203 +++ b/test/stdout/4203 @@ -1,6 +1,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.ffail 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-SMTPUTF8 diff --git a/test/stdout/4204 b/test/stdout/4204 index e770c1b92..970ba54ef 100644 --- a/test/stdout/4204 +++ b/test/stdout/4204 @@ -1,6 +1,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-SMTPUTF8 @@ -13,6 +14,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-SMTPUTF8 @@ -25,6 +27,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.ffail 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-SMTPUTF8 @@ -35,6 +38,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.ffail 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-SMTPUTF8 diff --git a/test/stdout/4205 b/test/stdout/4205 index 17f63b9ce..828630087 100644 --- a/test/stdout/4205 +++ b/test/stdout/4205 @@ -1,6 +1,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-SMTPUTF8 diff --git a/test/stdout/4206 b/test/stdout/4206 index ad37ac936..fd69e8279 100644 --- a/test/stdout/4206 +++ b/test/stdout/4206 @@ -1,6 +1,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-SMTPUTF8 @@ -13,6 +14,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-SMTPUTF8 @@ -25,6 +27,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.sfail 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-SMTPUTF8 @@ -37,6 +40,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.sfail 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-SMTPUTF8 diff --git a/test/stdout/4207 b/test/stdout/4207 index c34032c63..4e151aa37 100644 --- a/test/stdout/4207 +++ b/test/stdout/4207 @@ -1,6 +1,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-SMTPUTF8 @@ -13,6 +14,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-SMTPUTF8 @@ -25,6 +27,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-SMTPUTF8 diff --git a/test/stdout/4208 b/test/stdout/4208 index b4bf77279..0a648ef55 100644 --- a/test/stdout/4208 +++ b/test/stdout/4208 @@ -1,6 +1,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.ffail 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-SMTPUTF8 @@ -11,6 +12,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.ffail 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-SMTPUTF8 diff --git a/test/stdout/4211 b/test/stdout/4211 index 5056cda9e..cfc51a383 100644 --- a/test/stdout/4211 +++ b/test/stdout/4211 @@ -6,6 +6,8 @@ Connecting to 127.0.0.1 port 1225 ... connected <<< 250-the.local.host.name Hello client [127.0.0.1] ??? 250-SIZE <<< 250-SIZE 52428800 +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250-8BITMIME <<< 250-8BITMIME ??? 250-PIPELINING @@ -43,6 +45,8 @@ Connecting to 127.0.0.1 port 1225 ... connected <<< 250-the.local.host.name Hello client [127.0.0.1] ??? 250-SIZE <<< 250-SIZE 52428800 +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250-8BITMIME <<< 250-8BITMIME ??? 250-PIPELINING @@ -75,6 +79,7 @@ End of script 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS diff --git a/test/stdout/4213 b/test/stdout/4213 index 90b76e176..8b80750b9 100644 --- a/test/stdout/4213 +++ b/test/stdout/4213 @@ -1,6 +1,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.ffail 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS diff --git a/test/stdout/4214 b/test/stdout/4214 index f6838d0a6..50157fbfe 100644 --- a/test/stdout/4214 +++ b/test/stdout/4214 @@ -1,6 +1,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -14,6 +15,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -27,6 +29,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.ffail 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -38,6 +41,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.ffail 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS diff --git a/test/stdout/4215 b/test/stdout/4215 index d1afd34a8..16c365639 100644 --- a/test/stdout/4215 +++ b/test/stdout/4215 @@ -1,6 +1,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS diff --git a/test/stdout/4216 b/test/stdout/4216 index 2f33415f8..20391e511 100644 --- a/test/stdout/4216 +++ b/test/stdout/4216 @@ -1,6 +1,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -14,6 +15,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -27,6 +29,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.sfail 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -40,6 +43,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.sfail 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS diff --git a/test/stdout/4221 b/test/stdout/4221 index 5056cda9e..cfc51a383 100644 --- a/test/stdout/4221 +++ b/test/stdout/4221 @@ -6,6 +6,8 @@ Connecting to 127.0.0.1 port 1225 ... connected <<< 250-the.local.host.name Hello client [127.0.0.1] ??? 250-SIZE <<< 250-SIZE 52428800 +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250-8BITMIME <<< 250-8BITMIME ??? 250-PIPELINING @@ -43,6 +45,8 @@ Connecting to 127.0.0.1 port 1225 ... connected <<< 250-the.local.host.name Hello client [127.0.0.1] ??? 250-SIZE <<< 250-SIZE 52428800 +??? 250-LIMITS +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 ??? 250-8BITMIME <<< 250-8BITMIME ??? 250-PIPELINING @@ -75,6 +79,7 @@ End of script 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS diff --git a/test/stdout/4223 b/test/stdout/4223 index 90b76e176..8b80750b9 100644 --- a/test/stdout/4223 +++ b/test/stdout/4223 @@ -1,6 +1,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.ffail 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS diff --git a/test/stdout/4224 b/test/stdout/4224 index f6838d0a6..50157fbfe 100644 --- a/test/stdout/4224 +++ b/test/stdout/4224 @@ -1,6 +1,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -14,6 +15,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -27,6 +29,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.ffail 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -38,6 +41,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.ffail 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS diff --git a/test/stdout/4225 b/test/stdout/4225 index d1afd34a8..16c365639 100644 --- a/test/stdout/4225 +++ b/test/stdout/4225 @@ -1,6 +1,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS diff --git a/test/stdout/4226 b/test/stdout/4226 index 2f33415f8..20391e511 100644 --- a/test/stdout/4226 +++ b/test/stdout/4226 @@ -1,6 +1,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -14,6 +15,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.bh 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -27,6 +29,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.sfail 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -40,6 +43,7 @@ 220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-the.local.host.name Hello CALLER at client.sfail 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS diff --git a/test/stdout/4519 b/test/stdout/4519 index 4d4f4650a..e59f2bd73 100644 --- a/test/stdout/4519 +++ b/test/stdout/4519 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1224 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -45,6 +47,8 @@ Connecting to 127.0.0.1 port 1224 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/4539 b/test/stdout/4539 index 114d4f6ea..108df0588 100644 --- a/test/stdout/4539 +++ b/test/stdout/4539 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1224 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -56,6 +58,8 @@ Connecting to 127.0.0.1 port 1224 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/4650 b/test/stdout/4650 index 4da1909c6..d3e9ad711 100644 --- a/test/stdout/4650 +++ b/test/stdout/4650 @@ -68,7 +68,7 @@ align_dkim 5 align_spf 5 action 2 arc 11 -arc_policy $d json:[] +arc_policy 1 json:[] job 10HmaY-000000005vi-0000 reporter myhost.test.ex received 1692480217 @@ -89,4 +89,4 @@ align_dkim 4 align_spf 5 action 2 arc 11 -arc_policy $d json:[] +arc_policy 1 json:[] diff --git a/test/stdout/4710 b/test/stdout/4710 index 701b4376c..7e031e244 100644 --- a/test/stdout/4710 +++ b/test/stdout/4710 @@ -85,3 +85,29 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250 <<< 250-8BITMIME 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 tester +??? 250- +<<< 250-myhost.test.ex Hello tester [ip4.ip4.ip4.ip4] +??? 250-SIZE +<<< 250-SIZE 52428800 +??? 250-LIMITS MAILMAX=1000 RCPTMAX=4 +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=4 +??? 250 +<<< 250-8BITMIME +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 tester +??? 250- +<<< 250-myhost.test.ex Hello tester [127.0.0.1] +??? 250-SIZE +<<< 250-SIZE 52428800 +??? 250-LIMITS MAILMAX=1000 RCPTMAX=100 +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=100 +??? 250 +<<< 250-8BITMIME +End of script diff --git a/test/stdout/4714 b/test/stdout/4714 index f01983e47..c6016beda 100644 --- a/test/stdout/4714 +++ b/test/stdout/4714 @@ -42,16 +42,16 @@ Date: Tue, 2 Mar 1999 09:44:33 +0000 250 message 2 received MAIL FROM: 250 mail cmd 3 good -RCPT TO: +RCPT TO: 250 rcpt cmd good DATA 352 go ahead Received: from CALLER by the.local.host.name with local (Exim x.yz) (envelope-from ) - id 10HmaZ-000000005vi-0000; + id 10HmaY-000000005vi-0000; Tue, 2 Mar 1999 09:44:33 +0000 -Subject: message 3 -Message-Id: +Subject: message 2 +Message-Id: From: CALLER_NAME Date: Tue, 2 Mar 1999 09:44:33 +0000 @@ -59,16 +59,16 @@ Date: Tue, 2 Mar 1999 09:44:33 +0000 250 message 3 received MAIL FROM: 250 mail cmd 4 good -RCPT TO: +RCPT TO: 250 rcpt cmd good DATA 352 go ahead Received: from CALLER by the.local.host.name with local (Exim x.yz) (envelope-from ) - id 10HmaZ-000000005vi-0000; + id 10HmaY-000000005vi-0000; Tue, 2 Mar 1999 09:44:33 +0000 -Subject: message 3 -Message-Id: +Subject: message 2 +Message-Id: From: CALLER_NAME Date: Tue, 2 Mar 1999 09:44:33 +0000 @@ -76,16 +76,16 @@ Date: Tue, 2 Mar 1999 09:44:33 +0000 250 message 4 received MAIL FROM: 250 mail cmd 5 good -RCPT TO: +RCPT TO: 250 rcpt cmd good DATA 352 go ahead Received: from CALLER by the.local.host.name with local (Exim x.yz) (envelope-from ) - id 10HmaY-000000005vi-0000; + id 10HmaZ-000000005vi-0000; Tue, 2 Mar 1999 09:44:33 +0000 -Subject: message 2 -Message-Id: +Subject: message 3 +Message-Id: From: CALLER_NAME Date: Tue, 2 Mar 1999 09:44:33 +0000 @@ -99,24 +99,58 @@ Connection request from [127.0.0.1] 220 Hi there EHLO the.local.host.name 250-yeah mate -250 +250 LIMITS MAILMAX=5 RCPTMAX=1 MAIL FROM: 250 mail cmd 1 good -RCPT TO: +RCPT TO: 250 rcpt cmd good DATA 352 go ahead Received: from CALLER by the.local.host.name with local (Exim x.yz) (envelope-from ) - id 10HmaY-000000005vi-0000; + id 10HmaZ-000000005vi-0000; Tue, 2 Mar 1999 09:44:33 +0000 -Subject: message 2 -Message-Id: +Subject: message 3 +Message-Id: From: CALLER_NAME Date: Tue, 2 Mar 1999 09:44:33 +0000 . 250 message 6 received +MAIL FROM: +250 mail cmd 2 good +RCPT TO: +250 rcpt cmd good +DATA +352 go ahead +Received: from CALLER by the.local.host.name with local (Exim x.yz) + (envelope-from ) + id 10HmbA-000000005vi-0000; + Tue, 2 Mar 1999 09:44:33 +0000 +Subject: message 4 +Message-Id: +From: CALLER_NAME +Date: Tue, 2 Mar 1999 09:44:33 +0000 + +. +250 message 7 received +MAIL FROM: +250 mail cmd 3 good +RCPT TO: +250 rcpt cmd good +DATA +352 go ahead +Received: from CALLER by the.local.host.name with local (Exim x.yz) + (envelope-from ) + id 10HmbA-000000005vi-0000; + Tue, 2 Mar 1999 09:44:33 +0000 +Subject: message 4 +Message-Id: +From: CALLER_NAME +Date: Tue, 2 Mar 1999 09:44:33 +0000 + +. +250 message 8 received QUIT 221 bye Expected EOF read from client diff --git a/test/stdout/5204 b/test/stdout/5204 index 22f01be9f..233251373 100644 --- a/test/stdout/5204 +++ b/test/stdout/5204 @@ -21,6 +21,7 @@ postmaster@test.ex 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello some.name [V4NET.2.3.4] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/5400 b/test/stdout/5400 index 6089910b9..55b750449 100644 --- a/test/stdout/5400 +++ b/test/stdout/5400 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -12,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -23,6 +25,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -35,6 +38,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -46,6 +50,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -58,6 +63,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -70,6 +76,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -82,6 +89,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -94,6 +102,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -106,6 +115,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -118,6 +128,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/5401 b/test/stdout/5401 index ffbb47b88..e69ac8ad5 100644 --- a/test/stdout/5401 +++ b/test/stdout/5401 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -12,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -22,6 +24,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/5402 b/test/stdout/5402 index 8b32d4ccd..1fc10a82f 100644 --- a/test/stdout/5402 +++ b/test/stdout/5402 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -10,6 +11,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/5403 b/test/stdout/5403 index e99e08231..f16df8d31 100644 --- a/test/stdout/5403 +++ b/test/stdout/5403 @@ -6,6 +6,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello myhost.test.ex [1.2.3.4] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -25,6 +26,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello myhost.test.ex [1.2.3.4] 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/5404 b/test/stdout/5404 index 98a33314e..f56727149 100644 --- a/test/stdout/5404 +++ b/test/stdout/5404 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/5405 b/test/stdout/5405 index db542c353..ffa58ac74 100644 --- a/test/stdout/5405 +++ b/test/stdout/5405 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -12,6 +13,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -23,6 +25,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -34,6 +37,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -43,6 +47,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -54,6 +59,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -65,6 +71,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -76,6 +83,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -87,6 +95,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -98,6 +107,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/5406 b/test/stdout/5406 index 054539740..289994cee 100644 --- a/test/stdout/5406 +++ b/test/stdout/5406 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP @@ -16,6 +17,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/5407 b/test/stdout/5407 index 79b92837f..82ff91b29 100644 --- a/test/stdout/5407 +++ b/test/stdout/5407 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/5409 b/test/stdout/5409 index bed9fccfe..09059e55a 100644 --- a/test/stdout/5409 +++ b/test/stdout/5409 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250 HELP diff --git a/test/stdout/5410 b/test/stdout/5410 index 2cd93d507..56b13db0c 100644 --- a/test/stdout/5410 +++ b/test/stdout/5410 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -13,6 +14,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -25,6 +27,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS diff --git a/test/stdout/5420 b/test/stdout/5420 index 2cd93d507..56b13db0c 100644 --- a/test/stdout/5420 +++ b/test/stdout/5420 @@ -1,6 +1,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -13,6 +14,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS @@ -25,6 +27,7 @@ 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 250-myhost.test.ex Hello CALLER at myhost.test.ex 250-SIZE 52428800 +250-LIMITS MAILMAX=1000 RCPTMAX=50000 250-8BITMIME 250-PIPELINING 250-STARTTLS diff --git a/test/stdout/5500 b/test/stdout/5500 index b6fb96e7a..346f4f40e 100644 --- a/test/stdout/5500 +++ b/test/stdout/5500 @@ -7,6 +7,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -54,6 +56,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -96,6 +100,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -129,6 +135,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -171,6 +179,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -213,6 +223,8 @@ Connecting to 127.0.0.1 port 1225 ... connected ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/5600 b/test/stdout/5600 index 5493ef79a..a8bcb355c 100644 --- a/test/stdout/5600 +++ b/test/stdout/5600 @@ -9,6 +9,8 @@ Key file = aux-fixed/cert2 ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -46,6 +48,8 @@ Key file = aux-fixed/cert2 ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -71,6 +75,8 @@ Key file = aux-fixed/cert2 ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -96,6 +102,8 @@ Key file = aux-fixed/cert2 ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -114,6 +122,8 @@ Succeeded in starting TLS ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/5610 b/test/stdout/5610 index 7dbadc46e..cfbad9572 100644 --- a/test/stdout/5610 +++ b/test/stdout/5610 @@ -9,6 +9,8 @@ Key file = aux-fixed/cert2 ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -46,6 +48,8 @@ Key file = aux-fixed/cert2 ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -71,6 +75,8 @@ Key file = aux-fixed/cert2 ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -96,6 +102,8 @@ Key file = aux-fixed/cert2 ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -114,6 +122,8 @@ Succeeded in starting TLS ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/5650 b/test/stdout/5650 index b4d72e801..199c5e4d4 100644 --- a/test/stdout/5650 +++ b/test/stdout/5650 @@ -9,6 +9,8 @@ Key file = aux-fixed/cert2 ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -46,6 +48,8 @@ Key file = aux-fixed/cert2 ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -69,6 +73,8 @@ Key file = aux-fixed/cert2 ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -92,6 +98,8 @@ Key file = aux-fixed/cert2 ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING @@ -110,6 +118,8 @@ Succeeded in starting TLS ??? 250- <<< 250-SIZE 52428800 ??? 250- +<<< 250-LIMITS MAILMAX=1000 RCPTMAX=50000 +??? 250- <<< 250-8BITMIME ??? 250- <<< 250-PIPELINING diff --git a/test/stdout/5708 b/test/stdout/5708 new file mode 100644 index 000000000..d2c78b4a2 --- /dev/null +++ b/test/stdout/5708 @@ -0,0 +1,71 @@ +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 +>>> HELO nonexistent.test.ex +??? 250 +<<< 250 myhost.test.ex Hello nonexistent.test.ex [127.0.0.1] +>>> MAIL FROM: +??? 250 +<<< 250 OK +>>> RCPT TO: +??? 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 +>>> HELO badcname.test.ex +??? 250 +<<< 250 myhost.test.ex Hello badcname.test.ex [127.0.0.1] +>>> MAIL FROM: +??? 250 +<<< 250 OK +>>> RCPT TO: +??? 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 +>>> HELO test.again.dns +??? 250 +<<< 250 myhost.test.ex Hello test.again.dns [127.0.0.1] +>>> MAIL FROM: +??? 250 +<<< 250 OK +>>> RCPT TO: +??? 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 +>>> HELO localhost +??? 250 +<<< 250 myhost.test.ex Hello localhost [127.0.0.1] +>>> MAIL FROM: +??? 250 +<<< 250 OK +>>> RCPT TO: +??? 250 Accepted +<<< 250 Accepted +>>> DATA +??? 354 +<<< 354 Enter message, ending with "." on a line by itself +>>> Subject: test +>>> . +??? 250 +<<< 250 OK id=10HmaX-000000005vi-0000 +>>> QUIT +??? 221 +<<< 221 myhost.test.ex closing connection +End of script diff --git a/test/stdout/5709 b/test/stdout/5709 new file mode 100644 index 000000000..5f68af5c1 --- /dev/null +++ b/test/stdout/5709 @@ -0,0 +1,19 @@ +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 +>>> HELO nonexistent.test.ex +??? 250 +<<< 250 myhost.test.ex Hello nonexistent.test.ex [127.0.0.1] +>>> HELO badcname.test.ex +??? 250 +<<< 250 myhost.test.ex Hello badcname.test.ex [127.0.0.1] +>>> HELO test.again.dns +??? 250 +<<< 250 myhost.test.ex Hello test.again.dns [127.0.0.1] +>>> HELO localhost +??? 250 +<<< 250 myhost.test.ex Hello localhost [127.0.0.1] +>>> QUIT +??? 221 +<<< 221 myhost.test.ex closing connection +End of script diff --git a/test/stdout/5892 b/test/stdout/5892 index 23a7bcf3e..077a3dd0e 100644 --- a/test/stdout/5892 +++ b/test/stdout/5892 @@ -1,5 +1,6 @@ ### TLS1.2 4686560d7a1d9becb8fd0c62406eaaf169b2ea1b889244342653024281bca106 + 8ff2965550bd60d7e4496ad508a8cff91ac5de6fbec4806e8c9c3d6959300e3e b90422e57483069e0b7dbcebbdf1be3504bae64df49ea1f699cc773acc8a76d5 ******** SERVER ********