summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Harris <jgh146exb@wizmail.org>2023-09-07 16:40:39 +0100
committerJeremy Harris <jgh146exb@wizmail.org>2023-09-07 16:40:39 +0100
commit7616c28d51aad5dadbe4e8bc9ccee84b0a9b407c (patch)
tree237c1e4d42bf0ec61ef22340d2408d992c02dfa4
parent87ae73f8bea31b51fbcd6e1ae80742cd4d792308 (diff)
Docs: example complex expansion for router domains condition
-rw-r--r--doc/doc-docbook/spec.xfpt19
-rw-r--r--test/aux-fixed/0403.accountfile3
-rw-r--r--test/confs/040324
-rw-r--r--test/log/04035
-rw-r--r--test/scripts/0000-Basic/04036
-rw-r--r--test/stderr/0403252
6 files changed, 292 insertions, 17 deletions
diff --git a/doc/doc-docbook/spec.xfpt b/doc/doc-docbook/spec.xfpt
index 04f2387cf..6ff06f3a4 100644
--- a/doc/doc-docbook/spec.xfpt
+++ b/doc/doc-docbook/spec.xfpt
@@ -19181,12 +19181,25 @@ This applies to all of the SRV, MX, AAAA, A lookup sequence.
.cindex "router" "restricting to specific domains"
.vindex "&$domain_data$&"
If this option is set, the router is skipped unless the current domain matches
-the list. If the match is achieved by means of a file lookup, the data that the
-lookup returned for the domain is placed in &$domain_data$& for use in string
+the list.
+The data returned by the list check
+is placed in &$domain_data$& for use in string
expansions of the driver's private options and in the transport.
See section &<<SECTrouprecon>>& for
a list of the order in which preconditions are evaluated.
+A complex example, using a file like:
+.code
+alice@dom1
+bill@dom1
+maggie@dom1
+.endd
+and checking both domain and local_part
+.code
+domains = ${domain:${lookup {$local_part@$domain} lseach,ret=key {/path/to/accountsfile}}}
+local_parts = ${local_part:${lookup {$local_part@$domain} lseach,ret=key {/path/to/accountsfile}}}
+.endd
+
.option driver routers string unset
@@ -19550,7 +19563,7 @@ example:
local_parts = dbm;/usr/local/specials/$domain_data
.endd
.vindex "&$local_part_data$&"
-If the match is achieved by a lookup, the data that the lookup returned
+the data returned by the list check
for the local part is placed in the variable &$local_part_data$& for use in
expansions of the router's private options or in the transport.
You might use this option, for
diff --git a/test/aux-fixed/0403.accountfile b/test/aux-fixed/0403.accountfile
new file mode 100644
index 000000000..8bfe64595
--- /dev/null
+++ b/test/aux-fixed/0403.accountfile
@@ -0,0 +1,3 @@
+alice@dom1.ain
+bob@dom2.ain
+charlie@dom1.ain
diff --git a/test/confs/0403 b/test/confs/0403
index 26d1cd6fe..4fe478b09 100644
--- a/test/confs/0403
+++ b/test/confs/0403
@@ -14,13 +14,23 @@ qualify_domain = test.ex
begin routers
r1:
- driver = redirect
- domains = lsearch;DIR/aux-fixed/TESTNUM.data
- local_parts = lsearch;DIR/aux-fixed/TESTNUM.data
- address_data = ADDRESSDATA
- file_transport = t1
- data = DIR/test-mail/junk
- router_home_directory = /usr
+ driver = redirect
+ domains = ${domain:${lookup {$local_part@$domain} lsearch,ret=key {DIR/aux-fixed/TESTNUM.accountfile}}}
+ local_parts = ${local_part:${lookup {$local_part@$domain} lsearch,ret=key {DIR/aux-fixed/TESTNUM.accountfile}}}
+ file_transport = t1
+ data = DIR/test-mail/junk
+ debug_print = +++ROUTER:\n\
+ +++domain_data=$domain_data\n\
+ +++local_part_data=$local_part_data
+
+r2:
+ driver = redirect
+ domains = lsearch;DIR/aux-fixed/TESTNUM.data
+ local_parts = lsearch;DIR/aux-fixed/TESTNUM.data
+ address_data = ADDRESSDATA
+ file_transport = t1
+ data = DIR/test-mail/junk
+ router_home_directory = /usr
debug_print = +++ROUTER:\n\
+++domain_data=$domain_data\n\
+++local_part_data=$local_part_data\n\
diff --git a/test/log/0403 b/test/log/0403
index d4cb8b67c..700cade69 100644
--- a/test/log/0403
+++ b/test/log/0403
@@ -1,3 +1,6 @@
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 *> TESTSUITE/test-mail/junk <userx@test.ex> R=r1 T=t1
+1999-03-02 09:44:33 10HmaX-000000005vi-0000 *> TESTSUITE/test-mail/junk <userx@test.ex> R=r2 T=t1
1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed
+1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= CALLER@test.ex U=CALLER P=local S=sss
+1999-03-02 09:44:33 10HmaY-000000005vi-0000 *> TESTSUITE/test-mail/junk <charlie@dom1.ain> R=r1 T=t1
+1999-03-02 09:44:33 10HmaY-000000005vi-0000 Completed
diff --git a/test/scripts/0000-Basic/0403 b/test/scripts/0000-Basic/0403
index b6b3b6d47..749ff087c 100644
--- a/test/scripts/0000-Basic/0403
+++ b/test/scripts/0000-Basic/0403
@@ -1,4 +1,10 @@
# domain_data and local_part_data for redirection to file
exim -N -odi -d userx@test.ex
****
+#
+#
+### _data from a multi-step expansion
+exim -N -odi -d charlie@dom1.ain
+****
+#
no_message_check
diff --git a/test/stderr/0403 b/test/stderr/0403
index d231bffc3..ae0388347 100644
--- a/test/stderr/0403
+++ b/test/stderr/0403
@@ -87,6 +87,24 @@ routing userx@test.ex
--------> r1 router <--------
local_part=userx domain=test.ex
checking domains
+ search_open: lsearch "TESTSUITE/aux-fixed/0403.accountfile"
+ search_find: file="TESTSUITE/aux-fixed/0403.accountfile"
+ key="userx@test.ex" partial=-1 affix=NULL starflags=0 opts="ret=key"
+ LRU list:
+ 0TESTSUITE/aux-fixed/0403.accountfile
+ End
+ internal_search_find: file="TESTSUITE/aux-fixed/0403.accountfile"
+ type=lsearch key="userx@test.ex" opts=NULL
+ file lookup required for userx@test.ex
+ in TESTSUITE/aux-fixed/0403.accountfile
+ creating new cache entry
+ lookup failed
+test.ex in ""?
+test.ex in ""? 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"?
list element: lsearch;TESTSUITE/aux-fixed/0403.data
search_open: lsearch "TESTSUITE/aux-fixed/0403.data"
@@ -94,6 +112,7 @@ test.ex in "lsearch;TESTSUITE/aux-fixed/0403.data"?
key="test.ex" partial=-1 affix=NULL starflags=0 opts=NULL
LRU list:
0TESTSUITE/aux-fixed/0403.data
+ 0TESTSUITE/aux-fixed/0403.accountfile
End
internal_search_find: file="TESTSUITE/aux-fixed/0403.data"
type=lsearch key="test.ex" opts=NULL
@@ -111,6 +130,7 @@ userx in "lsearch;TESTSUITE/aux-fixed/0403.data"?
key="userx" partial=-1 affix=NULL starflags=0 opts=NULL
LRU list:
0TESTSUITE/aux-fixed/0403.data
+ 0TESTSUITE/aux-fixed/0403.accountfile
End
internal_search_find: file="TESTSUITE/aux-fixed/0403.data"
type=lsearch key="userx" opts=NULL
@@ -125,18 +145,18 @@ userx in "lsearch;TESTSUITE/aux-fixed/0403.data"?
+++address_data=
+++home=/usr
processing address_data
-calling r1 router
+calling r2 router
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
set transport t1
-r1 router generated TESTSUITE/test-mail/junk
+r2 router generated TESTSUITE/test-mail/junk
pipe, file, or autoreply
errors_to=NULL transport=t1
uid=unset gid=unset home=/usr
-routed by r1 router
+routed by r2 router
envelope to: userx@test.ex
transport: <none>
locking TESTSUITE/spool/db/retry.lockfile
@@ -190,12 +210,12 @@ post-process TESTSUITE/test-mail/junk (0)
TESTSUITE/test-mail/junk delivered
userx@test.ex: children all complete
LOG: MAIN
- *> TESTSUITE/test-mail/junk <userx@test.ex> R=r1 T=t1
+ *> TESTSUITE/test-mail/junk <userx@test.ex> R=r2 T=t1
>>>>>>>>>>>>>>>> deliveries are done >>>>>>>>>>>>>>>>
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
-DSN: processing router : r1
+DSN: processing router : r2
DSN: processing successful delivery address: TESTSUITE/test-mail/junk
DSN: Sender_address: CALLER@test.ex
DSN: orcpt: NULL flags: 0x0
@@ -203,7 +223,7 @@ DSN: envid: NULL ret: 0
DSN: Final recipient: TESTSUITE/test-mail/junk
DSN: Remote SMTP server supports DSN: 0
DSN: not sending DSN success message
-DSN: processing router : r1
+DSN: processing router : r2
DSN: processing successful delivery address: userx@test.ex
DSN: Sender_address: CALLER@test.ex
DSN: orcpt: NULL flags: 0x0
@@ -219,3 +239,223 @@ search_tidyup called
>>>>>>>>>>>>>>>> Exim pid=p1235 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
search_tidyup called
>>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
+### _data from a multi-step expansion
+Exim version x.yz ....
+changed uid/gid: forcing real = effective
+ uid=uuuu gid=CALLER_GID pid=p1237
+configuration file is TESTSUITE/test-config
+admin user
+changed uid/gid: privilege not needed
+ uid=EXIM_UID gid=EXIM_GID pid=p1237
+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@test.ex
+set_process_info: pppp accepting a local non-SMTP message from <CALLER@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
+Sender: CALLER@test.ex
+Recipients:
+ charlie@dom1.ain
+search_tidyup called
+>>Headers received:
+
+qualify & rewrite recipients list
+global rewrite rules
+rewrite headers
+ rewrite_one_header: type=F:
+ From: CALLER_NAME <CALLER@test.ex>
+search_tidyup called
+>>Headers after rewriting and local additions:
+I Message-Id: <E10HmaY-000000005vi-0000@mail.test.ex>
+F From: CALLER_NAME <CALLER@test.ex>
+ 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
+>>Generated Received: header line
+P Received: from CALLER by mail.test.ex with local (Exim x.yz)
+ (envelope-from <CALLER@test.ex>)
+ id 10HmaY-000000005vi-0000
+ for charlie@dom1.ain;
+ Tue, 2 Mar 1999 09:44:33 +0000
+Writing spool header file: TESTSUITE/spool//input//hdr.10HmaY-000000005vi-0000
+DSN: **** SPOOL_OUT - address: <charlie@dom1.ain> errorsto: <NULL> orcpt: <NULL> dsn_flags: 0x0
+Renaming spool header file: TESTSUITE/spool//input//10HmaY-000000005vi-0000-H
+Size of headers = sss
+LOG: MAIN
+ <= CALLER@test.ex U=CALLER P=local S=sss
+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 ....
+changed uid/gid: forcing real = effective
+ uid=uuuu gid=EXIM_GID pid=p1238
+configuration file is TESTSUITE/test-config
+trusted user
+admin user
+dropping to exim gid; retaining priv uid
+seeking password data for user "CALLER": cache not available
+getpwnam() succeeded uid=CALLER_UID gid=CALLER_GID
+set_process_info: pppp delivering specified messages
+set_process_info: pppp delivering 10HmaY-000000005vi-0000
+Trying spool file TESTSUITE/spool//input//10HmaY-000000005vi-0000-D
+reading spool file 10HmaY-000000005vi-0000-H
+user=CALLER uid=CALLER_UID gid=CALLER_GID sender=CALLER@test.ex
+sender_local=1 ident=CALLER
+Non-recipients:
+ Empty Tree
+---- End of tree ----
+recipients_count=1
+**** SPOOL_IN - No additional fields
+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 <TESTSUITE/spool/db/retry> dir <TESTSUITE/spool/db> 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
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+Considering: charlie@dom1.ain
+unique = charlie@dom1.ain
+no domain retry record
+no address retry record
+charlie@dom1.ain: queued for routing
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+routing charlie@dom1.ain
+--------> r1 router <--------
+local_part=charlie domain=dom1.ain
+checking domains
+ search_open: lsearch "TESTSUITE/aux-fixed/0403.accountfile"
+ search_find: file="TESTSUITE/aux-fixed/0403.accountfile"
+ key="charlie@dom1.ain" partial=-1 affix=NULL starflags=0 opts="ret=key"
+ LRU list:
+ 0TESTSUITE/aux-fixed/0403.accountfile
+ End
+ internal_search_find: file="TESTSUITE/aux-fixed/0403.accountfile"
+ type=lsearch key="charlie@dom1.ain" opts=NULL
+ file lookup required for charlie@dom1.ain
+ in TESTSUITE/aux-fixed/0403.accountfile
+ creating new cache entry
+ lookup yielded:
+dom1.ain in "dom1.ain"?
+ list element: dom1.ain
+ dom1.ain in "dom1.ain"? yes (matched "dom1.ain")
+checking local_parts
+ search_open: lsearch "TESTSUITE/aux-fixed/0403.accountfile"
+ cached open
+ search_find: file="TESTSUITE/aux-fixed/0403.accountfile"
+ key="charlie@dom1.ain" partial=-1 affix=NULL starflags=0 opts="ret=key"
+ LRU list:
+ 0TESTSUITE/aux-fixed/0403.accountfile
+ End
+ internal_search_find: file="TESTSUITE/aux-fixed/0403.accountfile"
+ type=lsearch key="charlie@dom1.ain" opts=NULL
+ cached data used for lookup of charlie@dom1.ain
+ in TESTSUITE/aux-fixed/0403.accountfile
+ lookup yielded:
+charlie in "charlie"?
+ list element: charlie
+ charlie in "charlie"? yes (matched "charlie")
++++ROUTER:
++++domain_data=dom1.ain
++++local_part_data=charlie
+calling r1 router
+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
+set transport t1
+r1 router generated TESTSUITE/test-mail/junk
+ pipe, file, or autoreply
+ errors_to=NULL transport=t1
+ uid=unset gid=unset home=NULL
+routed by r1 router
+ envelope to: charlie@dom1.ain
+ transport: <none>
+ locking TESTSUITE/spool/db/retry.lockfile
+ locked TESTSUITE/spool/db/retry.lockfile
+ EXIM_DBOPEN: file <TESTSUITE/spool/db/retry> dir <TESTSUITE/spool/db> 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
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+Considering: TESTSUITE/test-mail/junk
+unique = TESTSUITE/test-mail/junk:charlie@dom1.ain
+queued for t1 transport
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+After routing:
+ Local deliveries:
+ TESTSUITE/test-mail/junk
+ Remote deliveries:
+ Failed addresses:
+ Deferred addresses:
+search_tidyup called
+>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
+--------> TESTSUITE/test-mail/junk <--------
+ locking TESTSUITE/spool/db/retry.lockfile
+ locked TESTSUITE/spool/db/retry.lockfile
+ EXIM_DBOPEN: file <TESTSUITE/spool/db/retry> dir <TESTSUITE/spool/db> 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
+search_tidyup called
+changed uid/gid: local delivery to TESTSUITE/test-mail/junk <TESTSUITE/test-mail/junk> transport=t1
+ uid=CALLER_UID gid=CALLER_GID pid=p1239
+ home=NULL current=/
+set_process_info: pppp delivering 10HmaY-000000005vi-0000 to TESTSUITE/test-mail/junk using t1
++++TRANSPORT:
++++domain_data=dom1.ain
++++local_part_data=charlie
++++address_data=
++++home=
+appendfile transport entered
+appendfile: mode=600 notify_comsat=0 quota=0 warning=0
+ file=TESTSUITE/test-mail/junk format=unix
+ message_prefix=From ${if def:return_path{$return_path}{MAILER-DAEMON}} ${tod_bsdinbox}\n
+ message_suffix=\n
+ maildir_use_size_file=no
+ locking by lockfile fcntl
+*** delivery by t1 transport bypassed by -N option
+search_tidyup called
+journalling TESTSUITE/test-mail/junk:charlie@dom1.ain
+t1 transport returned OK for TESTSUITE/test-mail/junk
+post-process TESTSUITE/test-mail/junk (0)
+TESTSUITE/test-mail/junk delivered
+charlie@dom1.ain: children all complete
+LOG: MAIN
+ *> TESTSUITE/test-mail/junk <charlie@dom1.ain> R=r1 T=t1
+>>>>>>>>>>>>>>>> deliveries are done >>>>>>>>>>>>>>>>
+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
+DSN: processing router : r1
+DSN: processing successful delivery address: TESTSUITE/test-mail/junk
+DSN: Sender_address: CALLER@test.ex
+DSN: orcpt: NULL flags: 0x0
+DSN: envid: NULL ret: 0
+DSN: Final recipient: TESTSUITE/test-mail/junk
+DSN: Remote SMTP server supports DSN: 0
+DSN: not sending DSN success message
+DSN: processing router : r1
+DSN: processing successful delivery address: charlie@dom1.ain
+DSN: Sender_address: CALLER@test.ex
+DSN: orcpt: NULL flags: 0x0
+DSN: envid: NULL ret: 0
+DSN: Final recipient: charlie@dom1.ain
+DSN: Remote SMTP server supports DSN: 0
+DSN: not sending DSN success message
+LOG: MAIN
+ Completed
+end delivery of 10HmaY-000000005vi-0000
+search_tidyup called
+search_tidyup called
+>>>>>>>>>>>>>>>> Exim pid=p1238 (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
+search_tidyup called
+>>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
+
+******** SERVER ********
+### _data from a multi-step expansion