Thanks! Here's the new result for a bracketed period:
853220 ╭considering: ${lookup {${local_part}.list}
dsearch,ret=key,filter=file {/opt/lsoft/listserv/home} {${sg
{$value}{[.]list}{}}}fail}
853220 ╭considering: ${local_part}.list} dsearch,ret=key,filter=file
{/opt/lsoft/listserv/home} {${sg {$value}{[.]list}{}}}fail}
853220 ├considering: .list} dsearch,ret=key,filter=file
{/opt/lsoft/listserv/home} {${sg {$value}{[.]list}{}}}fail}
853220 ├───────text: .list
853220 ├considering: } dsearch,ret=key,filter=file
{/opt/lsoft/listserv/home} {${sg {$value}{[.]list}{}}}fail}
853220 ├──expanding: ${local_part}.list
853220 ╰─────result: owner-johnnies-test-list-2.list
853220 ╰──(tainted)
853220 ╭considering: /opt/lsoft/listserv/home} {${sg
{$value}{[.]list}{}}}fail}
853220 ├───────text: /opt/lsoft/listserv/home
853220 ├considering: } {${sg {$value}{[.]list}{}}}fail}
853220 ├──expanding: /opt/lsoft/listserv/home
853220 ╰─────result: /opt/lsoft/listserv/home
853220 search_open: dsearch "/opt/lsoft/listserv/home"
853220 search_find: file="/opt/lsoft/listserv/home"
853220 key="owner-johnnies-test-list-2.list" partial=-1 affix=NULL
starflags=0 opts="ret=key,filter=file"
853220 LRU list:
853220 5/opt/lsoft/listserv/home
853220 End
853220 internal_search_find: file="/opt/lsoft/listserv/home"
853220 type=dsearch key="owner-johnnies-test-list-2.list"
opts="filter=file"
853220 file lookup required for owner-johnnies-test-list-2.list
853220 in /opt/lsoft/listserv/home
853220 creating new cache entry
853220 lookup failed
853220 ╭───scanning: ${sg {$value}{[.]list}{}}}fail}
853220 ╭───scanning: $value}{[.]list}{}}}fail}
853220 ├──────value:
853220 ├───scanning: }{[.]list}{}}}fail}
853220 ├──expanding: $value
853220 ├─────result:
853220 ╰───skipping: result is not used
853220 ╭───scanning: [.]list}{}}}fail}
853220 ├───────text: [.]list
853220 ├───scanning: }{}}}fail}
853220 ├──expanding: [.]list
853220 ├─────result: [.]list
853220 ╰───skipping: result is not used
853220 ╭───scanning: }}}fail}
853220 ├──expanding:
853220 ├─────result:
853220 ╰───skipping: result is not used
853220 ├───scanning: }fail}
853220 ├──expanding: ${sg {$value}{[.]list}{}}
853220 ├─────result:
853220 ╰───skipping: result is not used
853220 ├failed to expand: ${lookup {${local_part}.list}
dsearch,ret=key,filter=file {/opt/lsoft/listserv/home} {${sg
{$value}{[.]list}{}}}fail}
853220 ├───error message: "lookup" failed and "fail" requested
853220 ╰failure was forced
853220 search_tidyup called
853218 LOG: MAIN PANIC
853218 == [email protected] R=listserv
T=listserv_transport defer (0) DT=0s: Expansion of "${lookup
{${local_part}.list} dsearch,ret=key,filter=file {/opt/lsoft/listserv/home}
{${sg {$value}{[.]list}{}}}fail}" from command
"/opt/lsoft/listserv/bin/lsv_amin /opt/lsoft/listserv/spool "${lookup
{${local_part}.list} dsearch,ret=key,filter=file {/opt/lsoft/listserv/home}
{${sg {$value}{[.]list}{}}}fail}"" in listserv_transport transport failed:
"lookup" failed and "fail" requested
853218 search_tidyup called
Here's the result for a singly escaped period:
853256 ╭considering: ${lookup {${local_part}.list}
dsearch,ret=key,filter=file {/opt/lsoft/listserv/home} {${sg
{$value}{.list}{}}}fail}
853256 ╭considering: ${local_part}.list} dsearch,ret=key,filter=file
{/opt/lsoft/listserv/home} {${sg {$value}{.list}{}}}fail}
853256 ├considering: .list} dsearch,ret=key,filter=file
{/opt/lsoft/listserv/home} {${sg {$value}{.list}{}}}fail}
853256 ├───────text: .list
853256 ├considering: } dsearch,ret=key,filter=file
{/opt/lsoft/listserv/home} {${sg {$value}{.list}{}}}fail}
853256 ├──expanding: ${local_part}.list
853256 ╰─────result: johnnies-test-list-2.list
853256 ╰──(tainted)
853256 ╭considering: /opt/lsoft/listserv/home} {${sg
{$value}{.list}{}}}fail}
853256 ├───────text: /opt/lsoft/listserv/home
853256 ├considering: } {${sg {$value}{.list}{}}}fail}
853256 ├──expanding: /opt/lsoft/listserv/home
853256 ╰─────result: /opt/lsoft/listserv/home
853256 search_open: dsearch "/opt/lsoft/listserv/home"
853256 search_find: file="/opt/lsoft/listserv/home"
853256 key="johnnies-test-list-2.list" partial=-1 affix=NULL starflags=0
opts="ret=key,filter=file"
853256 LRU list:
853256 5/opt/lsoft/listserv/home
853256 End
853256 internal_search_find: file="/opt/lsoft/listserv/home"
853256 type=dsearch key="johnnies-test-list-2.list" opts="filter=file"
853256 file lookup required for johnnies-test-list-2.list
853256 in /opt/lsoft/listserv/home
853256 creating new cache entry
853256 lookup yielded: johnnies-test-list-2.list
853256 ╭considering: ${sg {$value}{.list}{}}}fail}
853256 ╭considering: $value}{.list}{}}}fail}
853256 ├──────value: johnnies-test-list-2.list
853256 ├considering: }{.list}{}}}fail}
853256 ├──expanding: $value
853256 ╰─────result: johnnies-test-list-2.list
853256 ╭considering: .list}{}}}fail}
853256 ├───────text: .list
853256 ├considering: }{}}}fail}
853256 ├──expanding: .list
853256 ╰─────result: .list
853256 ╭considering: }}}fail}
853256 ├──expanding:
853256 ╰─────result:
853256 compiled RE '.list' not found in local cache
853256 compiling RE '.list'
853256 compiled RE '.list' saved in local cache
853256 sg: match
853256 sg: match
853256 ├───item-res: johnnies-test-2
853256 ├considering: }fail}
853256 ├──expanding: ${sg {$value}{.list}{}}
853256 ╰─────result: johnnies-test-2
853256 ├──expanding: ${lookup {${local_part}.list}
dsearch,ret=key,filter=file {/opt/lsoft/listserv/home} {${sg
{$value}{.list}{}}}fail}
853256 ╰─────result: johnnies-test-2
And here's the result for a doubly escaped period:
853282 ╭considering: ${lookup {${local_part}.list}
dsearch,ret=key,filter=file {/opt/lsoft/listserv/home} {${sg
{$value}{\.list}{}}}fail}
853282 ╭considering: ${local_part}.list} dsearch,ret=key,filter=file
{/opt/lsoft/listserv/home} {${sg {$value}{\.list}{}}}fail}
853282 ├considering: .list} dsearch,ret=key,filter=file
{/opt/lsoft/listserv/home} {${sg {$value}{\.list}{}}}fail}
853282 ├───────text: .list
853282 ├considering: } dsearch,ret=key,filter=file
{/opt/lsoft/listserv/home} {${sg {$value}{\.list}{}}}fail}
853282 ├──expanding: ${local_part}.list
853282 ╰─────result: johnnies-test-list-2.list
853282 ╰──(tainted)
853282 ╭considering: /opt/lsoft/listserv/home} {${sg
{$value}{\.list}{}}}fail}
853282 ├───────text: /opt/lsoft/listserv/home
853282 ├considering: } {${sg {$value}{\.list}{}}}fail}
853282 ├──expanding: /opt/lsoft/listserv/home
853282 ╰─────result: /opt/lsoft/listserv/home
853282 search_open: dsearch "/opt/lsoft/listserv/home"
853282 search_find: file="/opt/lsoft/listserv/home"
853282 key="johnnies-test-list-2.list" partial=-1 affix=NULL starflags=0
opts="ret=key,filter=file"
853282 LRU list:
853282 5/opt/lsoft/listserv/home
853282 End
853282 internal_search_find: file="/opt/lsoft/listserv/home"
853282 type=dsearch key="johnnies-test-list-2.list" opts="filter=file"
853282 file lookup required for johnnies-test-list-2.list
853282 in /opt/lsoft/listserv/home
853282 creating new cache entry
853282 lookup yielded: johnnies-test-list-2.list
853282 ╭considering: ${sg {$value}{\.list}{}}}fail}
853282 ╭considering: $value}{\.list}{}}}fail}
853282 ├──────value: johnnies-test-list-2.list
853282 ├considering: }{\.list}{}}}fail}
853282 ├──expanding: $value
853282 ╰─────result: johnnies-test-list-2.list
853282 ╭considering: \.list}{}}}fail}
853282 ├backslashed: '\.'
853282 ├considering: list}{}}}fail}
853282 ├───────text: list
853282 ├considering: }{}}}fail}
853282 ├──expanding: \.list
853282 ╰─────result: .list
853282 ╭considering: }}}fail}
853282 ├──expanding:
853282 ╰─────result:
853282 compiled RE '.list' not found in local cache
853282 compiling RE '.list'
853282 compiled RE '.list' saved in local cache
853282 sg: match
853282 sg: match
853282 ├───item-res: johnnies-test-2
853282 ├considering: }fail}
853282 ├──expanding: ${sg {$value}{\.list}{}}
853282 ╰─────result: johnnies-test-2
853282 ├──expanding: ${lookup {${local_part}.list}
dsearch,ret=key,filter=file {/opt/lsoft/listserv/home} {${sg
{$value}{\.list}{}}}fail}
853282 ╰─────result: johnnies-test-2
As you can see, the escaped periods give a faulty result, while the
bracketed period gives the right result and panics the application.
Neither of those states is ideal.
On Fri, Dec 19, 2025 at 1:59 PM Jeremy Harris via Exim-users <
[email protected]> wrote:
> On 2025/12/18 3:15 PM, Johnnie Adams via Exim-users wrote:
> > Here's the debug for {${sg {$value}{\.list}{}}}fail}:
> >
> > 842757 postfork: delivery-local
> >
> > 842757 search_open: dsearch "/opt/lsoft/listserv/home"
> >
> > 842757 search_find: file="/opt/lsoft/listserv/home"
> >
> > 842757 key="johnnies-test-list-2.list" partial=-1 affix=NULL
> starflags=0
> > opts="ret=key,filter=file"
> >
> > 842757 LRU list:
> >
> > 842757 5/opt/lsoft/listserv/home
> >
> > 842757 End
> >
> > 842757 internal_search_find: file="/opt/lsoft/listserv/home"
> >
> > 842757 type=dsearch key="johnnies-test-list-2.list" opts="filter=file"
> >
> > 842757 file lookup required for johnnies-test-list-2.list
> >
> > 842757 in /opt/lsoft/listserv/home
> >
> > 842757 creating new cache entry
> >
> > 842757 lookup yielded: johnnies-test-list-2.list
> >
> > 842757 delivery-local forking for pipe-tpt-cmd
>
> > I don't see a lot of difference in the logging, but I don't know any way
> to
> > make it more verbose.
>
> That looks like you only enabled the "lookup" debug channel.
> I'd suggest you add the "expand" channel also.
>
> See the docs chapter on the exim command-line, around the
> description of the "-d" option.
> --
> Cheers,
> Jeremy
>
> --
> ## subscription configuration (requires account):
> ##
> https://lists.exim.org/mailman3/postorius/lists/exim-users.lists.exim.org/
> ## unsubscribe (doesn't require an account):
> ## [email protected]
> ## Exim details at http://www.exim.org/
> ## Please use the Wiki with this list - http://wiki.exim.org/
>
--
John Adams
Senior Linux/Middleware Administrator | Information Technology Services
+1-501-916-3010 | [email protected] | http://ualr.edu/itservices
*UA Little Rock*
Reminder: IT Services will never ask for your password over the phone or
in an email. Always be suspicious of requests for personal information that
come via email, even from known contacts. For more information or to
report suspicious email, visit IT Security
<http://ualr.edu/itservices/security/>.
--
## subscription configuration (requires account):
## https://lists.exim.org/mailman3/postorius/lists/exim-users.lists.exim.org/
## unsubscribe (doesn't require an account):
## [email protected]
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/