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/

Reply via email to