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