On Thursday 07 June 2007 18:09, Mike Cardwell wrote: > The messy recursive acl seen earlier in this thread was only necessary > because the ${forall} function never existed when I wrote it. A much > cleaner acl would be possible now. However, I can't be arsed to > install the latest version of exim in order to get access to these > functions just to prove a point.
What buggers me is that $header_* doesn't unwrap header fields. It would have been the right thing to do, IMO, since $header_* is "high-level". It sabotages list operations a bit. Fortunately, it's pretty easy to do the unwrapping yourself: ${sg {$h_Received:}{\n([ \t])}{\$1}} (\$1 can in practice be replaced with a space). Referring to http://exim.org/mail-archives/exim-users/Week-of-Mon-20070212/msg00184.html, here is what we get (line-continuation backslashes omitted): warn set acl_m0 = ${filter {<\n${map {<\n${sg {$h_Received:}{\n[ \t]}{ }}} ${if match{$item}{\N^[^\[]+\[([^\]]+)\]\N} {${if and{{match{$1}{{\N^\d{1,3}(\.\d{1,3}){3}$\N}}} {!match_ip{$1}{+private_networks}}} {${lookup dnsdb {txt=<,{${sg{$1} {\N^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$\N} {\$4.\$3.\$2.\$1.zz.countries.nerd.dk}}]} {${uc:$value}}{UNKNOWN}}}}}}}} def:item} Well, that was hardly any more readable, and still doesn't give the same result (what differs is left as an excercise to the reader). Perhaps it's better to be a bit less lispish: warn set acl_m0 = ${sg {$h_Received:}{\n[ \t]}{ }} set acl_m0 = ${map {<\n$acl_m0} \ {${if match{$item}{\N^[^\[]+\[([^\]]+)\]\N}{$1}}}} set acl_m0 = ${filter {<\n$acl_m0} \ {${if and{{match{$item}{{\N^\d{1,3}(\.\d{1,3}){3}$\N}}} \ {!match_ip{$item}{+private_networks}}}}}} set acl_m0 = ${map {<\n$acl_m0} \ {${sg{$1}{\N^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$\N} \ {\$4.\$3.\$2.\$1.zz.countries.nerd.dk}}}} set acl_m0 = ${map {<\n$acl_m0} \ ${lookup dnsdb {<,$acl_m0}{${uc:$value}}{UNKNOWN}} (All braces reserved.) -- Magnus Holmgren [EMAIL PROTECTED] (No Cc of list mail needed, thanks)
pgpVF8n2iGljk.pgp
Description: PGP signature
-- ## List details at http://www.exim.org/mailman/listinfo/exim-users ## Exim details at http://www.exim.org/ ## Please use the Wiki with this list - http://www.exim.org/eximwiki/