Re: [exim] Expansion weirdness

Page principale
Supprimer ce message
Répondre à ce message
Auteur: Sven Eschenberg
Date:  
À: exim-users
Sujet: Re: [exim] Expansion weirdness

Am 01.06.2016 um 14:50 schrieb Jeremy Harris:
> On 01/06/16 13:42, Sven Eschenberg wrote:
>> Thanks for your input
>
> Exim version?


Exim version 4.87 #1 built 24-May-2016 01:15:17

>
> Run with "-d-all+expand".
>


All of them, or just the one yielding the syntax error?

exim -d-all+expand -be '${if 
def:received_ip_address{${extract{$received_ip_address}{10.0.0.1=hosta 
127.0.0.1=local4 ::1=local6}{$value}fail}}fail}'
Exim version 4.87 uid=0 gid=0 pid=18037 D=100
Berkeley DB: Berkeley DB 6.0.35: (February 26, 2015)
Support for: crypteq iconv() IPv6 PAM OpenSSL DKIM DNSSEC Event OCSP PRDR
Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm 
dbmjz dbmnz dnsdb dsearch passwd sqlite
Authenticators: cram_md5 plaintext spa
Routers: accept dnslookup ipliteral manualroute queryprogram redirect
Transports: appendfile/mailstore autoreply pipe smtp
Fixed never_users: 0
Size of off_t: 8
Compiler: GCC [5.3.0]
Library version: OpenSSL: Compile: OpenSSL 1.0.2h  3 May 2016
                           Runtime: OpenSSL 1.0.2h  3 May 2016
                                  : built on: reproducible build, date 
unspecified
Library version: PCRE: Compile: 8.38
                        Runtime: 8.38 2015-11-23
Library version: SQLite: Compile: 3.12.2
                          Runtime: 3.13.0
WHITELIST_D_MACROS unset
TRUSTED_CONFIG_LIST unset
configuration file is /etc/exim/exim.conf
log selectors = 0000cffc 10332001
trusted user
admin user
condition: def:received_ip_address
    result: false
expanding: $received_ip_address
    result:
skipping: result is not used
expanding: 10.0.0.1=hosta 127.0.0.1=local4 ::1=local6
    result: 10.0.0.1=hosta 127.0.0.1=local4 ::1=local6
skipping: result is not used
expanding: $value
    result:
skipping: result is not used
failed to expand: ${extract{$received_ip_address}{10.0.0.1=hosta 
127.0.0.1=local4 ::1=local6}{$value}fail}}fail}
    error message: missing or misplaced { or }
failed to expand: ${if 
def:received_ip_address{${extract{$received_ip_address}{10.0.0.1=hosta 
127.0.0.1=local4 ::1=local6}{$value}fail}}fail}
    error message: missing or misplaced { or }
Failed: missing or misplaced { or }

>>>>>>>>>>>>>>>> Exim pid=18037 terminating with rc=0 >>>>>>>>>>>>>>>>


As far as I understand this the failure is already triggered during
${extract} which should be skipped since def:received_ip_address yields
false. But maybe I am reading this wrong.

Looking at this variant with $if{ instead of ${extract I can see that
the string of the expansion stops after the first fail and bracket, ie:

expanding: ${if eq{10.0.0.1}{$received_ip_address}{hosta}fail}
    result:
skipping: result is not used


whereas the string parsing seems to go wrong for the ${extract case ...
since the string concludes with fail}}fail} where it should probably end
at fail}?

Regards

-Sven